![]() |
Virtual TreeView, pro SubItem verschiedene Spalten
Hallo #,
jetzt will ich diese Sache mit dem VT endlich mal in Angriff nehmen ;) Aber :( Ich habe folgendes Problem. Der TreeView zeigt in der 1. Ebene Projekte an, pro Projkt ein Item, klar. Klappe ich ein Projekt auf, zeigt er mir Gruppen, z.B. Rechnung (Re), Lieferschein (LS). Klappe ich eine Gruppe auf, erscheinen die eigentlichen Daten (z.B. Re-Nr, LS-Nr). Aber 1 Je nach Gruppe werden verschiedene Daten angezeigt. Bsp: Bei Rechnung nur die Nummer, bei Lieferschein Nr und "Lieferschein zurück), also bei Rechnung 1 Spalte, bei Lieferschein 2 Spalten (nur als Bsp). Ich würde gern bei jeder verschiedenen Gruppe die Header ändern, ebenso die Spaltenanzahl. Das würde dann in etwa so aussehen, wie ein ListView im TreeView. Ich habe mit die descendants angesehen, nix. (auch das nested header ist ja nicht dass, was ich brauche) Zur Not könnte ich ja folgendes machen das erste Item unterhalb der Rechnung ist der Header, der wird dann grau (?), darf nicht auswählbar sein (?). Nur muss ich die Spaltenzahl ändern können ? Über Tabulator "lösen" (?) Wie würdet ich das denn machen? Danke Heiko |
Re: Virtual TreeView, pro SubItem verschiedene Spalten
der ViertualTreeView hat die Eigenschaft .Header welches wieder die Einegnschaft .Columns hat wo du die Anzahl und Beschriftung der Header verändern kannst.
|
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Hallo,
korrekt. Aber ich brauche ja nach aufgeklapptem Item verschiedene Header. Wie oben gesagt, bei Lieferschein z.B. 2 Spalten mit Headerbeschriftung, bei Rechnung 1. Sowas wie Subheaders
Delphi-Quellcode:
0815
|-- Rechnung |-- Re.-Nr: <- die Zeile grau, weil Header |-- 0815-01 |-- 0815-02 |- Lieferschein |-- Nr: zurück <- die Zeile grau, weil Header |-- LS_0815_01 ja |-- LS_0815_02 nein so in etwa Heiko |
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Hallo Heiko,
ich glaube nicht, daß die von dir gewünschte Darstellung mit dem VST direkt zu erreichen ist. Die einzige Möglichkeit besteht vielleicht darin, auf die Unterstützung der Komponente bei der Spaltenanzeige zu verzichten und alle Daten auf der untersten Stufe selbst zu zeichnen. Warum trennst du die Anzeige der Daten nicht? Mit einer Baumanzeige könnte sich der Anwender in der Verzeichnisstruktur bewegen. Wählt er ein Verzeichnis an, das nur noch Blattknoten und keine Gruppenknoten mehr enthält, stellst du alle Blattknoten in einer Listenanzeige dar. Die Listenanzeige kannst du dann für jede Gruppe individuell gestalten. Beide Elemente - Baumanzeige und Listenanzeige - kannst du mit dem VST oder den Standardkomponenten (TTreeView, TListView) realisieren. Eine einzelne Komponente wäre mir wegen der unterschiedlichen Datenstruktur auf der untersten Ebene zu unübersichtlich. Gruß Hawkeye |
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Hallo,
es geht darum, dass bei ExpandAll eines Projekt-Knotens alle Daten des Projektes angezeigt werden sollen. Es geht also um einen schnellen Überblick, was ist beim Projekt gelaufen. Heiko |
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Hast Du Dir schonmal 'BeforeCellPaint' angesehen? Dadurch kannst Du extremen Einfluss auf Aussehen und Inhalt der jeweiligen Zelle nehmen. Somit sollte es möglich sein entspr. (Sub)Header unterhalb des jeweiligen Knoten zusetzen.
|
Re: Virtual TreeView, pro SubItem verschiedene Spalten
ggf auch AfterCellPaint, sonst kommt es beim Zeichnen von Grafiken zu Problemen, wenn die Zeile Markiert ist (blauer Balken).
Ansonsten gibt es in VST keine Möglichkeit die Spaltenanzahl je Zeile dynamisch anzupassen. Das gibt das Konzept nicht her. |
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Ich meine bei Mike auf der Homepage eine abgeleitete Klasse gesehen die das kann.
Im Namen war etwas mit Subheadern. |
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Hallo,
du meinst nested header. Dabei wird aber "nur" im oberen Bereich eine zweite Header-Spalte angezeigt. Ich muss aber pto Item verschiedene Header zeigen. Am einfachsten verständlich ist es, sich ein ListView in TreeView vorzustellen. Es würde viell. ja erst mal reichen, wenn die ListItems verschiedene Spalten-Anzahl hätten. Geht ja aber leider auch nicht. Ich will auch das AutoSize benutzen, wenn ich das jetzt alles selber malen müsste ;( Ich befürchte, das geht nur mit dem QuantumGrid, obwohl ich in deren Screenshots und Handbuch auch nichts gesehen habe. Heiko |
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Ich glaube, dass es dennoch möglich ist,
das gewünschte Ergebnis zu erreichen. Für den VS legen wir zu Darstellung ja eine eigene Datenstruktur an, und die können wir uns ja nach Belieben zusammenstellen.
Delphi-Quellcode:
Pass Dir die Struktur einfach zusammen wie es Dir gefällt.
Type
Ptreedbdata = ^TTreeDbData; TTreeDbdata = Record categories_id : Integer; parent_id : Integer; Caption : String; report_ID : Integer; Icon_Index : Integer; ReportFile : String; Faktura : Integer; end; Und im GetText-Ereignis des VS kannst Du dann dementsprechend reagieren und die Texte anpassen
Delphi-Quellcode:
Und ähnlich könntest Du beim Zeichnen der Nodes vorgehen.
var
Data: PTreeDBData; begin Data:=ReportTree.GetNodeData(Node); If Data.Faktura = 1 Then Celltext := 'Rechnung' ... bla bla end; Moin |
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Die Spaltenanzahl bleibt in der Summe aber gleich, je nach Zeile kann er nur einfach ein paar Spalten ohne Inhalt lassen
|
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Zitat:
Moin |
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Hallo,
genau das ist das Problem. Ich möchte halt verschiedene Inhalte anzeigen, je nach Item, ohne jetzt alles selber zu malen. Ich habe jetzt mal in bisschen probiert mit ProjektNr + Name (ein Text) | Nr | Datum | sonstiges Nr + Datum hat je nach Item verschiedene Bedeutung, bei Rechnung Rechnungs-Nr., bei Lieferschein LS-Nr. usw. So richtig glücklich bin ich aber nicht, weil jetzt alles ganz weit "nach hinten" wandert, z.B. das wichtige "Lieferschein zurück". Deshalb habe ich ja zur Zeit noch den normalen TreeView, dort sind immerhin alle Daten sofort zu sehen (bei grossen Bildschirm ... ;) ) Ein Umstellen auf VT bringt mir da ja nicht viel (Geschwindigkeit, Optik jaja) Heiko |
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Zitat:
Delphi-Quellcode:
Und im GetTextEreignis - wie bereits weiter oben erwähnt - befüllst du die Spalten je nach Gruppe
//--Spalte sichtbar
VSTVO.Header.Columns[col].Options := VSTVO.Header.Columns[col].Options+[coVisible]; //--Spalte unsichtbar VSTVO.Header.Columns[col].Options := VSTVO.Header.Columns[col].Options-[coVisible]; //--Kopftext / Breite /Ausrichtung ändern VSTV0.Header.Columns[col].Text := 'Kopttext'; VSTV0.Header.Columns[col].Width := 200; VSTV0.Header.Columns[col].Alignment := taRightJustify; //--VSTVO ist der VirtualStringTree
Delphi-Quellcode:
procedure TFormXYZ.VSTV0GetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var Data: PNodeInfos; begin Data := VSTV0.GetNodeData(Node); if Data.Rechnung then case Column of 1: CellText := Data.RELSNR; //Rechnungs-/LieferscheinNr als Bsp. 2: CellText := ''; //wenn nix drinne stehen soll z.b. ... end else case Column of 1: CellText := Data.RELESNR; //Rechnungs-/LieferscheinNr als Bsp. 2: CellText := Data.BEMERK; //irgendwelche Zusatzinfos ... end; Zitat:
Zitat:
Apropos selber malen: natürlich kannst du je nach 'Zustand' bsp. die Spalte 'Lieferschein zurück' entsprechend einfärben: rot->noch nicht zurück, grün->zurück (nur mal so als Bsp):
Delphi-Quellcode:
Noch 'n Tipp - falls 'übersehen':
procedure TFormXYZ.VSTV0BeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellRect: TRect); var Data: PNodeInfos; begin // -- Beispielcode Data := Sender.GetNodeData(Node); if ((Column=3) and (Data.LieferscheinZurück)) then TargetCanvas.Brush.Color := clGreen else TargetCanvas.Brush.Color := clRed; TargetCanvas.FillRect(CellRect); end; Im OI des VST die Eigenschaft .DefaultText leer lassen (standardText ist 'Node'), somit werden alle Nodes, denen expliziet kein Text zugewiesen wurde, ohne Inhalt dargestellt ;) okay, vllt. ist ja was für dich dabei... |
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Hm,
viel Code, danke ;) Aber: Was passiert jetzt, wenn ich die Lieferscheine und Rechnungen gleichzeitig aufmache ? Klappt das mit den verschiedenen Spalten dann immer noch ? Mit dem "nicht nutzen" meinte ich, dass solange ich das nicht mit den Spalten drinhabe, ist ein normaler Treeview einfacher / schneller zu programmieren. Heiko |
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Hallo raiguen,
wo genau setzt du die Spalten auf coVisible oder nicht coVisible ? Heiko |
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Moin Heiko :)
Sorry, dass ich mich erst jetzt (wieder) melde... hab mir in den letzten Tagen ne ordentliche steife (Nordsee-)Brise um die Ohren wehen lassen (mein Lieblingsziel ist in der Regel Cuxhaven...aber das nur am Rande)... In meinem Projekt verwende ich den VST sehr gerne zur Darstellung von Daten, weil ich durch die enormen flexiblen Möglichkeiten (okay, man muss sich da ordentlich durchwuseln und viel probieren, da m.E. die mir verfügbaren/auffindbaren Dokumentationen nicht immer erschöpfend sind und die Demos nicht immer das AHA-Erlebnis bringen - aber das nur nebenbei bemerkt) vielfache Gestaltungsmöglichkeiten habe. In einem Modul bspw. werden (vom User editierbare) Vorgabetabellen dargestellt und je nach Art der Tabelle werden bei Auswahl derselben die benötigten Spalten eingeblendet bzw nicht benötigte Spalten ausgeblendet. Von daher kommt es natürlich auf den 'Verwendungs'Zweck an, wann man dieses 'Ereignis' antriggert ;) Hmm, weiss jetzt nicht genau, was du damit meinst, Rechnung und Lieferschein gleichzeitig aufmachen? Ausgehend von deinem Beispiel wären das dann insgesamt drei Spalten (1*Rechnung, 2*Lieferschein) richtig? Somit hast du es ja in der Hand, wann (=was wird angezeigt) welche Spalte(n) sichtbar sein sollen - aber wie gesagt, das ist jetzt nur ins Blaue geraten. Vllt. ist es hilfreich, deine genauen Wünsche/Ziele zu skizzieren... |
Re: Virtual TreeView, pro SubItem verschiedene Spalten
Hallo,
#3 zeigt das doch eigentlich gut an. 1. Ebene Projekt 2. Ebene Dokumenten-Typ (Lieferschein/Rechnung) 3. Ebene einzelne Dokumente (je nach Dokumenttyp verschiedene Daten) Mit "gleichzeitig Anzeigen" meine ich, dass alle Daten des Projektes angezeigt werden (Expand aller Knoten des Projektes). Der Nutzer soll auf einen Blick sehen, welche Lieferschein UND Rechnungen im Projekt sind. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 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