AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Reihenfolge beim Laden von Properties verändern
Thema durchsuchen
Ansicht
Themen-Optionen

Reihenfolge beim Laden von Properties verändern

Ein Thema von DeepCopy · begonnen am 24. Okt 2008 · letzter Beitrag vom 25. Okt 2008
 
Roachford
(Gast)

n/a Beiträge
 
#7

Re: Reihenfolge beim Laden von Properties verändern

  Alt 24. Okt 2008, 18:21
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.

Delphi-Quellcode:
type
  TDependancy = class(TComponent)
  private
    fValueMin: integer;
    fValueMax: integer;
  
    procedure SetValueMin(const AValue: integer);
    procedure SetValueMax(const AValue: integer);
  public
    constructor Create(AOwner: TComponent); override;
  published
    property ValueMin: integer read fValueMin write SetValueMin default 0;
    property ValueMax: integer read fValueMax write SetValueMax default 10;
  end;

...

constructor TDependancy.Create(AOwner: TComponent);
begin
  inherited;

  fValueMax := 10;
end;

procedure TDependancy.SetValueMin(const AValue: integer);
begin
  if fValueMin <> AValue then
  begin
    if ( AValue >= fValueMax ) and not ( csLoading in ComponentState ) then
      raise Exception.CreateFmt('minimum value has to be below the maximum value (%d)!', [fValueMax]);

    fValueMin := AValue;
  end;
end;

procedure TDependany.SetValueMax(const AValue: integer);
begin
  if fValueMax <> AValue then
  begin
    if ( AValue <= fValueMin ) and not ( csLoading in ComponentState ) then
      raise Exception.CreateFmt('maximum value has to be above the minimum value (%d)!', [fValueMin]);

    fValueMax := AValue;
  end;
end;
Da die Werte zur Designzeit überprüft werden, brauchen sie nicht mehr beim Laden überprüft werden.

Wenn du eine Aktion machst, welche mit/bei dem Laden ausgeführt werden muss und gültige Werte in beiden Properties voraussetzt, dann füge diese in die überschriebene Loaded; Methode ein. Wenn es nur um die Überprüfung der Abhängigkeiten geht, dann wie im Beispiel gezeigt.

/EDIT: Dein Problem mit den Memos: Properties mit Instanzen werden aus der DFM gestreamt, aber deren Instanzen werden erst nach dem Streamen aller Elemente aktualisiert von der VCL. Somit kannst du definitiv nichts machen, wenn die AutoRunShell Property mit true aus dem Formular geladen wird. Dein Problem ist genau das von mir zuletzt beschriebene: Starte den Thread etc. in der überschriebenen Loaded Methode. Dort hast du die zugewiesene Memo Instanz samt Inhalt und dort kannst du auch schauen, ob AutoRunShell gesetzt ist.
  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 07:22 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