Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Generische Funktion zum öffen von Forms, ohne Unit Reference (https://www.delphipraxis.net/82725-generische-funktion-zum-oeffen-von-forms-ohne-unit-reference.html)

radekj 18. Dez 2006 20:21


Generische Funktion zum öffen von Forms, ohne Unit Reference
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz