2013-05-18 3 views
0

Я хочу создать диалог из текущего класса формы и ожидать возврата значения из диалогового окна.Как создать диалог во время выполнения и получить возвращаемое значение?

Это пример кодирования.

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

DialogPublicVar является публичным переменной Tf_dialog_partner (потомок TFORM в) класс, прямо сейчас в моем кодировании этого текущего класса не используют блок в Tf_dialog_partner в предложении Пользы, я просто использовать функцию 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;