读书人

ListBox-gt;OndreawItem有关问题请问

发布时间: 2012-03-08 13:30:13 作者: rapoo

ListBox->OndreawItem问题请教
void _fastcall TForm1::ListBox2DrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State)
{
ListBox2-> Canvas-> Brush-> Style = bsClear;
ListBox2-> Canvas-> Font-> Color = clGray;
ListBox2-> Canvas-> TextOutA(Rect.Left,Rect.Bottom,ListBox2-> Items-> Strings[Index]);
}

用上述代码给指定Index行着色时,绝对不是显卡问题,某些行需选中并点击,才能将内容显示出来,为什么ListBox内容显示得不是很清楚?

如果不在ListBox的OnDrawItem里调用重画事件,即不采用BCB自动生成的函数ListBox2DrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State)
,如何在外部添加代码对某行进行着色或者修改字体颜色呢?

[解决办法]
ListBox2-> Canvas-> TextOutA(Rect.Left,Rect.Bottom,ListBox2-> Items-> Strings[Index]);
改为
ListBox2-> Canvas-> TextOutA(Rect.Left,Rect.Top,ListBox2-> Items-> Strings[Index]);

即Bottom-> Top
[解决办法]
int nItem = -1;
TColor nItemColor;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
nItem = 2;
nItemColor = clRed;
ListBox2-> Repaint();
}

void __fastcall TForm1::ListBox2DrawItem(TWinControl *Control, int Index,
TRect &Rect, TOwnerDrawState State)
{
ListBox2-> Canvas-> Brush-> Style = bsClear;
ListBox2-> Canvas-> Font-> Color = nItem == Index ? nItemColor : ListBox2-> Font-> Color;;
ListBox2-> Canvas-> TextOutA(Rect.Left,Rect.Top,ListBox2-> Items-> Strings[Index]);
}

读书人网 >C++ Builder

热点推荐