Autor Beitrag
BeniSchindler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 82

Win 2k / suse9.1
D7 Prof / Kylix 3
BeitragVerfasst: Sa 02.04.05 16:29 
Holla,

ich habe eine Komponente mit z.B.: 3 Properties :
Active : Boolean;
Command : string;
Color : TColor;

Nun ist es so, das ich erst die Property Command und Color zuweisen muss, bevor es funktioniert Active auf True zu setzen. In der DesignTime umgebung funzt das ja noch alles sehr gut, da ich da ja manuell bestimme in welcher reihen folge ich welche Propertys setze.

Wenn ich nun jedoch compoiliere setzt der Computer als erstes Active auf True und kennt damit noch nicht die Variablen Command und Color. Kann ich dem Computer irgendwie mitteilen, das er sich erst die Propertys Command und Color lädt?

Ich hoffe das war verständlich genug. :)

mfg Beni

_________________
Result := 42; Application.ProcessMessages;
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Sa 02.04.05 23:01 
Moin!

Nein, IMHO werden die Properties alphabetisch sortiert geladen, aber selbst das ist nicht sicher. Du musst von deinem Code her das ganze so machen, das du die Aktionen die durch setzen der Eigenschaften ausgelöst werden nicht sofort ausführst. Dazu sollte die der ComponentState helfen, dort dann csDesigning und csLoading.

MfG
Muetze1
BeniSchindler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 82

Win 2k / suse9.1
D7 Prof / Kylix 3
BeitragVerfasst: So 03.04.05 17:27 
thx.

das mit dem ComponentState hat gefunzt.

mfg Beni.


Für alle die das selbe Problem haben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TSQLQueryBiDirectional.SetActive(Value: Boolean);
begin
  // wenn die SetActive Procedure wärend des Ladens
  // aufgerufen wird, so führe das Aktivieren nicht sofort aus,
  // da eventuell noch nicht alle Parameter vorhanden sind.
  // Setze eine Variable, die nach dem kompletten Laden der
  // Komponente wieder abgefragt wird, und dann das Acitve
  // erneut aufruft.  ---> Procedure Loaded; Override;
  if (csLoading in ComponentState) then begin
    SetActiveAfterLoaded := True;
    exit;
  end;
  
[...]
end;


procedure TSQLQueryBiDirectional.Loaded;
begin
  inherited;
  if SetActiveAfterLoaded then begin
    SetActiveAfterLoaded := False;
    Active := True;
  end;
end;

_________________
Result := 42; Application.ProcessMessages;