AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Form erzeugen / löschen

Ein Thema von Hansa · begonnen am 12. Sep 2004 · letzter Beitrag vom 12. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2   
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

Form erzeugen / löschen

  Alt 12. Sep 2004, 13:36
Hi,

meine Forms habe ich vorerst von Delphi erzeugen lassen, also beim Programmstart. Da dies wegen immer mehr Forms langsam unüberschaubar wurde (Reihenfolge usw.), mache ich es nun lieber selber, z.B. so :
Delphi-Quellcode:
frmEing := TfrmEing.Create (self);
frmEing.Show;
Wo packe ich jetzt den passenden Destructor hin ? Eine weitere Frage ist, es wird immer empfohlen, die Forms dynamisch zu erstellen, ich sehe da kaum einen Vorteil, außer, daß die EXE 5% kleiner wurde.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Form erzeugen / löschen

  Alt 12. Sep 2004, 13:41
Delphi-Quellcode:
frmEing := TfrmEing.Create (self);
frmEing.Show;
Hai Hansa,

da ich meine Forms immer mit .ShowModal erzeuge gebe ich sich einfach danach wieder frei.
Zitat:
..ich sehe da kaum einen Vorteil, außer, daß die EXE 5% kleiner wurde.
Der Speicherverbrauch der Anwendung dürfte aber deutlich kleiner werden da Speicher erst dann angefordert wird wenn er auch gebraucht wird.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: Form erzeugen / löschen

  Alt 12. Sep 2004, 13:53
Wenn ich den Code in ein LabelClick einbaue, was dann, wenn ich es mehrmals anklicke ? Habe ich 10 Forms und erzeuge eine, dann wird wohl Speicher gespart, aber wenn ich nun alle 10 einmal aufrufe, dann ist doch kein Vorteil mehr da, oder doch ? Laut dem Code wird ja sogar jedesmal eine Form erzeugt. Oder wird sie autommatisch gelöscht ? Woher soll Delphi wissen, was überflüssig ist ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Form erzeugen / löschen

  Alt 12. Sep 2004, 13:59
Ich meinte das anders. Eine Anwendung von mir besteht z.B. aus über 100 Forms. Im Regelfall werden aber nur 10-20 benutzt. Wenn ich sie jetzt alle beim Programmstart erzeugen würde verbraucht das Programm mehr Speicher als notwendig.
Wenn Du eine Form 10x erzeugst brauchst Du natürlich auch 10x den Speicher.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: Form erzeugen / löschen

  Alt 12. Sep 2004, 16:43
Das ist schon klar, aber wohin jetzt mit dem Create ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Form erzeugen / löschen

  Alt 12. Sep 2004, 16:51
Hi,
du kannst im OnClose Event deiner frmEing Form folgendes reinschreiben:
Delphi-Quellcode:
procedure TfrmEing.FormClose(Sender: TObject; var Action: TCloseAction);
begin
     Action := caFree ;
end;
Dann gibst du den Speicher bei Schließen deiner Form wieder frei.

Aber du hast noch einen Denkfehler, in der Art, wie du deine Forms erzeugst mit
Delphi-Quellcode:
frmEing := TfrmEing.Create (self);
frmEing.Show;
da du bei jedem Aufruf deiner Variablen frmEing einen neuen Wert gibst, und du somit keinen Zugriff mehr auf bereits existierende Instanzen von TfrmEing hast. Was dir da übrig bleibt, ist entweder alles in einem Array zu speichern, oder erst gar nicht versuchen, den Pointer zu speichern, und dein Form einfach wie folgt anzuzeigen:
Delphi-Quellcode:
with TfrmEing.Create (self) do begin
   Show;
end ;
Gruß,
Tom
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#7

Re: Form erzeugen / löschen

  Alt 12. Sep 2004, 17:13
Im Anhang zum letzten Post dieses Threads wirst Du geholfen Hansa.
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Form erzeugen / löschen

  Alt 12. Sep 2004, 19:02
Leusels Code kapier ich so nicht recht. Außer, daß er wohl so programmiert wie ich. Das mit dem caFree von Jelly kommt mir aber bekannt vor. Kann ich nicht einfach das im OnClose einbauen ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Form erzeugen / löschen

  Alt 12. Sep 2004, 19:06
Zitat von Hansa:
Kann ich nicht einfach das im OnClose einbauen ?
Na dann lies meinen Beitrag doch nochmal genauer
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: Form erzeugen / löschen

  Alt 12. Sep 2004, 19:20
Was soll ich denn da noch lesen. 8) Reicht ein caFree im OnClose nun oder nicht ? Die OH kennt das bei mir nicht. Oder besser noch, wie überprüfe ich das ganze, ob der Speicher freigegeben wurde ? Mit Memavail ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 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