Wenn Du die Referenzen (z.B. nach dem Erzeugen der Form) in einen Array ablegst oder mit der Form.FindComponent() Krücke
Wieso 'Krücke'?
Die Booleschen Werte aller Checkboxen in einem 'Optionen'-Dialog habe ich in einer 32-Bit Integervariablen gespeichert. Das Setzten der Checkboxen erfolgt folgendermaßen:
Delphi-Quellcode:
Procedure SetCheckboxes(params: Cardinal);
var i,len: Integer;
TC: TCheckbox;
begin
len:= (sizeof(params) * 8) - 1; // Anzahl der Bits -1
for i:= 0 to len do
begin
TC:= FindComponent('CheckBox' + IntToStr(i+1)) as TCheckbox; //checkbox1 ... checkbox32
IF TC <> NIL Then TC.checked:= params and (1 shl i) <> 0;
end;
end;
Das Auslesen der Checkboxen geht entsprechend:
Delphi-Quellcode:
Procedure ReadCheckboxes(var params: Cardinal);
var i,len: Integer;
TC: TCheckbox;
begin
params:= 0; // Alle Bits löschen
len:= (sizeof(params) * 8) - 1; // Anzahl der Bits -1
for i:= 0 to len do
begin
TC:= FindComponent('CheckBox' + IntToStr(i+1)) as TCheckbox; //checkbox1 ... checkbox32
If (TC <> NIL) and TC.checked Then Params:= Params or (1 shl i);
end;
end;
Die Performance ist dabei kein Problem, da das immer nur beim Öffnen bzw. Schließen des Dialogs ausgeführt wird. Wie sähe denn die Alternative z. B. hiermit aus:
TObjectDictionary<string, TButton> oder TDictionary<string, TButton>
Das Dictionary müsste doch erstmal erzeugt und befüllt werden. Wo läge da der Vorteil?
Gruß LP