AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualTreeView - Anfängerhilfe

Ein Thema von oghma · begonnen am 20. Aug 2007 · letzter Beitrag vom 11. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
oghma

Registriert seit: 8. Aug 2007
Ort: Wien
15 Beiträge
 
Delphi 2007 Professional
 
#1

VirtualTreeView - Anfängerhilfe

  Alt 20. Aug 2007, 17:22
Hallo!

Ich hab gerade VirtualTreeView entdeckt und möchte es gerne in meinem aktuellen Projekt verwenden. Zum Einarbeiten hab ich dieses Turorial verwendet: http://www.dsdt.info/tutorials/virtualtreeview/

Ich möchte jetzt den View in TabellenForm.
Dazu hab ich mal folgenden Typ angelegt:
Delphi-Quellcode:
PTreeData = ^TTreeData;
TTreeData = record
  id: integer;
  bezeichnung: String;
end;
Den VirtualStringTree füll ich so:
Delphi-Quellcode:
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;
und die GetText-Methode schaut so aus:
Delphi-Quellcode:
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;
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.

Kann mir vielleicht irgendwer einen Hinweis geben, wo der Fehler liegen könnte?

Danke, Oghma
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: VirtualTreeView - Anfängerhilfe

  Alt 20. Aug 2007, 17:54
Versuch es mal so:
Delphi-Quellcode:
case Column of
    0: CellText := inttostr(Data^.id);
    1: CellText := Data^.bezeichnung;
  end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: VirtualTreeView - Anfängerhilfe

  Alt 20. Aug 2007, 18:09
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:
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;
Gruß Hawkeye
  Mit Zitat antworten Zitat
oghma

Registriert seit: 8. Aug 2007
Ort: Wien
15 Beiträge
 
Delphi 2007 Professional
 
#4

Re: VirtualTreeView - Anfängerhilfe

  Alt 20. Aug 2007, 21:09
Zitat von Hawkeye219:
Herzlich willkommen in der Delphi-PRAXiS, Oghma!

Ich vermute den Fehler in deiner Anpassung der Routine AddVSTStructure. Sie sollte bei dir etwa so aussehen:
Bingo! Wahrscheinlich hätte ich da noch 5h suchen können, und wär nicht drauf gekommen. Da brauch ich wohl eine neue Brille Danke!

Also auf zu etwas schwierigeren Aufgaben...
  Mit Zitat antworten Zitat
FilouLE

Registriert seit: 11. Jan 2009
4 Beiträge
 
#5

Re: VirtualTreeView - Anfängerhilfe

  Alt 11. Jan 2009, 12:46
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: VirtualTreeView - Anfängerhilfe

  Alt 11. Jan 2009, 12:48
Zeig mal deinen Code, dann finden wir den fehler wahrscheinlich schneller
Markus Kinzler
  Mit Zitat antworten Zitat
FilouLE

Registriert seit: 11. Jan 2009
4 Beiträge
 
#7

Re: VirtualTreeView - Anfängerhilfe

  Alt 11. Jan 2009, 13:34
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:
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.
[edit=mkinzler] Code-tag durch Delphi-Tag ersetzt Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: VirtualTreeView - Anfängerhilfe

  Alt 11. Jan 2009, 13:43
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
  Mit Zitat antworten Zitat
FilouLE

Registriert seit: 11. Jan 2009
4 Beiträge
 
#9

Re: VirtualTreeView - Anfängerhilfe

  Alt 11. Jan 2009, 14:02
Delphi-Quellcode:
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;
Gesagt, getan. Es regt sich immer noch nichts. Nach wie vor erscheint der defaultText.
  Mit Zitat antworten Zitat
FilouLE

Registriert seit: 11. Jan 2009
4 Beiträge
 
#10

Re: VirtualTreeView - Anfängerhilfe

  Alt 11. Jan 2009, 15:16
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz