菜鸟的学习笔记,如果对你有用最好。高手请无视。
ListView 要开 Doublebuffer
void __fastcall TForm1::ListView1CustomDrawSubItem(TCustomListView *Sender, TListItem *Item, int SubItem, TCustomDrawState State, bool &DefaultDraw) { DefaultDraw=true; int lef=0; TRect R = Item->DisplayRect(drBounds); TCustomListView * s = Sender; for(int i=0;i<2;i++) lef += s->Column[i]->Width+1; R.bottom-=1; R.Left+=lef; String text=Item->SubItems->Strings[1]; for(int i=0;i<ListView1->Items->Count;i++) //找最大值 { if (ListView1->Items->Item[i]->SubItems->Strings[1].ToInt()>maxv) maxv=ListView1->Items->Item[i]->SubItems->Strings[1].ToInt(); } float p=(float)(Item->SubItems->Strings[1].ToInt())/(float)maxv; p*= s->Column[2]->Width; R.right= R.left+floor(p+0.5)-30; if(R.right<=R.Left)R.right=R.Left+1; //限制最小长度 if(SubItem == 2) { DefaultDraw=false; s->Canvas->Brush->Color =0xff0000+(0xff/maxv)*(Item->SubItems->Strings[1].ToInt()) ; SetBkMode(s->Canvas->Handle, TRANSPARENT); //无底色文字 s->Canvas->FillRect(R); s->Canvas->TextOutW(R.Right+5,R.top,text);// >TextRect(R1,text,TTextFormat()<< tfCenter); //s->Canvas->Rectangle(R.Left,R.top,R.right,R.bottom); //s->Canvas->TextRect(R1,text,TTextFormat()<< tfCenter); } if(DefaultDraw) s->Canvas->Brush->Color = clWhite; }