AGB  ·  Datenschutz  ·  Impressum  







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

Fragen zu VirtualTreeView

Ein Thema von H.Bothur · begonnen am 3. Okt 2023 · letzter Beitrag vom 5. Okt 2023
Antwort Antwort
Seite 1 von 2  1 2      
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#1

Fragen zu VirtualTreeView

  Alt 3. Okt 2023, 00:12
Moin,

ich arbeite das Tutorial zu Virtualtreeview durch und habe schon auf den ersten Seiten zwei Fragen:

1) auf Seite zwei wird geschrieben wie man an einer bestimmten Stelle einen Node einfügen kann:

Node := vst.InsertNode(vst.FocusedNode, amInsertAfter); allerdings wird bei mir das "amInsertAfter" als unbekannt markiert - fehlt mir da ein uses ?


2) auf Seite 3 werden Noites mit Beschriftung erstellt:

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^.FCaption:=ARecord.FCaption;
end;
procedure TForm1.Button3Click(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;
Ich hötte erwartet das jetzt statt "Node" immer "Node-Nummer 1..2..3..4..usw" steht - es steht aber weiterhin nur Node.
Denke ich da falsch ? Was mache ich denn wenn da nicht nur Node stehen soll.´??

Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#2

AW: Fragen zu VirtualTreeView

  Alt 3. Okt 2023, 00:37
amInsertAfter war in der Unit VirtualTrees.pas.
Mit Version 7.6, die du scheinbar nutzt, gab es Breaking Changes. Deswegen ist amInsertAfter jetzt in VirtualTrees.Types.pas.

Geändert von DieDolly ( 3. Okt 2023 um 00:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.572 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Fragen zu VirtualTreeView

  Alt 3. Okt 2023, 07:04
Ich hötte erwartet das jetzt statt "Node" immer "Node-Nummer 1..2..3..4..usw" steht - es steht aber weiterhin nur Node.
Denke ich da falsch ? Was mache ich denn wenn da nicht nur Node stehen soll.´??
Du zeigst nur den Teil, in der diese Information in die Datenstruktur geschrieben wird. Fehlt vielleicht das OnGetText Event? Dort bekommt der Tree von dir die Information welcher Text in der angegebenen Zeile und Spalte angezeigt werden soll.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Fragen zu VirtualTreeView

  Alt 3. Okt 2023, 12:01
amInsertAfter war in der Unit VirtualTrees.pas.
Mit Version 7.6, die du scheinbar nutzt, gab es Breaking Changes. Deswegen ist amInsertAfter jetzt in VirtualTrees.Types.pas.
Danke !

Ich hötte erwartet das jetzt statt "Node" immer "Node-Nummer 1..2..3..4..usw" steht - es steht aber weiterhin nur Node.
Denke ich da falsch ? Was mache ich denn wenn da nicht nur Node stehen soll.´??
Du zeigst nur den Teil, in der diese Information in die Datenstruktur geschrieben wird. Fehlt vielleicht das OnGetText Event? Dort bekommt der Tree von dir die Information welcher Text in der angegebenen Zeile und Spalte angezeigt werden soll.
OK - ich hätte geacht das beim zeichnen des Baums diese Daten mit angezeigt werden ... aber ich arbeite mal weiter - wird wohl noch kommen

Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.572 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Fragen zu VirtualTreeView

  Alt 3. Okt 2023, 12:37
OK - ich hätte geacht das beim zeichnen des Baums diese Daten mit angezeigt werden
Du selbst hast ja die Datenstruktur außerhalb der Komponente definiert. Daher kennt die Komponente auch deren Struktur nicht und kann damit auch nichts anfangen. Daher musst du der Komponente die Daten daraus geben, wenn diese sie zur Anzeige braucht (OnGetText) und die Komponente sagt dir Bescheid, wenn der Benutzer diese im Baum verändert hat (OnSetText), damit du sie in deine Datenstruktur schreiben kannst.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#6

AW: Fragen zu VirtualTreeView

  Alt 3. Okt 2023, 12:37
Zitat:
OK - ich hätte geacht das beim zeichnen des Baums diese Daten mit angezeigt werden ... aber ich arbeite mal weiter - wird wohl noch kommen
Wenn ich du wäre, würde ich das ganze AddVSTStructure-Ding wegwerfen. So habe ich das auch gemacht und es ist totaler Mist. Diese Tutorials sollten verboten werden.

Speichere deine Daten in einer ObjectList oder sowas Klassenstruktur. Damit lässt es sich wesentlich besser arbeiten. Das ist anfänglich mehr Aufwand, aber es lohnt sich.
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#7

AW: Fragen zu VirtualTreeView

  Alt 3. Okt 2023, 15:30
OK - ich hätte geacht das beim zeichnen des Baums diese Daten mit angezeigt werden
Ein Beispiel für die Umsetzung findest du in diesem Artikel mit Quelltext.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.572 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Fragen zu VirtualTreeView

  Alt 3. Okt 2023, 19:46
Wenn ich du wäre, würde ich das ganze AddVSTStructure-Ding wegwerfen. So habe ich das auch gemacht und es ist totaler Mist. Diese Tutorials sollten verboten werden.
Mittlerweile geht das auch generisch, so dass die Pointerspielerei außen wegfällt. Grundsätzlich kommt es auf den Anwendungsfall an, ob das Sinn macht. Für viele Zwecke macht die Vorgehensweise durchaus Sinn.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Fragen zu VirtualTreeView

  Alt 5. Okt 2023, 13:51
Leider habe ich noch eine Frage da ich etwas noch nicht verstehe - geht um das Speichern der Daten. Ich habe noch nie mit Streams gearbeitet, deswegen stehe ich da ein bisschen auf dem Schlauch.

Zum Speichern wird folgende procedure genutzt:

Delphi-Quellcode:
procedure TForm1.vstSaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
 Stream: TStream);
var
  Data: PTreeData;
  Len: integer;
begin
  Data := vst.GetNodeData(Node);
  Len := Length(Data.TestStr);
  Stream.write(Len, SizeOf(Len));
  Stream.write(PChar(Data.TestStr)^, Len);
end;
Da sind die Daten aber nur ein String, wie geht das denn wenn es mehrere Strings sind ? So etwa ? Das kommt mir kompliziert vor:

Delphi-Quellcode:
procedure TSerienDB.VSTSaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode; Stream: TStream);
var
  Data: PTreeData;
  Len: integer;
begin
  Data := VST.GetNodeData(Node);
  Len := Length(Data.FCaption);
  Stream.write(Len, SizeOf(Len));
  Stream.write(PChar(Data.FCaption)^, Len);
  Len := Length(Data.FColumn1);
  Stream.write(Len, SizeOf(Len));
  Stream.write(PChar(Data.FColumn1)^, Len);
  Len := Length(Data.FColumn2);
  Stream.write(Len, SizeOf(Len));
  Stream.write(PChar(Data.FColumn2)^, Len);
  Len := Length(Data.FColumn3);
  Stream.write(Len, SizeOf(Len));
  Stream.write(PChar(Data.FColumn3)^, Len);
end;
Wie ist das denn richtig ?

Gruss
Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.993 Beiträge
 
Delphi 12 Athens
 
#10

AW: Fragen zu VirtualTreeView

  Alt 5. Okt 2023, 14:13
Zitat:
PChar und Length
NEIN

Delphi-Quellcode:
Len := Length(S) * SizeOf(S[1]);
// oder
Len := Length(S) * SizeOf(Char);
Denn PChar = PWideChar
und WideChar = 2 Byte (seit Delphi 2009, also seit 15 Jahren schon)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 01:04 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