![]() |
VirtualTreeView - Anfängerhilfe
Hallo!
Ich hab gerade VirtualTreeView entdeckt und möchte es gerne in meinem aktuellen Projekt verwenden. Zum Einarbeiten hab ich dieses Turorial verwendet: ![]() Ich möchte jetzt den View in TabellenForm. Dazu hab ich mal folgenden Typ angelegt:
Delphi-Quellcode:
Den VirtualStringTree füll ich so:
PTreeData = ^TTreeData;
TTreeData = record id: integer; bezeichnung: String; end;
Delphi-Quellcode:
und die GetText-Methode schaut so aus:
procedure TfUebersicht.Button6Click(Sender: TObject);
var TreeData: TTreeData; begin VST.NodeDataSize:=SizeOf(TTreeData); VST.BeginUpdate; TreeData.id:=1; TreeData.bezeichnung:='Erster Knoten'; AddVSTStructure(VST,nil,TreeData); TreeData.id:=2; TreeData.bezeichnung:='Zweiter Knoten'; AddVSTStructure(VST,nil,TreeData); VST.EndUpdate; end;
Delphi-Quellcode:
Die ID wird korrekt angezeigt. Das Bezichnung-Feld bleibt leer. Wenn ich anstatt dem String-Feld, ein zweiter Integer-Feld verwende, dann steht in jeder Zeile 0.
procedure TfUebersicht.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var Data: PTreeData; begin Data:=VST.GetNodeData(Node); case Column of 0: CellText := inttostr(Data.id); 1: CellText := Data.bezeichnung; end; end; Kann mir vielleicht irgendwer einen Hinweis geben, wo der Fehler liegen könnte? Danke, Oghma |
Re: VirtualTreeView - Anfängerhilfe
Versuch es mal so:
Delphi-Quellcode:
case Column of
0: CellText := inttostr(Data^.id); 1: CellText := Data^.bezeichnung; end; |
Re: VirtualTreeView - Anfängerhilfe
Herzlich willkommen in der Delphi-PRAXiS, Oghma!
Ich vermute den Fehler in deiner Anpassung der Routine AddVSTStructure. Sie sollte bei dir etwa so aussehen:
Delphi-Quellcode:
Gruß Hawkeye
function AddVSTStructure(AVST: TCustomVirtualStringTree; ANode: PVirtualNode;
ARecord: TTreeData): PVirtualNode; var Data: PTreeData; begin Result:=AVST.AddChild(ANode); Data:=AVST.GetNodeData(Result); AVST.ValidateNode(Result, False); Data^ := ARecord; {alternativ: Data.id := ARecord.id; Data.bezeichnung := ARecord.bezeichnung; } end; |
Re: VirtualTreeView - Anfängerhilfe
Zitat:
Also auf zu etwas schwierigeren Aufgaben... |
Re: VirtualTreeView - Anfängerhilfe
Ich steh jetzt vor dem selben Problem. Das Tutorial hab ich mir durchgelesen und das Erstellen der "Nodes" mit ihren "Children" ist kein Problem, allerdings kann ich weder den "Nodes" noch den "Children" eine Beschriftung verpassen. Ich hab die Contributions zu VST, die Quelltexte aus dem Tutorial und dieses hier ausprobiert, es funktioniert einfach nicht. Lade ich den Quellcode aus den Contributions, funktioniert alles, schneide ich mir ein paar Schnipsel davon aus und baue sie in mein Programm ein funktioniert die Beschriftung nicht.
Gibt es noch etwas was man noch beachten muss? |
Re: VirtualTreeView - Anfängerhilfe
Zeig mal deinen Code, dann finden wir den fehler wahrscheinlich schneller
|
Re: VirtualTreeView - Anfängerhilfe
Mehr ist es nicht. Es ist quasi das Beispiel aus dem Tutorial.
Wenn ich den Button1 betätige, werden 100 Nodes erzeugt, die den den defaultText "Node" haben. 'Node-Nummer: '+IntToStr(I) wird völlig ignoriert.
Delphi-Quellcode:
[edit=mkinzler] Code-tag durch Delphi-Tag ersetzt Mfg, mkinzler[/edit]
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, VirtualTrees, StdCtrls, ExtCtrls, jpeg, Tabs; type TMainForm = class(TForm) TabSet1 : TTabSet; ListBox1: TListBox; Button1 : TButton; Button2 : TButton; Edit1 : TEdit; VST : TVirtualStringTree; procedure Button1Click(Sender: TObject); private // public { Public declarations } end; var Form1: TMainForm; implementation {$R *.dfm} type PTreeData = ^TTreeData; TTreeData = record FCaption: String; FColumn1: String; end; function AddVSTStructure(AVST: TCustomVirtualStringTree; ANode: PVirtualNode; ARecord: TTreeData): PVirtualNode; var Data: PTreeData; begin Result:=AVST.AddChild(ANode); Data :=AVST.GetNodeData(Result); AVST.ValidateNode(Result, False); Data^.FCaption:=ARecord.FCaption; end; procedure TMainForm.Button1Click(Sender: TObject); var I: Integer; TreeData: TTreeData; begin VST.NodeDataSize:=SizeOf(TTreeData); VST.BeginUpdate; for I:=0 to 100 do begin TreeData.FCaption := 'Node-Nummer: '+IntToStr(I); AddVSTStructure(VST, nil, TreeData); end; VST.EndUpdate; end; end. |
Re: VirtualTreeView - Anfängerhilfe
Hallo,
du musst das Ereignis OnGetText des VST bedienen, in dem du den Text für einen Knoten liefern kannst. Wenn du das richtig machst, solltest du alle 101 Knoten mit dem richtigen Text im Baum sehen. P.S.: Das Setzen von NodeDataSize wäre besser im Ereignis OnCreate des Formulars aufgehoben. Gruß Hawkeye |
Re: VirtualTreeView - Anfängerhilfe
Delphi-Quellcode:
Gesagt, getan. Es regt sich immer noch nichts. Nach wie vor erscheint der defaultText.
procedure TMainForm.FormCreate(Sender: TObject);
begin VST.NodeDataSize:=SizeOf(TTreeData); end; procedure TMainForm.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: Integer; TextType: TVSTTextType; var CellText: WideString); var Data: PTreeData; begin Data:=VST.GetNodeData(Node); CellText := Data^.FCaption; end; |
Re: VirtualTreeView - Anfängerhilfe
Ich hab die Lösung gefunden. Das Event OnGetText musste ich noch einmal neu über den Object-Inspector erzeugen, dann erscheint auch der Text (Caption) in VST. Ohne diesen Eintrag gibt es scheinbar das OnGetText nicht. Anders kann ich mir's nicht erklären.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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