1. Habe ich ein wenig den Überblick darüber verloren, wo du gerade was ausprobiert hast und wo der Fehler steckt.
2. Aus Zeitmangel, Überhitzung oder einfach weil ich mittlerweile doch Ü30 bin, habe ich dich mit dem Record auf eine falsche Spur geschickt. Hab es gerade erfolglos ausprobiert und habe selber gerade keine Ahnung was ich falsch mache.
3. Mach aus dem Record eine Klasse und alles funktioniert, wenn dein bisheriger Versuch ungefähr wie meiner aussieht:
Delphi-Quellcode:
TConfigItem = class
strict private
FWert: String;
function GetAsInteger: Integer;
function GetAsVariant: Variant;
procedure SetAsInteger(Value: Integer);
procedure SetAsVariant(Value: Variant);
public
property AsInteger: Integer read GetAsInteger write SetAsInteger;
property Value: Variant read GetAsVariant write SetAsVariant;
end;
TConfigItemDic = class(TDictionary<String, TConfigItem>);
TConfigKlasse = class
strict private
FItems: TConfigItemDic;
strict protected
function GetConfigItem(Index: String): TConfigItem;
public
constructor Create;
destructor Destroy; override;
property Item[Index: String]: TConfigItem read GetConfigItem;
end;
{ TConfigItem }
function TConfigItem.GetAsInteger: Integer;
begin
Result := StrToInt(FWert);
end;
function TConfigItem.GetAsVariant: Variant;
begin
Result := FWert;
end;
procedure TConfigItem.SetAsInteger(Value: Integer);
begin
FWert := IntToStr(Value);
end;
procedure TConfigItem.SetAsVariant(Value: Variant);
begin
FWert := Value;
end;
{ TConfigKlasse }
constructor TConfigKlasse.Create;
var
tmpTest: TConfigItem;
begin
FItems := TConfigItemDic.Create;
// Nur zum testen...
tmpTest := TConfigItem.Create;
tmpTest.AsInteger := 4711;
FItems.Add('Test', tmpTest);
end;
destructor TConfigKlasse.Destroy;
begin
FItems.Free;
inherited;
end;
function TConfigKlasse.GetConfigItem(Index: String): TConfigItem;
begin
Result := FItems[Index];
end;
//Der Test
procedure TForm1.FormCreate(Sender: TObject);
var
tmpConfig: TConfigKlasse;
begin
tmpConfig := TConfigKlasse.Create;
try
tmpConfig.Item['Test'].AsInteger := 42;
Caption := tmpConfig.Item['Test'].Value;
finally
tmpConfig.Free;
end;
end;