Einzelnen Beitrag anzeigen

Benutzerbild von DeepCopy
DeepCopy

Registriert seit: 5. Aug 2008
Ort: Gießen
21 Beiträge
 
Lazarus
 
#8

Re: Reihenfolge beim Laden von Properties verändern

  Alt 25. Okt 2008, 10:00
Ich fasse das jetzt mal zusammen.

Zitat von Roachford:
ok, nochmal zum mitschreiben.

Folgende Gedankenkette:

1. Wir sorgen dafür, dass die Properties immer gültige Kombinationen haben.
2. Wenn 1. zutrifft, dann werden auch nur gültige Kombinationen gestreamt.
3. Wenn 2. zutrifft, dann werden nur gültige Werte gelesen.
4. Wenn 3. zutrifft, dann kann man sich die Überprüfung bei 3. sparen.
5. Wenn 4. erfüllt ist, dann kann man in 1. die Überprüfung begrenzen, dass diese immer nur dann ausgeführt wird, wenn nicht 3. aktuell ist.

Ergo: Wenn csLoading in ComponentState gesetzt ist, dann keine Gültigkeitsprüfungen. Dadurch kommen immer gültige Kombinationen in die Properties bzw. in die DFM. Damit kann man sich die Überprüfung der Eigenschaft beim Laden des Formulars sparen.
Zu 1. und 2. gehe ich davon aus das du gültige Wertebereiche mit gültigen Kombinationen meinst, richtig?

Das ist in der Tat gut, nur hatte ich ja nicht vor die Eigenschaft zu püfen wenn ohnehin fest steht das gültige Werte vorhanden sind. Auch hilft mir die Abfrage von csLoading nicht, denn dann würde ich ja den Code beim Laden einfach überspringen, so als wenn ich ihn erst gar nicht geschrieben hätte. Und das hilft mir bei meinem Problem ja nicht weiter, der Code sollte ja direkt beim Laden ausgeführt werden.

Zur Reihenfolge der Properties:
Es so wie du es gesagt hast, es existieren zwei Listen, eine für Datentypen und eine für Objekte. Die Reihenfolge der Properties in jeder Liste ist absolut zu der Reihenfolge der Klasse in der sie deklariert worden sind, mit der Ausnahme das sie nach Einfachen und Objekt-Typen getrennt werden.

Und Danke nochmal für den Hinweis auf Loaded (das wäre wohl meine nächste Überlegung gewesen), ich habe meine Komponente nun so angepasst:
Delphi-Quellcode:
procedure TCommandShell.Loaded; // override von TComponent
begin
 inherited;
 if (Assigned( FShellMemo)
     AND FAutoRun
     AND ( NOT csDesigning in ComponentState) ) ) then
  Run();
end;
Also damit steht fest, die Reihenfolge ist nur für Einfache und Objekt-Typen getrennt steuerbar, und auf dieses Verhalten sollte man sich nicht verlassen. Dh. wenn alle Properties zur Verfügung stehen müssen ist die virtuelle procedure TComponent.Loaded zu verwenden.

Dank an alle. [CLOSED]
Andreas
Gruß Andreas
---------------------------------------------------
Sic Luceat Lux (so lasse das Licht erstrahlen)
- ich kam sah und wusste nichts -
  Mit Zitat antworten Zitat