说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

ListView的小问题

编辑:说三道四文库 发布时间:2018-04-26 05:46
HTML文档下载 WORD文档下载 PDF文档下载
怎么才能把ListView做的列表里各行根据某些条件显示为不同的颜色,我是在ListView里用listitem里添加行的,我试的,但只能把整个列表的背景颜色一块改了,高手谢谢了
好象比较难哦,用STRINGGRID方便一点
ListView的例子

void __fastcall TMainForm::ListView1CustomDrawItem(
      TCustomListView *Sender, TListItem *Item, TCustomDrawState State,
      bool &DefaultDraw)
{

    if ( ListView1->ViewStyle == vsReport )
        if (Item->Index%2 != 0)                    
            ListView1->Canvas->Brush->Color =(TColor)0x9cfb9c; 
}
void __fastcall TForm1::ListView1CustomDrawItem(TCustomListView *Sender,
      TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
if  (Item->Index%2  !=  0)  
               ListView1->Canvas->Brush->Color  =  (TColor)RGB(210,240,240);
else  ListView1->Canvas->Brush->Color  = (TColor)RGB(240,240,240);
}
以上只是隔行不同颜色的例子。如果要做到根据不同的Item来决定不同的颜色,还是在ListView的CustomDrawItem中:

void __fastcall TForm1::ListView1CustomDrawItem(TCustomListView *Sender,
    TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
    int Index = Item->Index;
    if (Index == 0)
        ListView1->Canvas->Brush->Color = (TColor)0x808080;
    else if(Index == 1)
        ListView1->Canvas->Brush->Color = (TColor)0xB0B0B0;
    else if(Index == 2)
        ListView1->Canvas->Brush->Color = (TColor)0xE0E0E0;
    else
        ListView1->Canvas->Brush->Color = clWhite;
    ListView1->Canvas->Pen->Color = clWindowText;
}
以上只是隔行不同颜色的例子。如果要做到根据不同的Item来决定不同的颜色,还是在ListView的CustomDrawItem中:

void __fastcall TForm1::ListView1CustomDrawItem(TCustomListView *Sender,
    TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
    int Index = Item->Index;
    if (Index == 0)
        ListView1->Canvas->Brush->Color = (TColor)0x808080;
    else if(Index == 1)
        ListView1->Canvas->Brush->Color = (TColor)0xB0B0B0;
    else if(Index == 2)
        ListView1->Canvas->Brush->Color = (TColor)0xE0E0E0;
    else
        ListView1->Canvas->Brush->Color = clWhite;
    ListView1->Canvas->Pen->Color = clWindowText;
}
你的问题不是很清楚,如果是一行的话,有个OnDrawItem事件可以画,如果是一行中的其中一列就应该比较麻烦了
你的问题不是很清楚,如果是一行的话,有个OnDrawItem事件可以画,如果是一行中的其中一列就应该比较麻烦了
再给你一段代码,是我程序中用到的一部分。

void __fastcall TFormMain::LVCustomDrawItem(TCustomListView *Sender,
      TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
    //将LV中可能有错的地方涂色
    if(Item->SubItems->Strings[2]!="" && Item->SubItems->Strings[3]!="")
    {
        if((Item->SubItems->Strings[8].ToInt()!=0) || (Item->SubItems->Strings[9].ToInt()!=0))
        {
            LV->Canvas->Brush->Color=(TColor)RGB(0xFF,0xFF,0x00);//可能出现错误,用黄色代表。
        }
        else
        {
            LV->Canvas->Brush->Color=(TColor)RGB(0x0,0xFF,0x00);//如果正确用绿色代替。
        }
    }
}
你的问题不是很清楚,如果是一行的话,有个OnDrawItem事件可以画,如果是一行中的其中一列就应该比较麻烦了
晕啊,楼上的这么快,难怪帖子半天提交不上来
我是在数据库里查找,根据某些条件把行显示为不同颜色,这样清楚了吗
ListView On  CustomDrawSubItem() 就可以辣。
这个问题问过无数遍了,建议楼主提问之前先搜索一下!!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