Hallo,
ich habe aus TTreeList (einer TMS-Komponente) eine neue Klasse abgeleitet, um einfacher miteinander verknüpfte Datenbankdaten aus wechselnden Sichten darzustellen. Datenübernahme und Darstellung des Baums funktionieren.
Was nicht funktioniert ist die Anzeige der Icons. Die Imagelist ist vorhanden, angebunden und gefüllt und wird von der Ausgangskomponente auch angezeigt.
Werden hier eventuell bestimmte Eigenschaften nicht vererbt ?
Delphi-Quellcode:
type
TDSDef = record
dataset : TDataset;
Datafield: shortstring;
Parentkey: shortstring;
Ownkey: shortstring;
imgIndex: word;
SavedFilter: string;
end;
TDSDefs = array of TDSDef;
TPrTreeList = class(TTreeList)
private
DSDefs: TDSDefs;
{ Private-Deklarationen }
protected
{ Protected-Deklarationen }
public
constructor Create(aOwner: TComponent);
procedure AddDatasetLevel(ds: TDataset; Datafield: shortstring; img: word; ParentKey: shortstring=''; OwnKey: shortstring='');
procedure ClearDatasets;
procedure FillTree;
function CreateNode(aParent: TTreeNode; aLevel: word):TTreeNode;
{ Public-Deklarationen }
published
{ Published-Deklarationen }
end;
procedure Register;
implementation
constructor TPrTreeList.Create(aOwner: TComponent);
begin
inherited create(aOwner);
end;
procedure TPrTreeList.AddDatasetLevel(ds: TDataset; Datafield: shortstring; img: word; ParentKey: shortstring=''; OwnKey: shortstring='');
var i : byte;
begin
setlength(DSDefs, Length(DSDefs)+1);
i := high(DSDefs);
DSDefs[i].dataset := ds;
DSDefs[i].Datafield := datafield;
DSDefs[i].parentkey := ParentKey;
DSDefs[i].ownkey := OwnKey;
DSDefs[i].SavedFilter := ds.Filter;
DSDefs[i].imgIndex := img;
end;
procedure TPrTreeList.ClearDatasets;
begin
setlength(DSDefs,0);
end;
procedure TPrTreeList.FillTree;
//var i : byte;
begin
try
DSDefs[0].dataset.first;
CreateNode((self as TTreeview).TopItem, 0);
finally
end;
end;
function TPrTreeList.CreateNode(aParent: TTreeNode; aLevel: word):TTreeNode;
var bsNode: TTreeNode;
begin
if aLevel > 0 then
begin
DSDefs[aLevel].dataset.filter := DSDefs[aLevel].Ownkey + '=' + DSDefs[aLevel-1].dataset.FieldByName(DSDefs[aLevel].Parentkey).AsString;
DSDefs[aLevel].dataset.filtered := true;
end;
DSDefs[aLevel].dataset.first;
while not DSDefs[aLevel].dataset.Eof do
begin
bsNode := Items.AddChild(aParent, DSDefs[aLevel].dataset.FieldByName(DSDefs[aLevel].Datafield).AsString);
bsnode.imageIndex := DSDefs[aLevel].imgIndex;
bsnode.SelectedIndex := bsnode.imageIndex;
if aLevel < length(DSDefs)-1 then CreateNode(bsNode, aLevel+1);
DSDefs[aLevel].dataset.Next;
end;
end;
Danke für jede Rückmeldung.
JK