AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListView + CustomDrawSubItems

Ein Thema von Captnemo · begonnen am 4. Jun 2003 · letzter Beitrag vom 4. Jun 2003
Antwort Antwort
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

ListView + CustomDrawSubItems

  Alt 4. Jun 2003, 07:41
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?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2
  Alt 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:ListView2.Canvas.Font.Style := ListView2.Canvas.Font.Style - [fsBold]; ......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#3
  Alt 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.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#4
  Alt 4. Jun 2003, 11:13
Dann lass mal noch den Teil .Canvas raus und justiere die Font des ListView selbst. Vielleicht hilft das...

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#5
  Alt 4. Jun 2003, 11:21
Kein änderung. Das Prob bleibt.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#6
  Alt 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...

.......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz