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

       

Часть 3. Взаимодействие пакета с приложением


При разработке проекта довольно часто встречается ситуация, когда одна из форм (модулей данных, компонент или, наконец, просто объектов) обращается к методам второй формы, а та, в свою очередь, нуждается в вызове методов (или в доступе к свойствам) первой. Иногда эта ситуация вообще трудно разрешима (если оказываются необходимыми перекрестные ссылки в интерфейсных частях модулей — это недопустимо правилами языка) . Очень часто взаимодействие модулей проекта, форм и т.д. оказывается до такой степени перепутанным, что разобраться в этих хитросплетениях бывает тяжело (особенно если этот проект передается для дальнейшего сопровождения и доработки другому программисту). Часть таких проблем вполне может снять использование интерфейсов. Действительно, в предыдущей части для использования методов форм из пакета нам не потребовалось подключать модули, содержащие их реализацию. Что помешает использовать ту же технологию и в обратном направлении?

Попробуем это реализовать. В модуль CommonInterfaces добавляем новый интерфейс ICallBackInterface = interface ['{7D501743-B419-11D5-915B-ED714AED3037}'] procedure Callback(Text: String); end; Добавляем этот интерфейс к главной форме приложения type TForm1 = class(TForm, ICallBackInterface) MainMenu: TMainMenu; … protected { ICallBackInterface } procedure Callback(Text: String); … end; var Form1: TForm1; implementation … procedure TForm1.Callback(Text: String); begin ShowMessage('Из главной формы с приветом "' + Text + '"'); end; … А теперь возвращаемся в пакет и пробуем вызвать метод Callback главной формы из пакета. В дочерней форме TfrmChild создаем TAction aQueryInMainForm, цепляем его в меню и создаем реализацию OnExecute procedure TfrmChild.aQueryInMainFormExecute(Sender: TObject); var CallBackInterface: ICallBackInterface; begin if Application.MainForm.GetInterface(ICallBackInterface, CallBackInterface) then CallBackInterface.Callback('Привет от дочерней формы ' + Caption); end; Теперь запускаем и проверяем, что все у нас работает как надо.



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