Autor |
Beitrag |
bockwurst
      
Beiträge: 191
win98 /XP
D1 D5 Prof DE2005PE
|
Verfasst: Di 14.06.05 16:32
hallo,
ich habe ein Programm, welches mit dem Speicher schon ziemlich am Ende ist.
Hier meine Frage: Wie gebe ich ein modales Formular frei? Mit Release oder Free. Wie ein nicht modales Formular?
Was ist der Unterschied in der Praxis, Wie macht ihr es?
Danke schon mal
Andreas
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 14.06.05 16:35
Delphi-Hilfe
Release:
Zitat: |
Mit Release können Sie das Formular aus dem Speicher entfernen.
Release gibt das Formular erst frei, nachdem die Ausführung der Ereignisbehandlungsroutinen des Formulars und seiner untergeordneten Komponenten beendet ist. In allen Ereignisbehandlungsroutinen sollte Release statt Free verwendet werden, um Zugriffsverletzungen zu vermeiden. |
Free:
Zitat: |
blablabla...
Um ein Formular freizugeben, ruften Sie seine Methode Release auf. Dadurch ist sichergestellt, daß das Formular erst aus dem Speicher entfernt wird, wenn die Ausführung seiner eigenen und der Ereignisbehandlungsroutinen seiner Komponenten beendet ist. |
|
|
bockwurst 
      
Beiträge: 191
win98 /XP
D1 D5 Prof DE2005PE
|
Verfasst: Di 14.06.05 16:45
Ja, daß habe ich auch gelesen.
Ich weiß allerdings nicht genau, was es heißen soll. Ganz genau, bin ich bei Delphi 1 (ich habe Fremdkomponenten und kann nicht auf höher umstellen). Wenn ich Formulare mit Release freigebe kommt noch einiger Zeit eine exception "Fehler beim Erzeugen eines Fensters" (wie gesagt mein Prog ist schon etwas überladen. Mit free kommt diese Meldung nicht. Auf den Formularen selbst scheint alles OK zu sein.
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 14.06.05 16:59
Schon Merkwürdig.
Du gibst ein Fenster frei (Modal oder nicht modal ist egal), und bekommst so eine Fehlermeldung?
Erzeugst du das gleiche Fenster evtl. nochmal, nachdem du es freigegeben hast?
Falls dem so ist, prüfe doch erstmal, ob das Formular vielleicht noch existiert.
Unter Umständen kann release ein bisschen Zeit benötigen, da alle Ereignisse ja noch abgearbeitet werden. Das passiert bei Free (gemäß OH) nicht.
Ist aber jetzt auch nur geraten.
|
|
bockwurst 
      
Beiträge: 191
win98 /XP
D1 D5 Prof DE2005PE
|
Verfasst: Mi 15.06.05 08:08
Hallo jasocul,
erstmal vielen Dank für deine Hilfe. Ja, ich ereugte das selbe Fenster immer wie neu.
Ist es sinnvoll oder sogar falsch, das Fenster nach release auf nil zu setzen. Bei Free gibt es da wohl keine Probleme.
Andreas
Zuletzt bearbeitet von bockwurst am Mi 15.06.05 09:41, insgesamt 1-mal bearbeitet
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 15.06.05 08:22
Wenn du das Abarbeiten der Ereignisse beim Freigeben des Formulars nicht benötigst, würde ich ein Free benutzen.
Falls du auf die Abarbeitung angewiesen bist, musst du die Formular-Variable an der richtigen Stelle auf nil setzen. Wo das ist, hängt von deinem Source ab, der beim Schließen des Formulars noch durchgeführt werden muss (z.B. Freigabe von belegten Ressourcen, da es sonst Memory-Leaks im Programm gibt).
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Mi 15.06.05 09:46
bockwurst hat folgendes geschrieben: | Ist es sinnvoll oder sogar falsch, das Fenster nach release auf nil zu setzen. |
wenn du eine variable auf nil setzt wird ja mit dem eingentlichen objekt, welches dahinter steckt, nichts gemacht sondern nur der verweis (die variable) auf dieses objekt wird gelöscht. wenn du also dein fenster mit release freigeben willst kannst du eigentlich ohne probleme die variable direkt danach auf nil setzen da du dieses objekt ja so wie so löschen willst und du den verweis auf diese objekt ja nicht mehr brauchst.
lg martin
|
|