Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   VirtualTreeview ...mal eben... ;-) (https://www.delphipraxis.net/186171-virtualtreeview-mal-eben-%3B.html)

ADelph 10. Aug 2015 13:09

VirtualTreeview ...mal eben... ;-)
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

Hatte vor etlichen Jahren schon mit dem VT gearbeitet, es dann aber irgendwie aus den Augen verloren. Weil ich in letzter Zeit immer mal wieder mit einigen Komponenten und deren Ableitungen Kummer hatte, ist mir bei meiner Suche nach Alternativen der VT wieder untergekommen.

VT als StringGrid, bzw. eigentlich als Super-Listbox missbrauchen: Also VT auf eine Form - Columns, RootNodeCount, ShowHorzGridLines, FullRowSelect eingestellt und im OnGetText Texte übergeben. Compile und Go - keine Texte zu sehen.

Aus der Advanced Demo von der Form VisibilityDemo den VT VST3 geholt - Texte werden angezeigt.

Weil ich verschieden hohe Einträge anzeigen können will/muss, OnMeasureTextHeight gefüllt. Klappt auch soweit, nur sehen die Einträge zuerst so aus, wie im Bild1 zu sehen, erst wenn ich in das Grid klicke, sieht es aus wie in Bild2. Außerdem sind die Texte immer vertically centered (würde die gerne top haben) und multiline klappt bei mir auch nicht (es werden Texte die #13#10 enthalten übergeben).

Tuts gelesen, Tante Google verrückt gemacht, aber direkt konnte ich keine Lösungen finden. Vermutlich sehe ich die Bits vor lauter Nullen und Einsen mal wieder nicht...oder ich habe das gesamte Konzept noch nicht klar...wie kann ich auf einfache Weise ein VT so einstellen, dass es wie die von mir anvisierte Super-Listbox funktioniert?

...für ein paar direkte Tipps wäre ich sehr dankbar...denn irgendwie komme ich nicht weiter - und ich bin sicher, dass ich mit dem VT viele andere Problemchen vom Tisch bekomme...

Ich verwende VT 5.3.0, XE7 unter Win 8.1

Danke schon mal!

Aviator 10. Aug 2015 20:40

AW: VirtualTreeview ...mal eben... ;-)
 
Es wäre gut, wenn du deinen bisherigen Quellcode hier in Delphi Tags einmal posten könntest. Es wird sich leichter jemand finden, der deinen bereits bestehenden Quellcode nach Fehlern untersucht, als dir eine fertige "Super-Listbox" zu bauen. Vielleicht liegt es auch einfach nur an nicht gesetzten TreeOptions. Schau dort mal nach, ob dir vielleicht direkt etwas ins Auge springt.

ADelph 11. Aug 2015 12:44

AW: VirtualTreeview ...mal eben... ;-)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Aviator (Beitrag 1311727)
Es wäre gut, wenn du deinen bisherigen Quellcode hier in Delphi Tags einmal posten könntest. Es wird sich leichter jemand finden, der deinen bereits bestehenden Quellcode nach Fehlern untersucht, als dir eine fertige "Super-Listbox" zu bauen. Vielleicht liegt es auch einfach nur an nicht gesetzten TreeOptions. Schau dort mal nach, ob dir vielleicht direkt etwas ins Auge springt.

Hi Aviator,

mir soll keiner die Super-Listbox bauen - ich bin nur auf der Suche nach ein paar Tipps, wie ich den VT dazu bringen kann, sich wie VST3 aus der genannten Demo zu verhalten. Natürlich hatte ich damit begonnen, die Einstellungen zu vergleichen. Es sind allerdings recht viele Unterschiede und eine Einstellung nach der anderen zu testen, erwies sich als sehr aufwendig. Es hatte mich schon einige Stunden systematischen Herumprobierens gekostet, bevor ich hier meine Fragen gepostet habe.

Ich hatte lediglich die Hoffnung, dass vielleicht jemand auf Anhieb die Einstellung kennt, die VT dazu bringt, sich wie ein StringGrid zu verhalten. Wie geschrieben: VT auf die Form, Columns eingestellt etc - das bringt es nicht. Könnte ja sein, dass jemand die Lösung aus dem Ärmel schüttelt...und ich bin recht sicher, dass es irgendwelche Einstellungen in den Options sind... :?

Mein Testprogramm hänge ich gerne an.

Bei den Header.Options sind gesetzt: [hoColumnResize,hoHotTrack,hoVisible]

Bei den TreeOptions ist gesetzt:
AnimationOptions: []
AutoOptions: [toAutoExpand,toAutoScroll]
MiscOptions: [toWheelPanning,toVariableNodeHeight,toNodeHeightRe size]
PaintOptions: [toShowHorzGridLines,toThemeAware]
SelectionOptions: [toFullRowSelect]
StringOptions: []

Aviator 11. Aug 2015 21:29

AW: VirtualTreeview ...mal eben... ;-)
 
