Paint-problemer på TListView når en Column ændrer bredde
Hej Eksperter!!Jeg sidder og prøver at lave en statusbar i en TListView som skal fortælle hvor langt programmet er med noget download-pjat, men når man ændrer bredden på kolonnerne kan der komme nogle underlige fejl...
http://hermandsen.homepage.dk/progressbar.png
Jeg har lagt lidt eksempelkode her:
http://hermandsen.homepage.dk/progressbar.zip
Til copy/pasterne ser det således ud (lv er navnet på mit TListView):
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
Item: TListItem;
begin
Randomize;
for I := 0 to 9 do //Indsætter nogle tilfældige items
begin
Item := lv.Items.Add;
Item.Caption := 'Hest';
Item.SubItems.Add(IntToStr(Random(101)));
end;
end;
procedure TForm1.lvCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
var
V, W, I: Integer;
Rect, Rect2: TRect;
begin
if (SubItem <> 1) then Exit;
W := Sender.Column[SubItem].Width;
V := StrToInt(Item.SubItems[SubItem-1]);
Rect := Item.DisplayRect(drBounds); //firkanten som Item'en bliver vist i
for I := 0 to SubItem -1 do //Vi finder firkanten for vores SubItem
Rect.Left := Rect.Left + Sender.Column[I].Width;
Rect2 := Rect; //Lidt udregninger
Rect2.Right := Rect2.Left + W;
Rect.Right := Rect.Left + V*W div 100;
Rect2.Top := Rect2.Top + 1;
Rect.Top := Rect.Top + 1;
DefaultDraw := False;
with Sender.Canvas do
begin
Brush.Style := bsSolid; //Først tegner vi den grå kasse
Brush.Color := $D0D0D0;
FillRect(Rect2);
Brush.Color := $FF6060; //Så tegner vi den blå kasse
Brush.Style := bsSolid;
FillRect(Rect);
Brush.Color := clBlack;
FrameRect(Rect2);
Refresh; //Inden vi kan skrive teksten skal billedet opdateres
Brush.Style := bsClear;
Font.Name := 'Tahoma';
Font.Color := clBlack;
TextOut(Rect2.Left + ((Rect2.Right - Rect2.Left) div 2) - (Length(Item.SubItems[0] + '%') * 6 div 2), Rect2.Top, Item.SubItems[0] + '%');
end;
end;
Hvordan får jeg programmet til at lade være med at painte progressbarene i andre kolonner end den hvor den hører hjemme!?
Håber det gav mening...
//hermandsen
