![]() |
Form zur Laufzeit erzeugen
Hallo,
ich habe meine Programme bisher immer so angelegt, das eine Mainform beim Programmstart erzeugt wird. Alle anderen Formen werden erst dann, wenn sie benötigt werden erzeugt und am Ende wieder freigegeben. (Action := cafree; ) Ich habe jetzt mit einem Freiberufler zu tun, der sich für einen Delphi Superguru hält und meint das alle Fenster undbedingt beim Programmstart erzeugt werden müssen und baut mir Projekte zwischenzeitlich so um. Inzwischen werden 40 bis 50 Forms sofort bei Programmstart erzeugt und nur verborgen und bei Bedarf angezeigt und dann wieder verborgen. Mir streuben sich bei dieser Methotik ein bischen die Haare, vielleicht verstehe ich aber auch den tieferen Sinn nicht. Was ist Eure Meinung dazu? Gruß Peter |
AW: Form zur Laufzeit erzeugen
Also eine solche Ansicht, zeugt eher von weniger "Guru"
|
AW: Form zur Laufzeit erzeugen
Vielleicht sollte er mal 2 Tage über seinem Konzept meditativ verharren. Möglicherweise kommt ihm dann die Erleuchtung :mrgreen:
|
AW: Form zur Laufzeit erzeugen
Wenn eine Form häufig und oder sehr schnell angezeigt werden muß, dann kann ein "Vorladen" dieser Form schon angebracht sein, anstatt sie ständig (aufwändig) neu erzeugen zu müssen.
Ansonsten verlängert es nur sinnlos den Programmstart und es verschwendet mehr wertvolle Resourcen. So wird in Delphi z.B. die OutOfMemory-Exception schon bei Programmstart erzeugt, weil es sonst ja passieren kann, daß im richtigen Moment dieses nicht mehr möglich ist. |
AW: Form zur Laufzeit erzeugen
Wer öffnet und schließt schon ständig 50-60 Formulare? Es macht ja Sinn, Formulare, die im normalen Programmablauf häufig benötigt werden, in der automatischen Formularerstellung zu belassen. Aber das trifft sicherlich nicht auf jedes noch so kleine Spezialfensterchen zu.
|
AW: Form zur Laufzeit erzeugen
Ich hab schonmal so einen "Guru" sagen hören, dass man sich bei Delphi um die Objekt-Freigabe nicht kümmern muss, da es Delphi ja alles selbst macht!
Als ich ihm gesagt habe, dass das für selbst erzeugte Objekte nicht zutrifft, hat er mir das erstmal gar nicht geglaubt... Soviel zum Thema Guru :lol: Ansonsten halte ich die sture Ansicht, alles müsste beim Programmstart erzeugt werden, für puren Blödsinn. Das kommt immer auf den Anwendungsfall an und muss für jede Applikation neu entschieden werden, was das sinnvollste ist. Was bringt es mir, wenn ich 200 Formulare beim Programmstart erzeuge und deswegen der User erstmal 1 Minute nichts sieht? Nichts.. |
AW: Form zur Laufzeit erzeugen
Zitat:
|
AW: Form zur Laufzeit erzeugen
Schon klar, ich glaube aber, jeder weiss, was damit gemeint ist :)
Dann korrigiere ich: "Als ich ihm gesagt habe, dass das für selbst erzeugte Objekte nicht immer zutrifft, hat er mir das erstmal gar nicht geglaubt..." besser? :D |
AW: Form zur Laufzeit erzeugen
Ein Großteil der Fenster sind modale Dialoge die mit showmodal sichtbar und mit visible = false verborgen werden. Viele werden nur sporadisch oder innerhalb einer Session garnicht gebraucht.
Zumindest bis W2000 gab es bei einer Unmenge an Fenstern ein Window - Resourcenproblem. Gruß |
AW: Form zur Laufzeit erzeugen
Wie bereits gesagt: Formulare, die bei der "normalen" Programmnutzung häufig gebraucht werden, kann man IMO ruhig automatisch erzeugen lassen. Stellt man die anderen auf "dynamisch" um, hat man meist eine gute Balance zwischen Laufzeitverhalten und Speichernutzung. Da ist ein wenig Fingerspitzengefühl angebracht. Jedenfalls ist weder die komplette automatische noch die dynamische Erzeugung immer der Königsweg.
|
AW: Form zur Laufzeit erzeugen
Zitat:
Also das vorgehen alles beim Programmstart zu erzeugen halte ich für blödsinn. Wir gehen eigentlich auch immer her alle von Delphi erzeugten globalen Formularvariablen gleich aus dem Quellcode wieder zu löschen um hier keine Probleme damit zu haben versehentlich ab und zu dieses Variable zu verwenden auch wenn man in einer ganz anderen Instanz ist. |
AW: Form zur Laufzeit erzeugen
Ich sehe das ähnlich : Vorgehensweise ist nicht gerade hilfreich. Auch die "Gurus" kochen nur mit Wasser. Werden 50 Forms oder mehr permanent im Speicher gehalten, Variablen verändert etc., dann ist das Programm in einem gewissen Zustand, der ohne allergrösste Vorsicht nicht als sicher bezeichnet werden kann.
Es wäre also eine gewisse Vorsichtsmassnahme, die Forms immer wegzumachen und bei Bedarf neu zu createn. Inkl. Initialisierungen usw. Der Speicherplatzbedarf spielt da nicht mal die grosse Rolle, die Logik aber schon. |
AW: Form zur Laufzeit erzeugen
Moin,
ich sehe den Vorteil bei der dynamischen Erstellung daran, dass es automatisch vergisst nach dem Freigeben. MfG Fabian |
AW: Form zur Laufzeit erzeugen
Was soll was vergessen ? :shock:
|
AW: Form zur Laufzeit erzeugen
Zitat:
Gibt meiner Meinung nach keine Vorteile, deshalb lieber gleich richtig machen und auf saubere Strukturen setzen, ist auch irgendwie mehr OOP finde ich. |
AW: Form zur Laufzeit erzeugen
Zitat:
|
AW: Form zur Laufzeit erzeugen
Nja, für alle, welche ihre Daten in der GUI halten, ist sowas nunmal ein gängiger Weg, wenn alles immer existiert, da sonst ja die Daten verschwinden würden. :stupid:
|
AW: Form zur Laufzeit erzeugen
Meine bisherige Praxis sah eigentlich in Kurzform so aus.
Delphi-Quellcode:
In der Initroutine werden Comboboxen, Listen u.s.w. initialisiert.
With TWorkform.Create(nil) do
begin Init(Parameterliste); Showmodal; Free; end; Dieser Teil ist jetzt in das Formcreate bei Programmstart gewandert. Das sollte , gerade in Client-Server Systemen, den Effekt haben, das bei Datenänderungen ein Neustart des Programmes notwendig ist. Mit dem obigen Aufruf würde ein schließen und wieder öffnen des Fensters ausreichen. Gruß |
AW: Form zur Laufzeit erzeugen
Wenn, dann bitte so:
Delphi-Quellcode:
with TWorkform.Create(Parameterliste) do
try ShowModal; finally Free; end; |
AW: Form zur Laufzeit erzeugen
Hallo,
ich bevorzuge eigentlich die Variante, dass sich das Form selber erstellt und auch selber wieder freigibt. Finde hat den Vorteil das der Aufruf immer gleich ist und die Änderungen sich nur an einer Stelle befinden. Bis bald Chemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:01 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-2025 by Thomas Breitkreuz