![]() |
Problem mit TListView.OnDrawItem
Hi! Ich versuche in einer ListView einzelne Zeilen fett darzustellen. Dabei habe ich ein klitzekleines Problem: Beim Verändern der Spaltenbreite wird nicht das gesamte Element neu gezeichnet, sondern nur von der Spalte weg,deren Größe ich bearbeite. Das heißt, wenn ich Spalte 2 größer mache, werden nur Spalten 3, 4, etc. neu gezeichnet, und sobald Spalte 2 groß genug ist, sieht man wieder den alten Inhalt von Spalte 2. Das ist wirklich nervend, und auch sobald der Resize abgschlossen ist, muss ich immer noch das Element anklicken, ansonsten bleibt es einfach wie oben beschrieben. Falls ich eine Spalte kleiner mache, wird der zuerst unsichtbare Bereich nicht neu gezeichnet, d.h., dass Spalten die aufgrund eine kleineren Spalte am Anfang wieder Platz finden, werden nicht neu aufbereitet. Ok, nun genug der theorie, hier der Source:
Delphi-Quellcode:
Kann mir vielleicht irgendjemand helfen???
procedure Tf_Addresses.lv_AddressesDrawItem(Sender: TCustomListView;
Item: TListItem; Rect: TRect; State: TOwnerDrawState); var CurrentLeft: Integer; i: Integer; begin //TODO:Custom draw the items with Sender as TListView do begin Canvas.FillRect(Rect); if Item.SubItems[5] = '1' then Canvas.Font.Style := [fsBold] else Canvas.Font.Style := []; Canvas.Font.Color := clBlack; CurrentLeft := Rect.Left+2; Canvas.TextOut(CurrentLeft, Rect.Top, Item.Caption); for i := 1 to Columns.Count-1 do begin Inc(CurrentLeft,Columns[i-1].Width); Canvas.TextOut(CurrentLeft, Rect.Top, Item.SubItems[i-1]); Canvas.FillRect(GetRect(CurrentLeft+Canvas.TextWidth(Item.SubItems[i-1]),Rect.Top,Rect.Right,Rect.Bottom)); end; end; end; |
Re: Problem mit TListView.OnDrawItem
*nachobenrück*
Es ist wirklich wichtig, kann mir wirklich keiner helfen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 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