Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wann sind objecte auf der IDE fertig initialisert?

  Alt 28. Feb 2018, 09:49
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 Delphi-Referenz durchsuchenTComponentState)

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 Delphi-Referenz durchsuchenTComponent.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.
$2B or not $2B

Geändert von himitsu (28. Feb 2018 um 10:02 Uhr)
  Mit Zitat antworten Zitat