Einzelnen Beitrag anzeigen

Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

Problem mit TListView.OnDrawItem

  Alt 18. Sep 2003, 14:50
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] = '1then
      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???
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat