![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Создание или управление формами по названию классаDelphi , Компоненты и Классы , КлассыСоздание или управление формами по названию класса
Оформил: DeeCo { Wenn Sie verschiedene Formular zentral initialisieren mцchten und dies mittels der Klassennamen erledigen mцchten, dann genьgt folgendes... Dabei kцnnen Sie auch allgemeine Aufgaben dazu erledigen... } { If you'd like to zentralize Form creation only using class reference information, then use the following... You should do some generic jobs by the way, as shown in the example. } unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; { Main Form declaration } type TForm2 = class(TForm) btShowOneForm: TButton; procedure btShowOneFormClick(Sender: TObject); private public end; var Form2: TForm2; { extra stuff for the example...} { First, I declare some generic stuff to be available from all of my automatic created forms: interface is the best } type IMyGenericFormInterface = interface(IUnknown) ['{FDABF2E0-2279-11D6-9648-000374890932}'] function GetTitel: string; property Titel: string read GetTitel; end; { Then I can inflate the functionality of any of my declared Form classes, adding a ref to my generic interface. Notice: the function must be implemented in all the children classes using he interface, but the main program doesn't care what is there being done...just use it. } type TMyFormTwo = class(TForm2, IMyGenericFormInterface) private function GetTitel: string; end; { You have to register your form class using RegisterClasses or to declare a variable of the given class so Delphi'll do it for you... } var MF2: TMyFormTwo; {...END of extra stuff } implementation {$R *.dfm} function TMyFormTwo.GetTitel: string; begin Result := 'Titel of 2. Form'; end; { !!! THIS is the "Global creation procedure" you should use !!! } procedure ShowClassifiedForm(TheFormClass: TFormClass); var X: TForm; begin X := TheFormClass.Create(Application); try // Extra stuff: Check to see if TheFormClass // can manage with Title if Supports(X, IMyGenericFormInterface) then ShowMessage((X as IMyGenericFormInterface).Titel); X.ShowModal; finally X.Free; end; end; procedure TForm2.btShowOneFormClick(Sender: TObject); begin //This will modal show a new copy a the Form2... ShowClassifiedForm(TForm2); //This will modal show an instance of a "TMyFormTwo" as a //sub class of TForm2, thus showing the Titel at first... ShowClassifiedForm(TMyFormTwo); end; end. Пример программирования на языке Delphi! 😊 В этом коде демонстрируется создание или управление формами на основе ссылки на класс. Автор DeeCo предоставляет обширное объяснение концепции и ее реализации в Delphi. Вот разбивка кода: Декларация формы
Класс Общий интерфейс декларации
Интерфейс Подкласс декларации
Класс Глобальная процедура создания
Процедура Обработчик события
Обработчик события для В целом, это пример мощного способа управления формами в Delphi с помощью интерфейсов и ссылок на классы. Это отличный способ декуплировать создание форм от конкретной реализации каждой формы, что позволяет получать больше гибкости и повторяемости. 💻 Создание или управление формами в Delphi можно реализовать с помощью классов и интерфейсов, позволяя создавать формы по их наименованиям классов. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |