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 + CustomDrawSubItems (https://www.delphipraxis.net/5371-listview-customdrawsubitems.html)

Captnemo 4. Jun 2003 07:41


ListView + CustomDrawSubItems
 
Hi Leute,

vielleicht könnt ihr mir helfen.
Ich hab ein ListView in dem Ich eine Spalte selbst zeichne. Is auch kein Prob. Aber alle Spalte die meiner selbstgezeichneten folgen, werden mit fettem Text ausgestattet, obwohl ich die nicht mehr anfasse.
Hier mal mein Code:

Delphi-Quellcode:
procedure Tfrm_Main.ListView2CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
var
 r, r2: TRect;
 i, p: Integer;
 OldBkMode:Integer;
begin
  if subitem<>2 then begin
    DefaultDraw:=True;
    exit;
  end;
  DefaultDraw:=False;
  r:=item.DisplayRect(drBounds);
  for i:=0 to SubItem -1 do
   r.left:=r.left+ListView2.Columns[i].Width;
  r.right:=r.left+ListView2.Columns[SubItem].Width;
  //ShowMessage(Inttostr(SubItem)+' '+inttostr(ListView2.Columns[SubItem].Width));
  //r:=rect(r.left+1, r.top+1, r.right-1, r.bottom-1);
  ListView2.Canvas.Brush.color:=clGreen;
  listView2.canvas.FrameRect(r);
  r2:=r;
  r2.right:=r2.left+Trunc(ListView2.Columns[SubItem].Width*(strtoint(Item.subItems[2])/strtoint(Item.subItems[0])));
  r2:=rect(r2.left+1, r2.top+1, r2.right-1, r2.bottom-1);
  with ListView2.Canvas do begin
   brush.color:=clRed;
   if Trunc((strtoint(Item.subItems[2])/strtoint(Item.subItems[0]))*100) < 100 then
    brush.Color:=$007269D3;
   if Trunc((strtoint(Item.subItems[2])/strtoint(Item.subItems[0]))*100) < warnung then begin
    brush.Color:=clBlue;
    if gewarnt.IndexOf(Item.Caption)=-1 then
     gewarnt.Add(Item.Caption);
   end;
   if Trunc((strtoint(Item.subItems[2])/strtoint(Item.subItems[0]))*100) < 30 then
    brush.Color:=clLime;
   fillrect(r2);
   OldBkMode := SetBkMode(Handle, TRANSPARENT);
   TextOut(r.Left+Trunc((r.Right-r.Left-TextWidth(inttostr(Trunc((strtoint(Item.subItems[2])/strtoint(Item.subItems[0]))*100))+' %'))/2),r.Top,inttostr(Trunc((strtoint(Item.subItems[2])/strtoint(Item.subItems[0]))*100))+' %');
   SetBkMode(Handle, OldBkMode);
   Brush.color:=ListView2.color;
  end;
end;
Es wird im SubItem[1] ein Prozentanzeige gezeichnet. Probiert das mal aus. Habt ihr das gleiche? Wenn ja, warum?

sakura 4. Jun 2003 09:40

Ich habe jetzt nicht alles angeschaut, aber es hört sich einfach danach an, als wäre das fsBold Attribut der Font am Ende noch gesetzt, einfach mal löschen:
Delphi-Quellcode:
ListView2.Canvas.Font.Style := ListView2.Canvas.Font.Style - [fsBold];
...:cat:...

Captnemo 4. Jun 2003 09:49

Hi Sakura,

hatte ich auch erst gedacht. Obwohl ich den Canvas.Font innerhalb der Procedure gar nicht anfasse.

Ich hatte ListView2.Canvas.font.Style:=[] probiert. Ist meiner Meinung nach daselbe.

Deine Variante habe ich aber auch probiert. Kein Erfolg. Ist immer noch das gleiche.
Ich verstehs einfach nicht.

sakura 4. Jun 2003 11:13

Dann lass mal noch den Teil .Canvas raus und justiere die Font des ListView selbst. Vielleicht hilft das...

...:cat:...

Captnemo 4. Jun 2003 11:21

Kein änderung. Das Prob bleibt.

sakura 4. Jun 2003 11:50

Hm :-(,

dann bin ich auch ratlos. Test doch mal, was passiert, wenn Du die anderen Spalten zeichnest, sind doch eh nur drei, vier Zeilen Code extra...

...:cat:....


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 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 by Thomas Breitkreuz