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 ListView + OwnerDraw: Fehlerhafte Darstellung (https://www.delphipraxis.net/170417-listview-ownerdraw-fehlerhafte-darstellung.html)

Andreas L. 16. Sep 2012 11:27

ListView + OwnerDraw: Fehlerhafte Darstellung
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,

ich reagiere im Ereignis OnCustomDrawItem einer TListView auf ein bestimmtes Item das als Caption nur ein Minus enthält und zeichne selbst eine Linie auf das Canvas. Die anderen Listen-Einträge werden von der ListView selbst gezeichnet. Das funktioniert auch alles wunderbar. Fahre ich zur Laufzeit allerdings mit der Maus über das letzte Item wird der Text als schwarzer Kasten dargestellt (siehe Screenshots). Das tritt aber nur auf wenn ich mit der Maus von oben komme.

Kann das jemand nachvollziehen? (Exe + Source im Anhang). Wo liegt mein Fehler?

Das ist der einzige Code dieser Test-Anwendung:
Delphi-Quellcode:
procedure TForm2.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
const
  LINE_LEFT_RIGHT_PADDING = 6;
var
  ItemVertMiddle: Integer;
  ItemHeight: Integer;
  ItemWidth: Integer;
  ItemRect: TRect;
begin
  if not Assigned(Item) then
    Exit;

  DefaultDraw := Item.Caption <> '-';

  if not DefaultDraw then
  begin
    ItemRect := Item.DisplayRect(drBounds);

    ItemHeight := ItemRect.Bottom - ItemRect.Top;

    ItemVertMiddle := ItemHeight div 2;

    ItemWidth := ItemRect.Right - ItemRect.Left;

    ListView1.Canvas.Pen.Color := clSilver;
    ListView1.Canvas.MoveTo(LINE_LEFT_RIGHT_PADDING, ItemRect.Top + ItemVertMiddle);
    ListView1.Canvas.LineTo(ItemWidth - LINE_LEFT_RIGHT_PADDING, ItemRect.Top + ItemVertMiddle);
  end;
end;

Luckie 16. Sep 2012 11:42

AW: ListView + OwnerDraw: Fehlerhafte Darstellung
 
Setz mal auch den Brush.

Andreas L. 16. Sep 2012 13:06

AW: ListView + OwnerDraw: Fehlerhafte Darstellung
 
Zitat:

Zitat von Luckie (Beitrag 1183147)
Setz mal auch den Brush.

Danke für den Tipp. Die Ergänzung von ListView1.Canvas.Brush.Style := bsClear; hat das Problem behoben. Aber warum? Das Zeichnen wird doch nur ausgeführt wenn DefaultDraw False ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 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