Hallo,
eine eigene Komponente soll eine Listen-Eigenschaft haben die im Objekt-Inpsektor auch bearbeitet werden kann. Bisher habe ich für solche Eigenschaften eine TOwnedCollection mit TCollectionItem verwendet. Das funktioniert auch in Delphi 10.3 einwandfrei. Jetzt würde ich gerne wissen ob ich so eine Funktionalität auch mit Generics erreichen kann?
Wenn ich versuche eine generische TCollection zu definieren bekomme ich folgender Fehlermeldung:
Zitat:
[dcc32 Fehler] Unit1.pas(18): E2003 Undeklarierter Bezeichner: 'TOwnedCollection<>'
Mein Code:
Delphi-Quellcode:
uses
..., System.Generics.Defaults, System.Generics.Collections, System.ContNrs;
type
TMyItem = class(TCollectionItem)
private
FText: string;
published
property Text: string read FText write FText;
end;
TMyCollection = class(TOwnedCollection<TMyItem>); // <-- Fehler
Mit einer TCollection statt TOwnedCollection kommt der selbe Fehler. Wenn ich einfach eine generische TObjectList verwende kann diese nicht im Objekt-Inspektor bearbeitet werden. Kompilieren lässt sich das aber problemlos.
Brauche ich vielleicht eine andere Listen-Klasse als TObjectList? Oder gehts auch mit TCollection und ich mache was falsch? Oder bleibt mir nichts anderes übrig als es wie bisher zu machen?
Beispiel:
Delphi-Quellcode:
...
TlcfBrowserCollectionItem = class;
TlcfBrowserCollection = class(TOwnedCollection)
protected
function GetBrowser(Index: Integer): TlcfBrowserCollectionItem;
procedure SetBrowser(Index: Integer; Value: TlcfBrowserCollectionItem);
public
function Add: TlcfBrowserCollectionItem; reintroduce; overload; virtual;
property Browsers[Index: Integer]: TlcfBrowserCollectionItem
read GetBrowser write SetBrowser; default;
end;
TlcfBrowserCollectionItem = class(TCollectionItem)
private
FBrowserName: String;
protected
procedure SetBrowserName(Value: String);
public
procedure AssignTo(Dest: TPersistent); override;
published
property BrowserName: String
read FBrowserName write SetBrowserName;
end;
...
Hat jemand eine Idee?