Hi
Wie kann ich die Reihenfolge beim Laden von Property's beeinflussen?
Ich habe mir eine Komponente (LINK_TreeView) vom Typ TCOMPONENT gebaut.
Hier habe ich nun zwei Property's im Published Bereich :
- Property LNK_Treeview : TTreeView
READ mo_LNK_TreeView
WRITE SET_TreeView
- Property Root_Text : String
READ mv_RootText : String
WRITE SET_RootText;
Während der Design Phase ist alles OK.
Starte ich jedoch das Programm für einen Testlauf, wird jedoch immer erst die Methode: SET_RootText aufgerufen.
Innerhalb der Methode beende ich jedoch den Durchlauf, wenn TreeView nicht verlinkt ist, da ich sonst den
Root-Node auf einen NIL Pointer anlege, was natürlich zu einem Fehler führt.
Deshalb benötige ich zuerst den Aufruf der Methode: SET_TreeView welche das verlinken durchführt,
Ich habe bereits die Property's innerhalb des Published Bereiches vertauscht. Das hat aber nichts geholfen.
Gibt es da überhaupt eine Möglichkeit für den Entwickler, die Reihenfolge der Property Laderoutinen zu beeinflussen?
Kann jemand helfen?
Gruß
Lorca
Reihenfolge beim Property laden
Re: Reihenfolge beim Property laden
Wenn es auf die Reihenfolge beim Laden ankommt, dann führe während des Ladens, also wenn "csLoading in ComponentState" ist, gar keine Aktionen aus, sondern erledige alles in der Loaded-Methode, dann in der richtigen Reihenfolge.
-
- Beiträge: 289
- Registriert: Mo 24. Aug 2020, 14:16
- OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
- CPU-Target: i386
Re: Reihenfolge beim Property laden
Du kannst dir bei TShellTreeView abschauen, wie man vorgehen könnte. In der Methode SetRoot, die natürlich auch beim Laden der Properties aufgerufen wird, wird der in die *.lfm geschriebene Wert zunächst in FInitialRoot zwischengespeichert:
und erst in Loaded tatsächlich gesetzt:
Code: Alles auswählen
procedure TCustomShellTreeView.SetRoot(const AValue: string);
var
RootNode: TTreeNode;
begin
if FRoot=AValue then exit;
if (csLoading in ComponentState) then
begin
FInitialRoot := AValue;
Exit;
end;
//...
Code: Alles auswählen
procedure TCustomShellTreeView.Loaded;
begin
inherited Loaded;
if (FInitialRoot = '') then
PopulateWithBaseFiles()
else
SetRoot(FInitialRoot);
end;
-
- Beiträge: 958
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Reihenfolge beim Property laden
Nein. Die Reihenfolge ist Implementation Defined und prinzipiell beliebig. Wie wp_xyz und Sieben geschrieben haben solltest du csLoading in ComponentState korrekt behandeln und die Loaded-Methode überschreiben, dafür ist das ganze ja schließlich da...Lorca hat geschrieben: Do 3. Mär 2022, 10:58 Wie kann ich die Reihenfolge beim Laden von Property's beeinflussen?
FPC Compiler Entwickler
Re: Reihenfolge beim Property laden
Hi,
ok, herzlichen Dank für eure Antworten
Danke schön
Lorca
ok, herzlichen Dank für eure Antworten

Danke schön
Lorca