Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Eigene Komponente erzeugt Stapelüberlauf im Designer :(
trm - Fr 25.05.12 22:05
Titel: Eigene Komponente erzeugt Stapelüberlauf im Designer :(
Im Anhang ist eine kurze Unit, welche beim Versuch die Eigenschaft im OE unter DoubleLineColor -> DoubleColorOnOff umzuschalten, immer eine Fehlermeldung erzeugt: Stapelüberlauf. Bitte beenden Sie Delphi und starten sie neu.
Die Namen habe ich schon geprüft, die sind alle unique, also eine Klasse oder Variable ist nicht gleichlautend einer Funktion.
Vielleicht kann mir da bitte jemand helfen :)
jaenicke - Fr 25.05.12 23:07
Schau dir einmal an was du im Setter machst:
Du setzt die Eigenschaft selbst erneut.
Dabei wird dann der Setter erneut aufgerufen, setzt die Eigenschaft, dabei wird der Setter aufgerufen, setzt...
Und zack, Stapelüberlauf...
Das habe ich nun auf den ersten Blick gesehen, aber ich möchte dennoch kurz zeigen wie du das auch debuggen kannst. Und zwar öffnest du das Package und trägst dann unter Start --> Parameter... Delphi selbst als Hostanwendung ein. Dann setzt du einen Haltepunkt auf den Setter und drückst normal F9 zum Ausführen. Nun startet Delphi selbst ein zweites Mal im Debugger.
Dann erstellst du in dem debuggten Delphi ein neues Projekt, packst deine Komponente drauf und klickst die Eigenschaft an. Nun landest du bei deinem Haltepunkt und kannst schauen was passiert. Das sieht dann so aus:
Wie du siehst landest du immer direkt wieder im Setter. Den Grund habe ich ja schon erläutert. ;-)
Nebenbei:
Sowas passiert, wenn man den Setter anders als die Eigenschaft nennt...
trm - Fr 25.05.12 23:45
Danke Sebastian für die Erklärung.
Mit Delphi7 bekomme ich die Sache mit dem Debuggen nicht hin.
Gelöst habe ich die Sache, indem ich in den Set-Porceduren der Eigenschaften abfrage, ob das Grid überhaupt vorhanden ist.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TDoubleColor.SetDoubleColor(const Value: Boolean); begin
if FDoubleColor <> value then begin FDoubleColor := value; if assigned(FGrid) then FGrid.Invalidate; end;
end; |
Damit gehts :)
jaenicke - Sa 26.05.12 00:33
trm hat folgendes geschrieben : |
| Mit Delphi7 bekomme ich die Sache mit dem Debuggen nicht hin. |
Ich bin unterwegs und habe daher gerade kein Delphi 7 da, aber hier im Forum mögen das ja einige so gern, da wird ja vermutlich jemand kurz schauen können, ob das dort genauso geht. :mrgreen: (Ich glaube mich zu erinnern, dass es da damals genauso ging.)
trm hat folgendes geschrieben : |
| Gelöst habe ich die Sache, indem ich in den Set-Porceduren der Eigenschaften abfrage, ob das Grid überhaupt vorhanden ist. |
Das war ja nicht das Problem und dass es nicht zugewiesen ist, dürfte nie passieren. Schließlich bekommst du das Grid im Konstruktor schon. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!