Einzelnen Beitrag anzeigen

radekj

Registriert seit: 17. Dez 2006
22 Beiträge
 
#1

Generische Funktion zum öffen von Forms, ohne Unit Reference

  Alt 18. Dez 2006, 20:21
Ein Beispiel wie man Fenster ohne die Form-Unit zu wissen zeigen (Show, ShowModal) kann.

Für was es gut sein kann ?

Wir verwenden eine List wo z.B.: DBTabellenName -> FormClassenName gespeichert wird,

Dann sagen wir einfach mach mir die EditForm auf die für die Tabelle X zuständig ist und das was,
die Formen wissen praktisch selbst was sie zu editieren haben.


Deine Form:
Delphi-Quellcode:
Unit MyForm;

...

type
 TMyForm =

...

initialization

RegisterClass(TMyForm); // <- Wichtig die Form Classe muss registriert werden !!!

end.
Die Routine:
Delphi-Quellcode:
function OpenForm(const AOwner: TComponent; const AFormClassName: string): TForm;
type
  TFormClass = class of TForm;
var
  FormClass: TFormClass;
  NewForm : TForm;
begin
  Result := nil;

  FormClass := TFormClass(GetClass(AFormClassName));
  if Assigned(FormClass) then begin
    NewForm := FormClass.Create(AOwner);
    Result := NewForm;
  end;
end;
Verwendung:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls; // <- kein Bezug auf MyForm !!!

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  oTForm: TForm;
begin
  oTForm := OpenForm(nil, 'TForm2'); // <- der erster Parameter ist der Owner der Form z.B.: nil, self
                                     // oder Application.MainForm etc.
  oTForm.Show(); // oder oTForm.ShowMOdal(); etc.
end;

end.
Das funktioniert mit allen Klassen die von TPersistent abstammen.

radekj
  Mit Zitat antworten Zitat