AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Erkennen, wann alle Propertys geladen sind
Thema durchsuchen
Ansicht
Themen-Optionen

Erkennen, wann alle Propertys geladen sind

Ein Thema von gemeni2005 · begonnen am 15. Dez 2021 · letzter Beitrag vom 16. Dez 2021
 
Benutzerbild von himitsu
himitsu

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

AW: Erkennen, wann alle Propertys geladen sind

  Alt 16. Dez 2021, 12:32
Jupp, den ComponentState im Setter auf csLoading oder csReading prüfen,
in diesem Fall die Aktion nicht ausführen (nur den Wert speichern)

und die gewünschte Aktion dann später im Loaded nachholen.



Aber wie schon gesagt, hier muß dann das Datenmodul entweder vor dem Laden vorhanden sein, oder es müsste während des Ladens erstellt werden.

Wir haben hier auch ein paar nette Effekte mit einem Datenmodul, was einmal über ein Designtime-Package als instanz in der IDE vorhanden ist. (die VCL/IDE speichert eine globale Liste mit allen Forms und Datenmodulen und kann darüber das Gegenüber finden)
Spaßig wird es, wenn man dann zusätzlich noch die Unit mit diesem Datenmodul öffnet, also dann das Modul doppelt vorhanden ist.
Allersdings kann man sich auch über Delphi-Referenz durchsuchenRegisterFindGlobalComponentProc registrieren und die Übersetzung Name-zu-Instanz selber vorgeben.

Delphi-Quellcode:
class function TIDEHelperModul.FindGlobalModules(const Name: string): TComponent;
begin
  Result := nil;
  if SameText(Name, 'DM1') then Result := UDM1.DM1;
  if SameText(Name, 'SysDB') then Result := UDataModul_SysDB.SysDB;
  if SameText(Name, 'DMSys') then Result := USysModule.DMSys;
  //
  // nicht beim Laden / nur vollständig :
  // TReader.ReadRootComponent>FindUniqueName findet sich sonst selber und ändert den Namen -> "DM1" zu "DM1_1" -> Referenzen werden dann nicht mehr gefunden oder falsch gespeichert
  // Grund: siehe TDM1.Create -> globale Instanz vorher setzen, für deren Benutzung während des Ladens der enthaltenen pgQueries
  if Assigned(Result) and ((csReading in Result.ComponentState) or (csDestroying in Result.ComponentState)) then
    Result := nil;
end;

[edit]
OK, dann csDesigning ... ist für die Instanz, welche gerade in der Delphi-IDE bearbeitet wird.
Kann also im Getter oder Setter benutzt werden, für das was man z.B. im Objektinspektor eingibt oder angezeigt bekommt.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Dez 2021 um 12:44 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz