2013-05-18 3 views
0

현재 양식 클래스에서 대화 상자를 만들고 대화 상자에서 값을 다시 가져 오려고합니다.런타임에 대화 상자를 만들고 반환 값을 얻는 방법?

이것은 샘플 코딩입니다.

with TFormClass(FindClass('Tf_dialog_partner')).Create(Application) do 
    try 
    ShowModal; 
    Value := DialogPublicVar; 
    except 
    Free; 
    end; 

DialogPublicVar 내이 uses 절에 Tf_dialog_partner의 장치를 사용하지 않는이 현재의 클래스를 코딩 바로 지금, Tf_dialog_partner (TForm을의 자손) 클래스의 공용 변수, 난 단지에 FindClass 함수를 사용하여, 내가 만들 수 있습니다 새로운 형태로 잘 어울린다.

이 현재 클래스는 Tf_dialog_partner의 특성을 인식하지 못하기 때문에이 코드는 오류이므로 DialogPublicVar을 인식하지 못합니다.

DialogPublicVar를 인식하도록 현재 클래스를 만드는 방법을 도와주세요.

모두에게 감사드립니다.

답변

2

반환되는 값이 정수인 경우 간단한 옵션은 ShowModal() 자체가 값을 반환하도록하는 것입니다. 대화 상자를 닫을 준비가되면 ModalResult 속성을 원하는 값으로 설정할 수 있으며 ShowModal()은 해당 값을 반환합니다.

그렇지 않으면 변수를 클래스의 게시 된 속성으로 변경 한 다음 RTTI를 사용하여 TypInfo.pas 단위에서 사용할 수있는 함수를 통해 변수에 액세스 할 수 있습니다.

또 다른 옵션은 폼 클래스가 구현하는 공유 단위에 인터페이스를 정의하는 것입니다. 여기서 인터페이스는 값을 검색하기 위해 양식을 재정의하는 메서드를 선언합니다. 그런 다음 나머지 코드는 Supports() 함수를 통해 해당 인터페이스에 대한 대화 상자를 쿼리하고 노출 된 메서드를 호출 할 수 있습니다.

1

이것을 (정수로) 시도하거나 유형을 변경하십시오.

var a: Integer; 
... 
a := MyFormDialog.ShowDialog(...); 
if (a = 5) 
    DoWork() 
else 
    DoNotWork(); 
... 


function TMyFormDialog.ShowDialog(...): Integer; 
begin 
    ... 
    ShowModal; 
    ... 
    if(A) 
    result := 5; 
    else 
    result := 2; 
end;