![]() |
Piktogramme und Images in VirtualTreeView anzeigen
Hallo Zusammen
Wie kann ich in einem Baum der mit VirtualTreeView erstellt wurde vor den Node-Ebenen ein Image anzeigen? Besten Dank für jede Hilfe. Gruss Felix |
Re: Piktogramme und Images in VirtualTreeView anzeigen
mit deinbaumknoten.imageindex kannst du aus einer imageliste das bild mit dem jeweiligen index zuweisen!
|
Re: Piktogramme und Images in VirtualTreeView anzeigen
Hallo ibp
Mal besten Dank für die Antwort. Leider ist mir das noch nicht ganz klar. Ich erstelle mit folgendem Programm einen Baum:
Delphi-Quellcode:
Nun giebt es im TVirtualStringTree ein Ereignis OnGetImageIndex, dies erstellt folgende Procedure.
ServiceTable.First;
VST1.NodeDataSize:=SizeOf(TTreeData); VST1.BeginUpdate; while not PackageTable.Eof do begin PackageName:= PackageTable.FieldByName('INSTANCE').AsString; TreeData.FCaption:=(PackageName); Node:=AddVSTStructure(VST1,nil,TreeData); ServicePackageTable.First; while not ServicePackageTable.Eof do begin ServiceVerkTable.First; while not ServiceVerkTable.Eof do begin Instance:= ServiceVerkTable.FieldByName('INSTANCE').AsString; TreeData.FCaption:=(Instance); Node:=AddVSTStructure(VST1,Node,TreeData); ServiceTable.First; while not ServiceTable.Eof do begin Service:= ServiceTable.FieldByName('Service').AsString; TreeData.FCaption:=(Service); AddVSTStructure(VST1,Node,TreeData); ServiceTable.Next; end; ServiceVerkTable.Next; end; ServicePackageTable.Next; end; PackageTable.Next; end; VST1.EndUpdate; VST1.SortTree(0,sdAscending,True);
Delphi-Quellcode:
Mein Problem ist, dass diese Procedure nie ausgeführt wird.
procedure TAbfrageForm3.AbfrageForm3VST1GetImageIndex(
Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer); begin ...... end; Wo liegt hir nun der Fehler? Gruss Felix |
Re: Piktogramme und Images in VirtualTreeView anzeigen
deine bilder sind ein eriner imagelist vorhanden und diese ist auch dem vst zugeordnet!
Delphi-Quellcode:
so müsste es gehen!
...
Node:=AddVSTStructure(VST1,nil,TreeData); Node.imageindex:=1 '<------hier wird dem node das 2. bild aus der liste zugeordnet! ... |
Re: Piktogramme und Images in VirtualTreeView anzeigen
Geht leider nicht, erhalte folgender Fehler:
[Fehler] AbfrageUnit3.pas(295): Undefinierter Bezeichner: 'imageindex' |
Re: Piktogramme und Images in VirtualTreeView anzeigen
sorry habe leider vst und treeview komponenten gemischt....
so sollte es funktionieren....
Delphi-Quellcode:
procedure TForm1.vstGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer); begin case kind of ikstate: ImageIndex:=-1; iknormal: ImageIndex:=0; ikselected: ImageIndex:=1; end; end; |
Re: Piktogramme und Images in VirtualTreeView anzeigen
Hallo
Ich zeige dir einfach mal wie ich das Löse:
Delphi-Quellcode:
Gruss
////////////////////////////////////////////////////////////////////////////////
// Procedure : Tfrm_CustomerChoise.VSTGetImageIndex // Comment : Icons im VST anzeigen // Parameter : Sender - VST // Node - Knoten procedure Tfrm_CustomerChoise.VSTGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer); var Data: PTreeData; begin Data := Sender.GetNodeData(Node); case Kind of ikNormal, ikSelected: if (Column = 0) and (Node.Parent = Sender.RootNode) then ImageIndex := TTreeDataClass(Data.FObject).Icon; ikState: case Column of 0: if Node.Parent <> Sender.RootNode then ImageIndex := 0; end; end; end; |
Re: Piktogramme und Images in VirtualTreeView anzeigen
Hallo Zusammen
Besten Dank für die Hilfe. ibp, Dein Tip funktioniert. Armin, bei Deinem Tip kommt noch ein Fehler [Fehler] AbfrageUnit3.pas(375): Undefinierter Bezeichner: 'TTreeDataClass' [Fehler] AbfrageUnit3.pas(375): Undefinierter Bezeichner: 'FObject' [Fehler] AbfrageUnit3.pas(375): Anweisung erforderlich, aber Ausdruck vom Typ 'TIcon' gefunden Nun möchte ich aber die erste und letzte Ebene mit einem Image kennzeichnen, so z.B. RootNode 1 --> Bild 1 ChildNode 1.1 --> kein Bild ChildNode 1.2 --> Bild 2 RootNode 2 --> Bild 1 ChildNode 2.1 --> kein Bild ChildNode 2.2 --> kein Bild ChildNode 2.3 --> Bild 2 usw. RootNode hat immer Bild 1, das letzte ChildNode Bild 2, dazwischen sollte kein Bild sein. Da beim selektieren eines Knoten kein Ereignis erfolgt (ausser dessen Oeffnung) muss das Bild auch nicht ändern. Ist das, so wie ich es mir vorstelle, überhaupt möglich? Gruss Felix |
Re: Piktogramme und Images in VirtualTreeView anzeigen
Hi Felix
TTreeData musst Du selbst definieren, denn da sind die Daten für Dein VST drin
Delphi-Quellcode:
In der VSTGetImageIndex kannst Du dann den RootLevel abfragen und die entsprechenden Bilder zuweisen. In Deinen Falle nur dem Rootknoten und dem letzten Childknoten.
type
// Objektdaten für VirtualStringTree TTreeDataClass = class private FTestStr1: string; FKDID: integer; FAID: Integer; FICON: integer; published property TestStr1: string read FTestStr1 write FTestStr1; property KDID: integer read FKDID write FKDID; property AID: integer read FAID write FAID; property ICON: integer read FICON write FICON; end; //class PTreeData = ^TTreeData; TTreeData = record FObject: TObject; end;
Delphi-Quellcode:
Gruss
if (Column = 0) and (Node.Parent = Sender.RootNode) then
ImageIndex := TTreeDataClass(Data.FObject).Icon; ikState: case Column of 0: if Node.Parent <> Sender.RootNode then ImageIndex := 0; end; |
Re: Piktogramme und Images in VirtualTreeView anzeigen
Hallo Armin
Fehler kommen keine mehr, aber leider auch keine Icon. Es wird bei "Data := Sender.GetNodeData(Node);" in VirtualTrees folgende Function aufgerufen:
Delphi-Quellcode:
Als Column-Wert habe ich -1 und die Procedure GetImageIndex wird verlassen.
function TBaseVirtualTree.GetNodeData(Node: PVirtualNode): Pointer;
// Returns the address of the user defined data area in the node. begin Assert(FNodeDataSize > 0, 'NodeDataSize not initialized.'); if (FNodeDataSize <= 0) or (Node = nil) or (Node = FRoot) then Result := nil else Result := PChar(@Node.Data) + FTotalInternalDataSize; end; Gruss Felix |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz