Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Virtual String Tree: Nodecaption wird nicht gesetzt (https://www.delphipraxis.net/79758-virtual-string-tree-nodecaption-wird-nicht-gesetzt.html)

Nils_13 27. Okt 2006 14:12


Virtual String Tree: Nodecaption wird nicht gesetzt
 
Hi,

da ich in diesem Thread auf das Virtual String Tree hingewiesen wurde, schaute ich mir vor kurzem das Tutorial von Delphi-Source zu VST an. Warum wird bei folgendem Code die Caption aller Items auf "Node" gesetzt ?
Delphi-Quellcode:
type
  PTreeData = ^TTreeData;

  TTreeData = record
    Str: String;
  end;

...

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  VST.NodeDataSize := SizeOf(TTreeData);
end;

procedure TfrmMain.addNodeClick(Sender: TObject);
var Data: PTreeData;
    Node: PVirtualNode;
begin
  Node    := VST.AddChild(nil);
  Data    := VST.GetNodeData(Node);
  VST.AddChild(Node);
  Data.Str := Edit1.Text;
end;

procedure TfrmMain.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: Integer; TextType: TVSTTextType; var CellText: WideString);
var Data: PTreeData;
begin
  Data    := VST.GetNodeData(Node);
  CellText := Data.Str;
end;

procedure TfrmMain.VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
var Data : PTreeData;
begin
  Data    := VST.GetNodeData(Node);
  Data.Str := '';
end;

stifflersmom 27. Okt 2006 15:03

Re: Virtual String Tree: Nodecaption wird nicht gesetzt
 
Zitat:

Delphi-Quellcode:
procedure TfrmMain.addNodeClick(Sender: TObject);
var Data: PTreeData;
    Node: PVirtualNode;
begin
  Node    := VST.AddChild(nil);
  Data    := VST.GetNodeData(Node);
  VST.AddChild(Node);
  Data.Str := Edit1.Text;
end;

Wie wäre es, wenn Du die reihenfolge mal vertauschen würdest:
Also ERST die Data.eigenschaft des Nodes setzen und DANN den Node dem VSt zufügen.

Moin

Nils_13 27. Okt 2006 15:08

Re: Virtual String Tree: Nodecaption wird nicht gesetzt
 
Hi,

Delphi-Quellcode:
procedure TfrmMain.addNodeClick(Sender: TObject);
var Data: PTreeData;
    Node: PVirtualNode;
begin
  Data    := VST.GetNodeData(Node);
  Data.Str := Edit1.Text;
  Node    := VST.AddChild(nil); <-- AV
  VST.AddChild(Node);
end;

SirThornberry 27. Okt 2006 15:14

Re: Virtual String Tree: Nodecaption wird nicht gesetzt
 
Ohne die Komponente näher zu kennen würde ich sagen "AddChild" erwartet das ParentNode, denn wohin soll sonst das Child wenn kein Parent angegeben wird? Also solltest du da wohl nicht "nil" übergeben.
Aber wie gesagt kenn ich die Komponenten nicht und denke dies nur Anhand des Namens der Methode.

Igotcha 27. Okt 2006 15:15

Re: Virtual String Tree: Nodecaption wird nicht gesetzt
 
Leute, was macht ihr da? ;-)

Delphi-Quellcode:
procedure TfrmMain.addNodeClick(Sender: TObject);
var Data: PTreeData;
    Node: PVirtualNode;
begin
  Node    := VST.AddChild(nil);
  Data    := VST.GetNodeData(Node)
  Data.Str := 'so gehts';
end;

SirThornberry 27. Okt 2006 15:19

Re: Virtual String Tree: Nodecaption wird nicht gesetzt
 
*g* wenn ich das jetzt so sehe kommt die AV wohl eine Zeile über der angegebenen weil Data nicht initialisiert ist.

Nils_13 27. Okt 2006 15:21

Re: Virtual String Tree: Nodecaption wird nicht gesetzt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von SirThornberry
Ohne die Komponente näher zu kennen würde ich sagen "AddChild" erwartet das ParentNode, denn wohin soll sonst das Child wenn kein Parent angegeben wird? Also solltest du da wohl nicht "nil" übergeben.
Aber wie gesagt kenn ich die Komponenten nicht und denke dies nur Anhand des Namens der Methode.

Ich habe es so verstanden:
- Node definieren (Node := VST.AddChild(nil) erstellt mir zusätzlich noch den Grundnode)
- VST.AddChild(Node) erstellt mir ein Unteritem, welches von dem vorher erstellten ausgeht (deshalb nil, weil der Parent für SubItems gedacht ist).



Zitat:

Zitat von Igotcha
Leute, was macht ihr da? ;-)

Delphi-Quellcode:
procedure TfrmMain.addNodeClick(Sender: TObject);
var Data: PTreeData;
    Node: PVirtualNode;
begin
  Node    := VST.AddChild(nil);
  Data    := VST.GetNodeData(Node)
  Data.Str := 'so gehts';
end;

Ach wirklich ? Dann vergleich mal mit dem Code des 1. Beitrags.


Delphi-Quellcode:
procedure TfrmMain.addNodeClick(Sender: TObject);
var Data: PTreeData;
    Node: PVirtualNode;
begin
  Node    := VST.AddChild(nil);
  VST.AddChild(Node);
  Data    := VST.GetNodeData(Node);
  Data.Str := Edit1.Text;
end;
[edit]Ich habe nicht ohne Grund den ganzen Code gepostet, vlt. liegt der Fehler auch an einer anderen Stelle begraben.[/edit]
Node war noch nicht initialisiert. So wird das aber nichts:

raiguen 27. Okt 2006 16:26

Re: Virtual String Tree: Nodecaption wird nicht gesetzt
 
Moin :-))
@nils_13: bist du sicher, dass du im ObjektInspektor dem VST das Ereignis 'OnGetCellText' auch der entsprechenden Prozedur zugewiesen hast? Ich weiß, ich vllt. ne dumme Frage, aber wenn du das nicht gemacht hast, dann kann dem Node auch nicht der Text aus dem EditFeld zu gewiesen werden und somit bleibt der DefaultText (siehe im OI die entsprechende Eigenschaft) standardmäßig auf Node :!:
Im Übrigen ist der gepostete Code von Dir durchaus richtig und funzt soweit auch!

Nils_13 27. Okt 2006 17:03

Re: Virtual String Tree: Nodecaption wird nicht gesetzt
 
:oops: keine dumme Frage :oops: Ich dachte, dass hätte ich gemacht, wohl doch nicht. Danke für eure Hilfe :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 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-2025 by Thomas Breitkreuz