Mega Code Archive

 
Categories / Delphi / Forms
 

Createmanage any forms only through the Classname

Title: create/manage any forms only through the Classname? { 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.