Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TreeViewPresenter mit SpinEdit in VirtualStringTree verwenden (https://www.delphipraxis.net/200857-treeviewpresenter-mit-spinedit-virtualstringtree-verwenden.html)

jus 1. Jun 2019 19:39

TreeViewPresenter mit SpinEdit in VirtualStringTree verwenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe eine Anwendung, die eine VirtualStringTree mit SpinEdits (siehe anbei Screenshot) enthält, das funktioniert auch sehr gut. Ich würde gerne nun die TreeViewPresenter (DSharp) zur Steuerung der VirtualStringTree einsetzen. Ich scheitere aber daran, dass die Platzierung der SpinEdits in VST durch den TreeViewPresenter nicht mehr durch den Befehl "VST.GetDisplayRect(node, 3, false)" funktioniert, da anscheinend der TreeViewPresenter es anders zeichnet. Hat wer dazu eine Idee? :gruebel:

Bisher mache ich die Grössenanspassung der SpinEdits in die VST Zelle so:
Delphi-Quellcode:
procedure TForm1.VSTColumnResize(Sender: TVTHeader; Column: TColumnIndex);
begin
  VST.IterateSubtree(nil, VSTCallback, nil);
end;

procedure TForm1.VSTCallback(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
 var
  CellRect: TRect;
  d: TNodeData;
begin
  d:=TNodeData(VST.GetNodeData(node)^);

  CellRect:=VST.GetDisplayRect(node, 3, false);
  with d.SpinEdit do
  begin
    Left:=CellRect.Left;
    Width:=CellRect.Right-CellRect.Left;
    Top:=CellRect.Top;
    Height:=CellRect.Bottom-CellRect.Top;
  end;
end;

lg,
jus

jus 5. Jun 2019 14:38

AW: TreeViewPresenter mit SpinEdit in VirtualStringTree verwenden
 
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
Delphi-Quellcode:
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. :-D

Lg,
jus


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz