Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Programm mit 181 Fenstern (https://www.delphipraxis.net/117780-programm-mit-181-fenstern.html)

HHick123 24. Jul 2008 20:33


Programm mit 181 Fenstern
 
Hallo Leute, ich schon wieder (Danke für die bisherige Hilfe)...

Also ich bin gerade dabei ein GUI von BP7.0 auf Delphi 2006 zu portieren.
Die Forms sind in RES-Dateien drinnen, die ich bereits in RC-Dateien konvertiert habe. Mittels grep hab' ich dann die Anzahl der Dialogfenster gezählt. Es sind 181 (jedes reich bestückt mit Buttons, Comboboxes, Edits, etc..).

Jetzt sind mir Zweifel gekommen, ob' 181 Form-Units (aufgrund der Anzahl)eigentlich akzeptabel sind... Geht das überhaupt?
Oder soll ich die Fenster besser dynamisch erzeugen?

Viele Grüße,
Helmut

Semmel 24. Jul 2008 20:48

Re: Programm mit 181 Fenstern
 
Du wirst sicher nicht alle Fenster immer brauchen außerdem ist die Ladezeit zu lange, ich erzeuge die meisten Fenster erst zur Laufzeit (sicher 80 % +)

Dialoge

Delphi-Quellcode:
 FormX := TFormX.Create( nil );
  try
    FormX .ShowModal;
  finally
    FormX .Free;
  end;
sonstige Fenster

Delphi-Quellcode:
 if FormXY = nil then
   FormX := TFormX.Create( nil );
das wäre mein Vorschlag

alzaimar 24. Jul 2008 20:58

Re: Programm mit 181 Fenstern
 
Ich mache es etwas diffiziler:
1. Dialogfenster (Kurz ne Frage oder irgendwie ein paar Datein eingeben): So wie Du.
2. Wichtige Fenster (Datenmodule, Hauptfenster): Mit Application.CreateForm.

Die Hauptanwendung initialisiert maximal das Datenmodul und das Hauptfenster. Wenn ich allerdings eine etwas komplexere Datenbankverbindung habe, dann instantiiere ich das Haupt-Datenmodul vom Hauptfenster aus. Beispielsweise, wenn das Datenmodul Threads startet.

[edit]Von Sir Thornberry monierten Quatsch gestrichen[/edit]

SirThornberry 24. Jul 2008 21:06

Re: Programm mit 181 Fenstern
 
Zitat:

Zitat von alzaimar
So wird aber leider FormCreate nicht aufgerufen

Wie kommst du darauf? Bei mir geht das und ich wüsste auch keinen Grund warum es nicht funktionieren sollte.

omata 25. Jul 2008 01:06

Re: Programm mit 181 Fenstern
 
Zitat:

Zitat von Semmel
Delphi-Quellcode:
 
FormX := TFormX.Create(nil);
try
  FormX.ShowModal;
finally
  FormX.Free;
end;

Fenster werden nicht mit Free sondern mit Release freigegeben!

turboPASCAL 25. Jul 2008 02:41

Re: Programm mit 181 Fenstern
 
@HHick123,

verguck dich nicht so in den Resourcen. ;)
Analysiere lieber das eigentliche Programm anhand seines Ablaufes.

Leider kennen wir dein Programm nicht und können deswegen auch keine
exakte Aussage treffen.

alzaimar 25. Jul 2008 06:51

Re: Programm mit 181 Fenstern
 
Zitat:

Zitat von SirThornberry
Zitat:

Zitat von alzaimar
So wird aber leider FormCreate nicht aufgerufen

Wie kommst du darauf? Bei mir geht das und ich wüsste auch keinen Grund warum es nicht funktionieren sollte.

Weiss ich auch nicht. :oops: Ich streich das wech, verwirrt nur.

HHick123 25. Jul 2008 11:53

Re: Programm mit 181 Fenstern
 
Zitat:

verguck dich nicht so in den Resourcen.
Hmm, verlockend ist es ja schon ;-) Hab' gerade mit
Delphi-Quellcode:
DialogBox(hInstance, MAKEINTRESOURCE(100), 0, @dlgfunc);
einen alten Dialog zum Leben erweckt.

Aber besser würd' es mir schon gefallen, nur die Geometrie-Informationen aus den RES-Dateien zu verwenden und die Dialoge von TForm abzuleiten. Dazu müsste ich die RES-Dateien aber in DFM-Dateien umwandeln... Siehst Du da eine Chance? Oder einen anderen Weg? :gruebel:

