Hallo,
ich möchte für die Leute, die auch mal so was ähnliches machen wollen, rückmelden, dass ich mittlerweile den Fehler gefunden habe. Der Fehler lag eindeutig bei mir. Und zwar habe ich beim SpinEdit vegessen den Parent auf die TreeViewPresenter.Tree zu setzen, somit passen die CellRect Angaben
CellRect:=VST.GetDisplayRect(node, 3, false);
von der VirtualStringTree mit SpinEdit Height/Width nicht mehr zusammen.
Derzeit kämpfe ich mit dem Problem, dass ich den Hintergrund von einigen Zellen der VST einfärben möchte. Bisher ohne TreeViewPresenter mache das so, dass ich in OnBeforeCellPaint den Hintergrund wie folgt zeichne.
Delphi-Quellcode:
procedure TForm1.VSTBeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
var
d: TNodeData;
begin
d:=TNodeData(VST.GetNodeData(node)^);
if Assigned(d) and Assigned(d.ReceivingItem) and (Column = 0) then
begin
if TReceivingItem(d.ReceivingItem).OrderedQuantity - (TReceivingItem(d.ReceivingItem).AlreadyReceivedQuantity + TReceivingItem(d.ReceivingItem).SpinEditValue) > 0 then
begin
TargetCanvas.Brush.Color := clWindow;
TargetCanvas.FillRect(CellRect);
end
else
begin
TargetCanvas.Brush.Color := clMoneyGreen;
TargetCanvas.FillRect(CellRect);
end;
end;
end;
Ich kann zwar im TreeViewPresenter eine Methode für das OnBeforeCellPaint Event anlegen. Da der TreeViewPresenter das Event von der VST aber vorher abgreift, wird das von mir angelegte Event nie ausgelöst. Aktuell habe ich auf quick&dirty Weise den Source von TreeViewPresenter angepaßt und es funktioniert. Aber falls jemand eine bessere Idee dazu haben sollte, bin ich ganz Ohr.
Lg,
jus