Dein Tree sieht doch bereits wie ein StringGrid aus. Es hat Zeilen (Nodes) und Spalten (Columns). Ich kann nur beim besten Willen kein Multiline in der VST3 (Property Editor) Demo erkennen. Das sind alles Subnodes die erstellt werden.

Mit
Delphi-Quellcode:
vst.AddChild(nil)
kann man Nodes auf der Rootebene erstellen. Mit
Delphi-Quellcode:
vst.AddChild(ParentNode)
können ChildNodes der übergebenen ParentNodes erstellt werden. Alternativ hierzu gibt es die Property RootNodeCount des VirtualTreeViews. Wenn diese Property gesetzt wird, müssen über die Events InitNode und InitChildren die Nodes initialisiert werden. Die RootNodeCount Property benutzt du ja bereits.

Vielleicht könntest du dein Vorhaben etwas konkretisieren. Vielleicht sogar anhand eines Screenshots eines bestehenden Programmes oder auch in Paint ein Beispiel zeichnen.

Aviator 11. Aug 2015 21:36

AW: VirtualTreeview ...mal eben... ;-)
 
EIne Sache ist mir noch eingefallen. Das kannst du bei der MultiLine Demo beobachten. Vielleicht ist es das was du willst. Um das zu erreichen, musst du im InitNode Event den dem InitialState Set das Flag ivsMultiLine hinzufügen.

Hier ein kleines Beispiel:
Delphi-Quellcode:
procedure TForm1.vstInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode;
  var InitialStates: TVirtualNodeInitStates);

begin
  vst.NodeHeight[Node] := 40;
  Include(InitialStates, ivsMultiline);
end;

Luckie 11. Aug 2015 21:45

AW: VirtualTreeview ...mal eben... ;-)
 
Bitte gib deinem Thread einen Aussagekräftigen Titel, welcher das Problem kurz beschreibt bzw. zusammenfasst.

ADelph 12. Aug 2015 10:22

AW: VirtualTreeview ...mal eben... ;-)
 
Zitat:

Zitat von Luckie (Beitrag 1311881)
Bitte gib deinem Thread einen Aussagekräftigen Titel, welcher das Problem kurz beschreibt bzw. zusammenfasst.

Wie kann ich den Titel ändern?

Perlsau 12. Aug 2015 10:25

AW: VirtualTreeview ...mal eben... ;-)
 
Indem du dein Start-Posting änderst.

ADelph 12. Aug 2015 10:48

AW: VirtualTreeview ...mal eben... ;-)
 
Hi Aviator,

...ich glaube, das könnte mich weiterbringen. Danke schon mal dafür!

Was ich dann noch nicht sehe, ist, wie ich die vertikale Ausrichtung ändern kann. Wenn ich eine mehrzeilige Ausgabe in einer Spalte habe und in der gleichen Zeile eine Spalte mit z.B. nur einer Textzeile, dann steht diese immer in der vertikalen Mitte. Ich hätte es aber dann gerne oben ausgerichtet. Gibt es dafür auch eine Option? Ich finde zwar so etwas wie 'VerticalAlignment', aber bisher nicht, wo oder wie ich da eine Änderung erzielen kann.

Gibt es da noch eine Anregung?

Da ich die Daten für die Darstellung aus anderen Gründen schon in einer Liste führe, benötige ich keine ChildNodes etc. So wie ich es vorhabe - so ähnlich wie im Test, nur dass ich dann die Daten aus der Liste hole - klappt es mittlerweile auch schon fast.

ADelph 12. Aug 2015 10:49

AW: VirtualTreeview ...mal eben... ;-)
 
Zitat:

Zitat von Perlsau (Beitrag 1311931)
Indem du dein Start-Posting änderst.

...da kann ich aber nichts mehr ändern, oder? Der 'Bearbeiten' Button ist jedenfalls weg...

Aviator 12. Aug 2015 14:04

AW: VirtualTreeview ...mal eben... ;-)
 
Das VerticalAlignment kannst du mit
Delphi-Quellcode:
vst.VerticalAlignment[Node] := IrgendEinWert;
ändern.
Hier noch ein Auszug aus der VST-Hilfe:

Zitat:

Delphi-Quellcode:
property VerticalAlignment [Node: PVirtualNode]: Byte;
[...]

Description
The given value is interpreted differently depending on the value of NodeAlignment (seeTBaseVirtualTree.NodeAlignment Property, page 126). By default the alignment used relatively with regard to the top bound. In this case a range of 0 through 100 must be used which denotes the relative pixel amount in percent. The other variants work with absolute pixel values from top or bottom bound.

ADelph 12. Aug 2015 17:22

AW: VirtualTreeview ...mal eben... ;-)
 
n'Abend Aviator,

Danke - das war's! Ich bin jetzt ziemlich sicher, dass ich das dann so alles hinbekommen.

Ich hatte mich schon reichlich 'reingehängt, aber irgendwie ist die Lernkurve für VT doch ziemlich steil. Reichlich viele Einstellmöglichkeiten, Properties, Events etc. Aber ich bin sicher, am Ende lohnt es sich. Schon jetzt zeichnet sich ab, dass ich wesentlich weniger coden muss, um die gewünschten Ergebnisse zu erreichen. Goodbye Listbox - welcome VT ! :-D :wink:

