AGB  ·  Datenschutz  ·  Impressum  







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

Jedi VCL und Delphi Turbo Exp.

Ein Thema von Amnon82 · begonnen am 6. Sep 2006 · letzter Beitrag vom 14. Sep 2006
Antwort Antwort
Seite 5 von 6   « Erste     345 6      
Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
103 Beiträge
 
Delphi 11 Alexandria
 
#41

Re: Jedi VCL und Delphi Turbo Exp.

  Alt 10. Sep 2006, 11:22
Zitat von DevilsCamp:
Delphi-Quellcode:
procedure Form1Create(Sender: TObject);
begin
  NTListbox1 := TNTListbox.Create(Self); // oder entsprechende andere Komponente statt Self;
  NTListbox1.Parent := Self; // wie oben
  
  // Nun alle weiteren Properties setzen:
  // Width, Height, Left, Top, usw.
end;

procedure Form1Close(Sender: TObject);
begin
  NTListbox1.Free;
end;
Ensprechend für jede weitere Komponente, die nun nicht mehr per OI eingerichtet werden kann.
NTListbox1.Free ist ein böser Fehler!
Du hast die Komponente bereits der Verwaltung des Forms übergeben, also kümmert sich das Form auch um die Freigabe der Komponente.

Achim
Achim
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#42

Re: Jedi VCL und Delphi Turbo Exp.

  Alt 11. Sep 2006, 09:30
Echt?
Aber .Free schaut ja eh erst, ob was da is (so weit ich weis)
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#43

Re: Jedi VCL und Delphi Turbo Exp.

  Alt 11. Sep 2006, 09:34
[quote="kalwados"]
Zitat von DevilsCamp:
NTListbox1.Free ist ein böser Fehler!
Du hast die Komponente bereits der Verwaltung des Forms übergeben, also kümmert sich das Form auch um die Freigabe der Komponente.

Achim
hmm, bisher habe ich das immer gemacht und keine Probleme dabei bekommen.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#44

Re: Jedi VCL und Delphi Turbo Exp.

  Alt 11. Sep 2006, 09:43
[quote="DevilsCamp"]
Zitat von kalwados:
Zitat von DevilsCamp:
NTListbox1.Free ist ein böser Fehler!
Du hast die Komponente bereits der Verwaltung des Forms übergeben, also kümmert sich das Form auch um die Freigabe der Komponente.

Achim
hmm, bisher habe ich das immer gemacht und keine Probleme dabei bekommen.
Jo, weil sich TComponents im Destruktor beim Owner abmelden. Das Free ist also doppelt gemoppelt, aber unschädlich.
Uli Gerhardt
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#45

Re: Jedi VCL und Delphi Turbo Exp.

  Alt 11. Sep 2006, 09:51
Zitat:
Jo, weil sich TComponents im Destruktor beim Owner abmelden. Das Free ist also doppelt gemoppelt, aber unschädlich.
Wenn du .FreeAndNil verwendet hättest vielleicht. Bei nur .Free nicht!
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#46

Re: Jedi VCL und Delphi Turbo Exp.

  Alt 11. Sep 2006, 10:56
Zitat von mkinzler:
Zitat:
Jo, weil sich TComponents im Destruktor beim Owner abmelden. Das Free ist also doppelt gemoppelt, aber unschädlich.
Wenn du .FreeAndNil verwendet hättest vielleicht. Bei nur .Free nicht!
Was meinst du - das Abmelden oder die Unschädlichkeit? Das Abmelden funktioniert. Probier's doch einfach mal aus. FreeAndNil(...) ist natürlich sicherer, oft aber auch überflüssig (z.B. wenn man eine lokale Variable am Ende der Routine killt).
Uli Gerhardt
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#47

Re: Jedi VCL und Delphi Turbo Exp.

  Alt 11. Sep 2006, 11:28
Wenn du die Instanz manuell mit .free freigibst, dann belibt in der Referenz die Speicheradresse des Objekts stehen. So erkennt anschließend der Destruktor der Form nicht, daß du das Objekt schon freigegeben hast und versucht die Freigabe erneut. In den meißten Fällen wird das keine Problem sein, da das .OnCreate kurz vor dem Destruktor aufgerufen wird. Ich würde mich aber nicht drauf verlassen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#48

Re: Jedi VCL und Delphi Turbo Exp.

  Alt 11. Sep 2006, 11:48
Nachfahren von TComponent mit einem gültigen Owner (hier die Form) melden sich beim Erzeugen beim Owner an und beim Zerstören wieder ab - Probleme kann es also nur geben, wenn man selbst das .Free aufruft, nachdem die Form die Komponente zerstört hat - das ist IMHO aber zum Zeitpunkt des Ereignisses OnDestroy nicht so.

[Edit]Etwas umformuliert[/Edit]
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#49

Re: Jedi VCL und Delphi Turbo Exp.

  Alt 11. Sep 2006, 11:53
Zitat von mkinzler:
Wenn du die Instanz manuell mit .free freigibst, dann belibt in der Referenz die Speicheradresse des Objekts stehen.
In der Tat. Das ist der Teil bzgl. Sicherheit.

Zitat von mkinzler:
So erkennt anschließend der Destruktor der Form nicht, daß du das Objekt schon freigegeben hast und versucht die Freigabe erneut.
Nö. Ein Kind-Control wird vom Parent-WinControl aufgeräumt, weil es in dessen Controls-Array steht. Eine Kind-Komponente wird vom Owner aufgeräumt, da sie in dessen Components-Array steht. Hab ich schon mal geschrieben, und der VCL-Quelltext verrät's dir auch.

Zitat von mkinzler:
In den meißten Fällen wird das keine Problem sein, da das .OnCreate kurz vor dem Destruktor aufgerufen wird. Ich würde mich aber nicht drauf verlassen.
Wenn es so wäre, würde ich mich auch nicht drauf verlassen.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#50

Re: Jedi VCL und Delphi Turbo Exp.

  Alt 11. Sep 2006, 11:58
Zitat von uligerhardt:
Nö. Ein Kind-Control wird vom Parent-WinControl aufgeräumt, weil es in dessen Controls-Array steht. Eine Kind-Komponente wird vom Owner aufgeräumt, da sie in dessen Components-Array steht.
Das ist zwar alles richtig, aber irrelevant. Grmml. Aber Flocke hat ja eh geschrieben, was ich zum Ausdruck bringen wollte. BTW: Wo war denn der rote Kasten?
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 6   « Erste     345 6      


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 11:29 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