Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi wieso löst SetParent de OnResize Event des Parents aus?!? (https://www.delphipraxis.net/70203-wieso-loest-setparent-de-onresize-event-des-parents-aus.html)

hboy 26. Mai 2006 19:09


wieso löst SetParent de OnResize Event des Parents aus?!?
 
Konkret:

Ich habe ein TPanel, dem zur Laufzeit ein TLabel hinzugefügt wird.
in TConrol.Setparent werden zwei Aufrufe getätigt...
Delphi-Quellcode:
  AParent.InsertControl(Self);
  UpdateAnchorRules;
Das Problem ist bei mir, dass ich in Panel.OnResize wieder indirekt auf das Label zugreifen will, jedoch die das Label besitzende Klasse das Label-parent in seinem Konstruktor setzt und zu dieser Zeit noch nicht vollständig initialisiert wurde, was zu einem Fehler read of address 0x00000000 führt.

Wenn mir da ein schlauer VCL-Bewanderter Kopf weiterhelfen könnte wär ich sehr dankbar... weil irgendwie verliert sich die Fehlerquelle in den Tiefen von TControl oder TWinControl.

Sehenswert dazu sind:

Delphi-Quellcode:
procedure TControl.SetParent(AParent: TWinControl);
procedure TWinControl.InsertControl(AControl: TControl);
procedure TControl.UpdateAnchorRules;

Danke schonmal....



PS: glaub das is ne harte nuss...

PPS: achja es wäre möglich, dass es mit den Anchor- oder Align-Eigenschaften des Panels oder Labels zu tun hat

hboy 26. Mai 2006 21:29

Re: wieso löst SetParent de OnResize Event des Parents aus?!
 
okay, habs jetzt umgangen:

anstelle

Delphi-Quellcode:
setlength(self.Entries,length(self.Entries)+1);
self.Entries[high(self.Entries)] := TExtendedStringValueEntry.Create(subpanel);
verwende ich

Delphi-Quellcode:
var new_entry: TExtendedStringValueEntry;
[...]
  new_entry := TExtendedStringValueEntry.Create(subpanel);
  setlength(self.Entries,length(self.Entries)+1);
  self.Entries[high(self.Entries)] := nu;

so wird zuerst das Objekt vollständig erzeugt und dann in die Array eingefügt. Dadurch ist es nicht schon zur Initialisierungszeit in der Array.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz