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