Einzelnen Beitrag anzeigen

raiguen
(Gast)

n/a Beiträge
 
#14

Re: Virtual TreeView, pro SubItem verschiedene Spalten

  Alt 8. Nov 2007, 11:59
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 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 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)[...]
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...
  Mit Zitat antworten Zitat