Viele Grüße,
Helmut

HHick123 27. Jul 2008 10:24

Re: Programm mit 181 Fenstern
 
Zitat:

ich erzeuge die meisten Fenster erst zur Laufzeit
Ok, werd' ich auch so machen...

Hansa 27. Jul 2008 10:40

Re: Programm mit 181 Fenstern
 
Zitat:

Zitat von omata
Fenster werden nicht mit Free sondern mit Release freigegeben!

Weder, noch. :mrgreen:
Delphi-Quellcode:
procedure Tfrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;
Und bei 181 Forms würde ich mir mal dringend die Funktionsweise der Form-Inheritance ansehen, oder soll diese Zeile 181mal überall von Hand eingefügt werden ? :shock:

messie 27. Jul 2008 11:56

Re: Programm mit 181 Fenstern
 
Zitat:

Zitat von HHick123
Zitat:

ich erzeuge die meisten Fenster erst zur Laufzeit
Ok, werd' ich auch so machen...

Das würde ich von der Programmstruktur abhängig machen. Ich kann mir allerdings kein Programm vorstellen, wo so viele Fenster mit ganz unterschiedlicher Grafik und unterschiedlichen Funktionen existieren können, das es lohnt. Zudem dürfte es hässlich groß werden mit all den Ressourcen.
Das neu Erzeugen und Füllen der Unterfenster vermeidet auch Speicherprobleme: Fenster erzeugen, Daten übergeben, Daten einsammeln, freigeben ist einfach übersichtlicher.
Ich hab' hier eine Anwendung, die bestand ürsprünglich aus 26 Forms, die Daten wurden jeweils global vorgehalten. Jetzt habe ich noch vier Forms, was außer dem Hauptfenster mit Hauptmenü ein About- ein Help- und das Fenster für die eigentlichen Berechnungen sind.

Grüße, Messie

HHick123 27. Jul 2008 20:45

Re: Programm mit 181 Fenstern
 
Zitat:

kein Programm vorstellen, wo so viele Fenster mit ganz unterschiedlicher Grafik und unterschiedlichen Funktionen existieren können
Ja, ist eher ein antikes Programm. Nennen wir es mal "Bauteilbibiliothek". Man kann sich das so vorstellen: Jeder Bauteil hat ein eigenes Fenster, in dem sich die unterschiedlichsten Eigenschaften der Bauteile einstellen lassen (wobei es eine Menge gegenseitiger Beeinflussungen gibt). Wenn man das heute von "Scratch" neuprogrammieren würde, würde man das ev. überhaupt anders machen (TreeView oder ähnliches in einem Fenster), ok, aber der Kunde möchte unbedingt, dass das Programm genauso aussieht, wie früher...

rotfc 27. Jul 2008 22:28

Re: Programm mit 181 Fenstern
 
Bei den 181 Dialogen kann ich mir kaum vorstellen, daß für jede einzelne Einstellung des Programms ein eigener Dialog benutzt wird.

Irgendwo muß der Kram auch *zentral* gespeichert werden, noch dazu, wenn sich die Einstellungen gegenseitig beeinflussen (wie Du schrubst).

Diese zentrale Datei, in der diese Einstellungen gespeichert werden, würde ich mir als erstes vorknöpfen:

- welche Dialoge lesen davon Daten (nur) aus
- Welche Dialoge speichern darin (nur) Daten
- welche Dialoge ändern lesend und speichernd Daten?

Mein erster Ansatz ginge so in die Richtung einer Unit mit globalen Definitionen/Funktionen/Variablen für alle "Dialoge".

Zeig doch vielleicht mal eines dieser alten Dialogfenster (Source mit Screenshot).

Vielleicht hülft's ;-)

HHick123 29. Jul 2008 13:21

Re: Programm mit 181 Fenstern
 
Zitat:

Diese zentrale Datei, in der diese Einstellungen gespeichert werden, würde ich mir als erstes vorknöpfen
Dahinter steckt eine Oracle-Datenbank. Ich werd' mir die Daten mal näher anschauen und auch analysieren, welche Dialoge wie darauf zugreifen.

Zitat:

Zeig doch vielleicht mal eines dieser alten Dialogfenster (Source mit Screenshot).
Ev. komm' ich später darauf zurück...

Viele Grüße, Helmut


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 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