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:
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;
Kann mir vielleicht irgendjemand helfen???