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