Статьи Королевства Дельфи

       

Можно несколько усложнить наш пример


Можно несколько усложнить наш пример и наглядно продемонстрировать новые преимущества данной методики. Давайте добавим на форму объект TListBox и изменим реализацию метода ShowHello из интерфейса IMyHello следующим образом function TfrmChild.ShowHello(AText: String): String; begin InputQuery('Вот что спросили', AText, Result); ListBox1.Items.Add('Вот что спросили:'); ListBox1.Items.Add(AText); ListBox1.Items.Add('Вот что ответили:'); ListBox1.Items.Add(Result); ListBox1.Items.Add(''); end; Идем к форме TfrmDialogFrom, добавляем туда большую кнопку, на OnClick которой пишем следующее: procedure TfrmDialogFrom.Button1Click(Sender: TObject); var MyHello: IMyHello; Result: String; begin if Assigned(Application.MainForm.ActiveMDIChild) and Application.MainForm.ActiveMDIChild.GetInterface(IMyHello, MyHello) then begin Result := MyHello.ShowHello('Где начало того конца, которым начинается начало?'); ShowMessage(Result); end; end; Если задуматься над этой процедурой, то станет ясно, что нам не важен тип активной дочерней формы и местоположение реализации этого типа (в главном приложении находится ее модуль, в том же пакете, что и TfrmDialogFrom, или где-нибудь еще). Мы просто обнаружили, что есть какая-то активная форма, спросили ее на предмет поддержки конкретного интерфейса и вызвали его метод.

Полный исходный код этой части находится в архиве (каталог Step3)


Содержание раздела