Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Virtual TreeView, pro SubItem verschiedene Spalten (https://www.delphipraxis.net/102969-virtual-treeview-pro-subitem-verschiedene-spalten.html)

sh17 8. Nov 2007 09:49

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

stifflersmom 8. Nov 2007 09:52

Re: Virtual TreeView, pro SubItem verschiedene Spalten
 
Zitat:

Zitat von sh17
Die Spaltenanzahl bleibt in der Summe aber gleich, je nach Zeile kann er nur einfach ein paar Spalten ohne Inhalt lassen

Das meine ich, beim Zeichnen der Nodes reagieren.

Moin

hoika 8. Nov 2007 09:55

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

raiguen 8. Nov 2007 10:59

Re: Virtual TreeView, pro SubItem verschiedene Spalten
 
Zitat:

Zitat von hoika
[...]
Ich würde gern bei jeder verschiedenen Gruppe die Header ändern, ebenso die Spaltenanzahl.
[...]

Das lässt sich natürlich bewerkstelligen ;) Ich habe das in einem meiner Projekte so gelöst, dass ich die max. benötigte Anzahl der Spalten schon zur Designzeit erstellt habe und während der Laufzeit die nicht benötigten Spalten unsichtbar mache bzw die sichtbaren Spalten je nach Anforderung mit einem entsprechenden Kopftext versehen habe und ggf. die Spaltenbreite angepasst habe:
Delphi-Quellcode:
//--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
Und im GetTextEreignis - wie bereits weiter oben erwähnt - befüllst du die Spalten je nach Gruppe
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 von hoika
[...]Ich möchte halt verschiedene Inhalte anzeigen,
je nach Item, ohne jetzt alles selber zu malen.

Ähm... bisher wird da noch nix selber gemalt! Das macht der VST schon von sich aus ;)

Zitat:

Zitat von hoika
[...]
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)[...]

:roll: das muss ich nicht ganz verstehen ??oder?? Ob du nun den herkömmlichen TreeView nimmst oder den weitaus flexibleren VST - es ist alles eine Frage der Anpassung und mit dem VST wirst du mit Sicherheit auch das gleiche Aussehen erzielen (können) wie mit dem schnöden StandardTreeView

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:
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;
Noch 'n Tipp - falls 'übersehen':
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...

hoika 8. Nov 2007 12:12

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

hoika 12. Nov 2007 11:23

Re: Virtual TreeView, pro SubItem verschiedene Spalten
 
Hallo raiguen,

wo genau setzt du die Spalten auf coVisible oder nicht coVisible ?


Heiko

raiguen 14. Nov 2007 22:13

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...

hoika 15. Nov 2007 07:47

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 18:49 Uhr.
Seite 2 von 2     12   

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