Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Warum Application.CreateForm(...) in .dpr? (https://www.delphipraxis.net/123504-warum-application-createform-dpr.html)

ToFaceTeKilla 3. Nov 2008 14:10


Warum Application.CreateForm(...) in .dpr?
 
Hiho,

ich hab bin gerade dabei mein aktuelles Projekt zum Abschluss nochmal durchzuleuchten (unnütze Comments löschen, Optimieren etc.)
und dabei ist mir aufgefallen, dass die Codevervollständigung* in die .dpr folgendes geschrieben hat:
Delphi-Quellcode:
begin
  //...
  Application.Initialize;
  Application.Title := 'IVES Taskmanager';
  Application.CreateForm(TIVESTimeManagerMainForm, IVESTimeManagerMainForm);
  Application.CreateForm(TFrmChooseImport, FrmChooseImport); //die Zeile
  Application.CreateForm(TFrmPropAlloc, FrmPropAlloc);  // und die Zeile
  Application.Run;
end.
Bei FrmPropAlloc und FrmChooseImport handelt es sich um 2 Forms die ich selbst erstellt und an der Stelle, wo sie verwendet werden, eingebunden habe.
Dort führe ich ebenfalls ein Application.CreateForm(xxx) aus.
Jetzt stellt sich mir die Frage, warum die CodeVervollständigung das ganze nochmal in die .dpr geschrieben hat, zumal kein Fehler auftaucht, wenn ich die 2 Zeilen in der .dpr auskommentiere.

Danke schonmal




*Ich meine die Programmierhilfe die beim drücken von [Ctrl]+[Shift]+[C] einsetzt, weis leider nichtmehr wie die heißt und finde es auch nicht :oops:

SirThornberry 3. Nov 2008 14:14

Re: Warum Application.CreateForm(...) in .dpr?
 
Sobald du ein neues Formular anlegst werden diese Zeilen automatisch der DPR hinzugefügt. Wenn du nicht willst das es automatisch erzeugt wird kannst du dies manuell oder über die Projektoptionen entfernen.
Das es auch funktioniert wenn du zusätzlich die Forms später nochmal anlegst ist normal denn per Default sind die Fomulare unsichtbar. Das heißt in der DPR werden sie erzeugt aber nicht angezeigt. Wenn du jetzt erneut eine Instanz deiner Formklasse erzeugst und diese der Variablen zuweist gibt es 2 Formularinstanzen, die eine von dir welche du dann vermutlich anzeigst und dann noch die automatisch erzeugte auf die du dann über die Variable nicht mehr zugreifen kannst weil du die Variable bereits mit deiner Instanz überschreiben hast.

ToFaceTeKilla 3. Nov 2008 14:19

Re: Warum Application.CreateForm(...) in .dpr?
 
Hm danke schonmal soweit.
Das wirft wiederum die Frage auf, warum das dann nur bei den beiden Forms so ist. Ich hab mindestestens noch zwei Forms erstellt, die auf die gleiche Weise angelegt werden und die wurden nicht in die .dpr geschrieben. Tritt das nur bei einer bestimmten Verfahrensweise auf?

SirThornberry 3. Nov 2008 14:29

Re: Warum Application.CreateForm(...) in .dpr?
 
Das ganze tritt eigentlich immer auf wenn du ein Projekt geöffnet hast und dann auf "File->New Form" oder so ähnlich gehst.

ToFaceTeKilla 3. Nov 2008 14:37

Re: Warum Application.CreateForm(...) in .dpr?
 
Naja, wer weis warum es nur die zwei eingetragen hat.
Jetzt weis ich wenigstens, dass das redundant ist und kann die Zeilen beruhigt löschen.

Danke nochmal :thumb:

Medium 3. Nov 2008 14:46

Re: Warum Application.CreateForm(...) in .dpr?
 
Es ist nicht nur redundant, sondern dadurch dass es ein Speicherleck erzeugt sogar fast schon als ausgewachsener Fehler einzustufen ;)

mashutu 3. Nov 2008 15:53

Re: Warum Application.CreateForm(...) in .dpr?
 
Zitat:

Zitat von ToFaceTeKilla
Hm danke schonmal soweit.
Das wirft wiederum die Frage auf, warum das dann nur bei den beiden Forms so ist. Ich hab mindestestens noch zwei Forms erstellt, die auf die gleiche Weise angelegt werden und die wurden nicht in die .dpr geschrieben. Tritt das nur bei einer bestimmten Verfahrensweise auf?

Wenn Du es ueber das Menue von Delphi machst wird es automagisch ins Projekt eingefuegt.

Wenn Du ein bestehendes Formular als Template hast und dieses kopierst und an geeigneter Stelle in die Uses einbindest und instantiierst, passiert das nicht.


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