Einen wunderschönen guten abend,
mein Grundproblem ist folgendes :
Ich habe ein VirtualStringTree und möchte die Nodes und Childnodes zurEntwurfszeit anlegen lassen.Diesen Nodes sollen jetzt noch weitere Infos hinterlegt werden können.
Dieses Problem wollte ich Über eine eine TCollection mit TCollectionItems lösen.
Das ist soweit auch kein Problem.
Jetzt wollte ich Innerhalb der TCollectionItems eine neue TCollection eröffen, wo man die Unterpunke anlagen kann. Das Problem ist nur, wenn ich im Objektinspektor auf das 1. Item Klicke --> dann auf "SubItems" (was die SubCollection ist) geht kein neues Fenster auf, wo ich die Items anlegen kann.
Ich hab hier das Prinzip mal übersichtlich dargestellt.
Delphi-Quellcode:
unit Coll_Item_Test;
interface
uses SysUtils, Classes, ExtCtrls, StdCtrls;
type
TColl =
Class;
TColl_Item =
Class(TCollectionItem)
private
Var U_Caption :
String;
U_SubCollection : TColl;
procedure SetSubCollection(
const Value: TColl);
public
constructor Create(Collection: TCollection);
override;
destructor Destroy;
override;
Published
Property Caption :
String read U_Caption
write U_Caption;
Property SubItems : TColl
read U_SubCollection
write SetSubCollection;
end;
TColl =
Class(TCollection)
private
public
Published
end;
TTestPanel =
Class(TCustomPanel)
Private
U_Items : TColl;
procedure SetItems(
const Value: TColl);
public
constructor Create(AOwner: TComponent);
override;
Destructor Destroy;
override;
published
Property Items : TColl
read U_Items
write SetItems;
End;
Procedure Register;
implementation
Procedure Register;
Begin
RegisterComponents('
Standard', [TTestPanel]);
End;
{ TColl_Item }
constructor TColl_Item.Create(Collection: TCollection);
begin
Inherited;
U_SubCollection := TColl.Create(TColl_Item);
end;
destructor TColl_Item.Destroy;
begin
U_SubCollection.Free;
inherited;
end;
procedure TColl_Item.SetSubCollection(
const Value: TColl);
begin
U_SubCollection.Assign(Value);
end;
{ TColl }
{ TTestPanel }
constructor TTestPanel.Create(AOwner: TComponent);
begin
inherited;
U_Items := TColl.Create(TColl_Item);
end;
destructor TTestPanel.Destroy;
begin
U_Items.Free;
inherited;
end;
procedure TTestPanel.SetItems(
const Value: TColl);
begin
U_Items.Assign(Value);
end;
end.
also der weg sollte folgender sein
1. das Hauptobjekt -->
2. hier auf Items --> hier geht ds Fenster zum anlegen der Items auf
3. klick auf ein Items -->
4. hier auf die eingenschaft "SubItems" (hier sollte jetzt ein weiteres Fenster aufgehen, wo man die SubItems anlegen kann. aber dieses geht eben leider nicht auf.
muss hier erst irgendwas extra deklariert werden oder habe ich in meinem Grundprinzip schon einen Fehler oder könnte man das Anlegen der Nodes zu Entwurfszeit irgendwie einfacher realisieren.
mfg Jens
ps: ist im prinzip das gleiche wie
hier