Achtung, bei Allem während der Ausführung des Contructor, da ist ComponentState noch nicht gesetzt. (geht ja erst nach Erstellen der Klasse, bzw. man hätte es machen können, ähnlich wie beim csDestroying, dachte aber nicht dran)
Aber da kann man sich behelfen, wenn man nach csLoading oder csDesigning im Owner.ComponentState schaut.
> beim Aufrufen von Gettern/Settern im Constructor muß also immer aufgepasst werden. (meistens macht man sowas aber besser garnicht und geht immer nur direkt auf die Felder)
Zitat:
Aber: in meinem Beispiel ist "csLoading in compoentstate" immer true - d.h. an dieser Stelle wird das Objekt nicht erzeugt oder gelöscht!!,
Wenn du im Code (z.B. Button-Click) auf den Property/Setter zugreifst, dann ist es True?
Ups, das ist ja das Property.
Dort muß natürlich das Feld (Variable) rein, also
FreeAndNil(FSubRichEd)
.
Über den Setter darf man bei sowas eh nie gehen.
> Die Komponente freigeben und dann dem Property NIL zuweisen ... wäre blöd, wenn dort dann der Setter nochmal versucht auf die alte Komponente zuzugreifen.
Ausnahme: Der Setter gibt das Objekt frei (da natürlich auch über die Variable), wenn man ihm NIL zuweist, aber da vorher natürlich auch nicht extern die Komponente zerstören.
Ist echt eigenartig.
TComponent, TComponentState usw. sind wirklich nicht "richtig" in der XE-Hilfe vorhanden.
http://docwiki.embarcadero.com/RADSt...mponent_Branch <- alles weg, auch in C++
http://docwiki.embarcadero.com/RADSt.../en/TComponent <- aber hier wird csLoading dennoch gefunden
http://docwiki.embarcadero.com/RADSt...ses.TComponent <- und nach Modulen/Units einsortiert war es auch noch nicht
http://docwiki.embarcadero.com/Libra...ComponentState <- nochmal die Hilfe des aktuellen Delphi (auch über
TComponentState)
Seit 2010 sind alle Hilfen auch Online verfügbar, aber es schadet meistens nicht, wenn man einfach nur in die aktuelle Hilfe schaut, bei solchen Basics.
http://geheimniswelten.de/sonstiges/...iler/#Compiler
http://docwiki.embarcadero.com/Libra...ComponentState <- in XE3 ist es wieder drin
https://www.freepascal.org/docs-html...nentstate.html <- Lazarus und FreePascal kennen es natürlich auch (die
VCL/
RTL ist ja in großen Teilen mit Delphi 7 vergleichbar)
http://lazarus-ccr.sourceforge.net/d...nentstate.html
http://delphi.wikia.com/wiki/TComponentState_Type <- die haben es auch nicht
Da du dir die Referenzen nicht merkst, sondern oftmals über FindComponent suchst, und das auch noch mit zusammengesetzen Namen,
> siehe TSimpTestRich_UA.getComponentName
solltest du unbedingt auch
TComponent.SetName überschreiben und dort diese Namen mit anpassen.
Entweder Self.Name niemals für SubKomponenten verwenden, oder diese Namen immer mit synchronisieren. (ich nutze sowas auch gern, für ein einfacheres/besseres Debugging und Logging)
Zitat:
Delphi-Quellcode:
published
Procedure loaded;override;
Und man sollte
NIEMALS unbedacht die Sichtbarkeiten von Überschriebenem unbedacht verändern.
> hier protected
Und in Hinblick auf C++Builder (das kann Delphi-Code nutzen) und in Bezug auf die Serialisierung von Property, inkl. einem
CVS, sollte man die Groß-/Kleinschreibung auch gleich behalten.