Einzelnen Beitrag anzeigen

Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

Umgang mit Collections - AV im OI

  Alt 31. Mai 2007, 21:22
Hiho,

Ich mache grade meine ersten Gehversuche mit Collections. Wie nicht anders zu erwarten scheint es zunächst zu scheitern, aber ich vertraue mal wieder auf euch

Also, aus verschiedenen Tutorials zusammengelesen und geklaubt ist nun folgender Code:
Delphi-Quellcode:
type
  THotkey = class;

  THotkeyList = class(TCollection)
  private
    FOwner: TPersistent;
    function GetItem(Index: Integer): THotkey;
    procedure SetItem(Index: Integer; Value: THotkey);
  protected
    function GetOwner: TPersistent; override;
    procedure Update(Item: TCollectionItem); override;
  public
    constructor Create(AOwner: TPersistent);
    function Add: THotkey;
    property Items[Index: Integer]: THotkey read GetItem write SetItem; default;
  end;

  THotkey = class(TCollectionItem)
  private
    FVKCode: Cardinal;
    FModifier: Cardinal;
  public
    constructor Create(Collection: TCollection); override;
    procedure Assign(Hk: TPersistent);
  published
    property VKCode: Cardinal read FVKCode write FVKCode;
    property Modifier: Cardinal read FModifier write FModifier;
  end;

implementation

procedure THotkey.Assign(Hk: TPersistent);
begin
  with Hk as THotkey do
  begin
    FVKCode:=VKCode;
    FModifier:=Modifier;
  end;
end;

constructor THotkey.Create(Collection: TCollection);
begin
  FVKCode:=0;
  FModifier:=0;
end;

constructor THotkeyList.Create(AOwner: TPersistent);
begin
  inherited Create(THotkey);
  FOwner := AOwner;
end;

function THotkeyList.Add: THotkey;
begin
  Result := THotkey(inherited Add);
end;

function THotkeyList.GetItem(Index: Integer): THotkey;
begin
  Result := THotkey(inherited GetItem(Index));
end;

function THotkeyList.GetOwner: TPersistent;
begin
  Result := FOwner;
end;

procedure THotkeyList.Update(Item: TCollectionItem);
begin
  // <-- Muss hier was hin?
end;

procedure THotkeyList.SetItem(Index: Integer; Value: THotkey);
begin
  inherited SetItem(Index, Value);
end;
Nun, vorher habe ich dafür eine ObjectList verwendet und es hat wunderbar geklappt...
Aber ich wollte die halt auch im Objekt-Inspektor verwenden können...und dafür scheinen Collections ja ein muss zu sein.

Wenn ich die entsprechende Eigentschaft im Objektinspektor anklicke (sie wird schon mal angezeigt...) kommt die übliche leere Liste (soweit, so gut). Möchte ich dann aber ein Item hinzufügen legt sich Delphi mit einer AV auf die Nase.
Was mache ich in dem Code hier noch falsch?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat