Einzelnen Beitrag anzeigen

Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
118 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Komponente über Namensvarialble ansprechen?

  Alt 6. Jun 2019, 12:11
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

Geändert von Maekkelrajter ( 6. Jun 2019 um 12:14 Uhr)
  Mit Zitat antworten Zitat