Manchmal braucht es nur einen kleinen Schubs. Und der Uwe kann sehr effektiv schubsen
Generics sind schon was feines. So funktionierts:
Delphi-Quellcode:
type
TheItemKind = (ikNone, ikCheckBox, ikCheckListBox, ikComboBox, ikEdit, ikGroupBox, ikIPAddress, ikSpinEdit);
TheControlItemDef = record
Caption: string;
Kind: TheItemKind;
ConfigPath: string;
Childs: TArray<TheControlItemDef>;
class function Create(const ACaption, AConfigPath: string; const AKind: TheItemKind; AChilds: TArray<TheControlItemDef> = []): TheControlItemDef; static;
end;
TheControlItemDefs = TArray<TheControlItemDef>;
implementation
{ TheControlItemDef }
class function TheControlItemDef.Create(const ACaption, AConfigPath: string;
const AKind: TheItemKind;
AChilds: TArray<TheControlItemDef>): TheControlItemDef;
begin
Result.Caption := ACaption;
Result.ConfigPath := AConfigPath;
Result.Kind := AKind;
Result.Childs := AChilds;
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
ITEMDEFS: TheControlItemDefs;
begin
ITEMDEFS := TheControlItemDefs.Create(
TheControlItemDef.Create('Edit1', 'Edit1', ikEdit),
TheControlItemDef.Create('Spin1', 'Spin1', ikSpinEdit),
TheControlItemDef.Create('Gruppe1', 'Gruppe1', ikGroupBox, TheControlItemDefs.Create(
TheControlItemDef.Create('Checker1', 'Checker1', ikCheckBox),
TheControlItemDef.Create('Checker2', 'Checker2', ikCheckBox)
))
);
end;
(Über den ConfigPath-Member mal keine Gedanken machen, das ist fallpezifisch)
Und es gibt so auch keine Memleaks am Ende. Bin begeistert. Zumal diese Variante in der Initialisierung des Arrays noch eleganter wirkt als die ursprüngliche Version und außerdem noch mit dynamischen Arrays. Schick schick
Grüße
Cody