Einzelnen Beitrag anzeigen

jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#2

AW: TreeViewPresenter mit SpinEdit in VirtualStringTree verwenden

  Alt 5. Jun 2019, 15:38
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
  Mit Zitat antworten Zitat