Einzelnen Beitrag anzeigen

Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#14

Re: TreeView: Item komplett markieren?

  Alt 8. Aug 2005, 16:56
Das FillRect stört die VCL gar nicht, es werden Veränderungen am Brush und am Font protokolliert.

Probier mal die markierte Zeile einzufügen (ungetestet, wär allerdings ein ziemlich dreckiger Trick...)
Delphi-Quellcode:
procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  NodeRect: TRect;
begin
  NodeRect := Node.DisplayRect(False);

  Sender.Canvas.Brush.OnChange := nil; //<--- HIER

  if cdsSelected in State then
    Sender.Canvas.Brush.Color := clLime
  else
    Sender.Canvas.Brush.Color := TTreeView(Sender).Color;

  Sender.Canvas.FillRect(NodeRect);

  DefaultDraw := True;
end;
Alternativ zeichne den Hintergrund mit dem Windows-API (ebenfalls ungetestet):
Delphi-Quellcode:
var
  hbr: THandle;
begin
  ...
  if cdsSelected in State then
    hbr := Windows.CreateSolidBrush(ColorToRGB(clLime));
  else
    hbr := Windows.CreateSolidBrush(ColorToRGB(TTreeView(Sender).Color));
  if hbr = 0 then
    RaiseLastWin32Error;
  try
    Windows.FillRect(Canvas.Handle, NodeRect, hbr);
  finally
    Windows.DeleteObject(hbr);
  end;
  ...
end;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat