AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisfrage zu form.close

Ein Thema von khh · begonnen am 2. Dez 2008 · letzter Beitrag vom 3. Dez 2008
Antwort Antwort
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#1

Verständnisfrage zu form.close

  Alt 2. Dez 2008, 15:07
hallo zusammen,
ich erzeuge aus einem Form1 ein zweites form und zeige diese modal an.

kdbearbeitenform := Tkdbearbeitenform.Create(nil);
kdbearbeitenform.showmodal;

mit Klick auf einen Button im Form kdbearbeitenform wird das Form geschlossen.

close;


nun habe ich gedacht, ich muss in der proc FormClose das Form mit free "zerstören" da es ja möglich ist aus Form1 immer wieder mit

kdbearbeitenform := Tkdbearbeitenform.Create(nil);
kdbearbeitenform.showmodal;

ein neues Form zu erzeugen.


wenn ich das so mache, bleibt mein Prog beim Schliessen stehen, ohne free funktioniert es fehlerlos?

Aber wird der Speicher so überhaupt freigegeben, oder streikt das Porg vieleicht nach xy-maligen Erzeugen des 2ten Form?

Danke Gruss KH
Karl-Heinz
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#2

Re: Verständnisfrage zu form.close

  Alt 2. Dez 2008, 15:27
Zitat von khh:
hallo zusammen,
ich erzeuge aus einem Form1 ein zweites form und zeige diese modal an.
[...]
Und danach mit free freigeben.
Delphi-Quellcode:
 kdbearbeitenform := Tkdbearbeitenform.Create(nil);
try
 kdbearbeitenform.showmodal;
finally
 kdbearbeitenform.free;
end;
Zitat von khh:
wenn ich das so mache, bleibt mein Prog beim Schliessen stehen, ohne free funktioniert es fehlerlos?
Das glaube ich nicht, dass es fehlerlos funktioniert, wenn Du es mit Owner = NIL kreierst und nur mit close zumachst.
close setzt (vereinfacht gesagt) lediglich die visible-eigenschaft auf false.

Ausserdem solltest Du nicht 'close' verwenden, sondern den Buttons entsprechende "modalresult"-Values zuweisen.
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Verständnisfrage zu form.close

  Alt 2. Dez 2008, 15:39
Zitat von mashutu:
Das glaube ich nicht, dass es fehlerlos funktioniert, wenn Du es mit Owner = NIL kreierst und nur mit close zumachst.
close setzt (vereinfacht gesagt) lediglich die visible-eigenschaft auf false.

Ausserdem solltest Du nicht 'close' verwenden, sondern den Buttons entsprechende "modalresult"-Values zuweisen.
eben drum hab ich nachgefragt.

und wenn ich einen owner zuweise, wirds ja auch erst beim entfernen des owners mit entfernt, wennich das richtig sehe.
Karl-Heinz
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Verständnisfrage zu form.close

  Alt 2. Dez 2008, 15:46
Zitat von khh:
Zitat von mashutu:
Das glaube ich nicht, dass es fehlerlos funktioniert, wenn Du es mit Owner = NIL kreierst und nur mit close zumachst.
close setzt (vereinfacht gesagt) lediglich die visible-eigenschaft auf false.

Ausserdem solltest Du nicht 'close' verwenden, sondern den Buttons entsprechende "modalresult"-Values zuweisen.
eben drum hab ich nachgefragt.

und wenn ich einen owner zuweise, wirds ja auch erst beim entfernen des owners mit entfernt, wennich das richtig sehe.
und modalresult:= mrClose gibt den speicher frei ?

mrClose gibts gar nicht
Karl-Heinz
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#5

Re: Verständnisfrage zu form.close

  Alt 2. Dez 2008, 16:04
Zitat von khh:
und wenn ich einen owner zuweise, wirds ja auch erst beim entfernen des owners mit entfernt, wennich das richtig sehe.
Das siehst Du richtig. Da du aber u.U. nicht verhindern kannst, dass das Form mehrmals erstellt wird musst Du es auch manuell freigeben.

Zitat von khh:
und modalresult:= mrClose gibt den speicher frei ?
Latuernich nicht. Das Setzen des Modalresult kann und darf den Speicher nicht freigeben. Es beendet das modale Anzeigen des Fensters.
Normalerweise willst Du ja den Modalresult hinterher auswerten, wie willst Du das denn machen, wenn sich das Fenster bereits aus dem Speicher verabschiedet hat?

Delphi-Quellcode:
  frm := tMyForm.create(NIL);
  try
     myvalue := frm.showmodal;
  finally
     frm.free;
  end;
Zitat von khh:
und modalresult:= mrClose gibt den speicher frei ?

mrClose gibts gar nicht :-(
Nimm halt mrOK oder irgendeinen anderen (von Null verschiedenen) Integerwert, wenn Du es nicht auswerten musst.
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Verständnisfrage zu form.close

  Alt 2. Dez 2008, 18:47
ok, ichdanke dir
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

Re: Verständnisfrage zu form.close

  Alt 2. Dez 2008, 19:27
öh, nur mal so als tipp, wie man ein Formular zum Verduften aus dem Speicher bewegt und ohne es an ein Parent zu hängen:

Also irgendwo rufe ich auf:
TMeinFormular.Create( nil ).Show; und das Formular wird einfach geöffnet (oh Wunder )

Das Formular braucht jetzt noch eine kleine Erweiterung im OnClose-Event:
Delphi-Quellcode:
procedure TMeinFormular.OnClose( Sender : TObject );
begin
  FreeOnRelease;
  Release;
end;
und es verpufft nach dem Schließen aus dem Speicher.

cu

Oliver

[edit] huch ... sehe gerade das ist für lazarus ... ich hoffe das geht da auch so [/edit]
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Verständnisfrage zu form.close

  Alt 2. Dez 2008, 19:54
Das ist sogar noch etwas komplizierter als notwendig. Im OnClose-Event gibt es doch extra den var-Parameter Action. Wenn man diesen auf caFree setzt, wird das Formular freigegeben.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Hansa

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

Re: Verständnisfrage zu form.close

  Alt 3. Dez 2008, 02:03
Zitat von Apollonius:
Das ist sogar noch etwas komplizierter..Wenn man diesen auf caFree setzt, wird das Formular freigegeben.
Das ist offensichtlich zu einfach.
Gruß
Hansa
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Verständnisfrage zu form.close

  Alt 3. Dez 2008, 06:29
Zitat von Hansa:
Zitat von Apollonius:
Das ist sogar noch etwas komplizierter..Wenn man diesen auf caFree setzt, wird das Formular freigegeben.
Das ist offensichtlich zu einfach.
na dan werd ich das mal probieren ,-)
Karl-Heinz
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:34 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