Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Alle Formulare einer Anwendung auflisten (https://www.delphipraxis.net/153244-alle-formulare-einer-anwendung-auflisten.html)

EarlyBird 26. Jul 2010 15:22

Alle Formulare einer Anwendung auflisten
 
Hallo zusammen,
wie kann ich alle Formulare und Datenmodule meiner Anwendung auflisten?
Also auch die, die noch nicht mit "Create" erzeugt wurden.
screen.forms, screen.CustomForms, screen.DataModules listet mir nur die Formulare auf die bereits erstellt sind.

Besten Dank für jeden Tip

Hansa 26. Jul 2010 15:31

AW: Alle Formulare einer Anwendung auflisten
 
Woher soll denn Delphi wissen, ob Du gerade Lust hast eine Form zu erzeugen oder eben nicht? :shock: Da wird wohl nur übrigbleiben, den Quelltext zu durchsuchen. Bei mir beginnen die Forms immer mit "frm". Mir würde da wohl nichts anderes übrigbleiben, als nach folgendem Muster zu suchen : frm*.create. Die automatisch erzeugten liefert ja zusätzlich screen.forms oder so.

Uwe Raabe 26. Jul 2010 16:18

AW: Alle Formulare einer Anwendung auflisten
 
Unter D2010 geht sogar das!

Delphi-Quellcode:
uses
  TypInfo, RTTI;

procedure ListAllFormClasses(Target: TStrings);
var
  aClass: TClass;
  context: TRttiContext;
  types: TArray<TRttiType>;
  aType: TRttiType;
begin
  context := TRttiContext.Create;
  types := context.GetTypes;
  for aType in types do begin
    if aType.TypeKind = tkClass then begin
      aClass := aType.AsInstance.MetaclassType;
      if (aClass <> TForm) and aClass.InheritsFrom(TForm) then begin
        Target.Add(aClass.ClassName);
      end;
    end;
  end;
end;

EarlyBird 26. Jul 2010 16:35

AW: Alle Formulare einer Anwendung auflisten
 
noch ein bisschen mehr Erklärung dazu.
Mit dem Start der Anwendung wird nur ein Login-Formular erzeugt.
Nach erfolgreicher Anmeldung sollen dann alle Formulare und Datenmodule im "Hintergrund" geladen werden.
Das Laden der Anwendung wird per Progressbar angezeigt.
Dann soll das Login-Formular geschlossen werden und mein Haupt-Formular soll angezeigt werden.

Danke Uwe. Leider funktioniert das unter Delphi2007 noch nicht:(.

shmia 26. Jul 2010 16:58

AW: Alle Formulare einer Anwendung auflisten
 
Komponenten werden von der RTL automatisch registriert.
Das Problem ist nur, dass die Registrierung nur intern ist und man da von Aussen nicht rankommt.
In Unit Classes gibt es das private
Delphi-Quellcode:
ClassList: TThreadList
.
Vielleicht hast du Glück und deine Delphi-Version lässt dich ran...

Stevie 27. Jul 2010 07:42

AW: Alle Formulare einer Anwendung auflisten
 
Forms werden nicht automatisch registriert, wenn du sie alle auflisten willst, dann musst du dich selber drum kümmern, sie irgendwie zu registrieren. Entweder über RegisterClass oder einen eigenen Mechanismus. Entweder packst du das in jeder Form unit ins initialization oder du leitest alle deine Forms von einer eigenen Form Klasse ab, die diesen Mechanismus beinhaltet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 Uhr.

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