...ich habe nur eine VirtualTreeView.chm - das steht nicht genau das, was du zitierst - welche Hilfe hast du und wo würde ich die herbekommen?

Aviator 12. Aug 2015 18:18

AW: VirtualTreeview ...mal eben... ;-)
 
Zitat:

Zitat von ADelph (Beitrag 1311968)
[...]aber irgendwie ist die Lernkurve für VT doch ziemlich steil. Reichlich viele Einstellmöglichkeiten, Properties, Events etc. Aber ich bin sicher, am Ende lohnt es sich.[...]

Ja es lohnt sich definitiv mit dem VT zu arbeiten. Bei mir gibt es fast keine Projekte mehr, die nicht mindestens einen VT mit an Bord haben.

Zitat:

Zitat von ADelph (Beitrag 1311968)
...ich habe nur eine VirtualTreeView.chm - das steht nicht genau das, was du zitierst - welche Hilfe hast du und wo würde ich die herbekommen?

Schau mal auf der Seite von Mike Lischke nach (etwa in der Mitte der Seite [Downloadsektion]). Oder hier auch der Direktlink (manche mögen das nur nicht, könnte ja alles sein). Er war der ursprüngliche Entwickler der Komponente und hatte noch eine PDF Datei zum VT herausgegeben, welche aber leider mittlerweile doch ziemlich veraltet ist. Es findet sich nicht alles darin, aber manche nützlichen Dinge stehen da doch noch drin. Und alternativ hilft beim VT immer ein Blick in den Source Code. Der ist ziemlich aufschlussreich was die Funktionen angeht. Man braucht am Anfang vielleicht ein bisschen bis man sich eingearbeitet hat, aber danach geht es immer besser.

ADelph 13. Aug 2015 09:44

AW: VirtualTreeview ...mal eben... ;-)
 
Hi Aviator,

Danke für die Hinweise und den Link!

Ja, in die Source schaue ich auch, aber das braucht eben...und das VerticalAlignment klappt bislang noch nicht...da es den VT nur bis XE5 gibt, ich aber XE7 nutze, könnte es ja sein, dass Abschitte mit bedingter Kompilierung nicht ziehen - das werde ich mir mal ansehen. Die Einstellungen für das Alignment hab' ich für die Knoten vorgenommen - bringt aber noch nix...na, mal sehen ;-) - wobei die anderen Einstellungen perfekt funktionieren :-D

Aviator 13. Aug 2015 11:38

AW: VirtualTreeview ...mal eben... ;-)
 
Hallo ADelphi,

etwas recherchieren solltest du schon :shock:. Mike Lischke hat die Programmierung an die Firma Jam Software abgegeben, welche den VT weiterentwickelt. Hier sind wir mittlerweile bei Version 6.1 welche auch Unterstützung für XE7 und wahrscheinlich auch für XE8 bietet, da hier die Komponente sogar im GetIt Manager angeboten wird. Die Unterstützung wird nur nicht explizit im ChangeLog aufgeführt.

ADelph 13. Aug 2015 13:42

AW: VirtualTreeview ...mal eben... ;-)
 
Hi Aviator,

Bei Mike hatte ich in der Tat nicht weiter 'runter gescrollt...dachte da kämen nur noch Feature-Hinweise...:?

Ich hatte zuletzt nur die 5.3 gefunden...nach deinem Hinweis auch die 6.1 - die teste ich jetzt mal. In meiner hier kann ich nicht finden, dass Einstellungen bei VerticalAlignment auch für den Text berücksichtigt werden. Anscheinend nur für Images, Buttons etc. Ich hab' bei mir mal die Zeilen 34917 und 34918 in der Procedure PaintNormalText auskommentiert - danach steht der Text oben in einer mehrzeiligen Spalte und nicht mehr vertically centered. Da wird auch VAlign nirgends berücksichtigt, obwohl in CalculateVerticalAlignments Werte dafür berechnet werden...naja, ich schau mir die 6.1 an - Danke nochmal!

ADelph 13. Aug 2015 14:26

AW: VirtualTreeview ...mal eben... ;-)
 
...nö, die 6.1 macht das auch nicht anders. Nur, dass ich jetzt wieder mit dem MultiLine kämpfe...das klappt jetzt auf einmal nicht mehr: die eingestellte Höhe einer Zeile (eines Knoten) wird jetzt nicht mehr berücksichtigt.

...bisschen 'rumgespielt: wenn ich toVariableNodeHeight true setze, dann wird die variable Höhe nicht berücksichtigt, sonst ja. Wenn ich toReadOnly true setze, dann werden keine Daten angezeigt...

Ok, nachdem ich die Zeilen 33119 und 33120 in VirtualTrees auskommentiert habe, erscheint der Text vertikal top und nicht mehr centered. Ist für mich erstmal ok.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:03 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