Einzelnen Beitrag anzeigen

bepe

Registriert seit: 17. Okt 2006
118 Beiträge
 
#34

AW: Property via AsString;AsInteger;AsBoolean;.. laden

  Alt 23. Aug 2012, 18:43
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;

mfg,
bp
  Mit Zitat antworten Zitat