ListBox如何设置某一行中一段内容的颜色或背景
ListBox怎么设置某一行中一段内容的颜色或背景
ListBox1-> Canvas-> Brush-> Style=bsClear;
ListBox1-> Canvas-> Brush-> Color = clActiveBorder;//set color to the brush
ListBox1-> Canvas-> TextOutA(Rect.left, Rect.Bottom, ListBox1-> Items-> Strings[Index]);
上述代码可以将整行着色,但是怎么将该行中间一部分内容涂上其他颜色或加上背景那个?
改了一天,没成功,呵呵。。。望尽快回复啊,周一要交的。。。谢谢!
ListBox1-> Canvas-> Font-> Color = clRed;//set color to the brush
ListBox1-> Canvas-> Font-> Name = "MS Sans Serif ";
AnsiString strTemp = ListBox1-> Items-> Strings[Index];
ListBox1-> Canvas-> TextOutA(Rect.Left + 2, Rect.Bottom , strTemp.SubString(5,10));
例如:GGGGGGHHHHHGGGGHHHH //G代表灰色,H代表红色字体或红色背景
SubString着色总不成功,总有偏移
------解决方案--------------------
在哪里着色是根据你自己的代码是怎么写决定的
你要设置某一行中的一部分区域的颜色
那么就先把当前这个Item的矩形区域用背景色画一遍
然后在你需要着色的地方,设置Brush的颜色,然后再在你指定的区域画一次矩形
那就可以实现了。。。
------解决方案--------------------
用Canvas-> TextHeight和Canvas-> TextWidth来计算一下你要画背景的Rect大小,再加上相对位置来画
------解决方案--------------------
没测试过,你试试
AnsiString strTemp = ListBox1-> Items-> Strings[Index];
int p=0;
for(int i=1; i <=strTemp.Length(); i++)
{
switch(strTemp[i])
{
case 'H ':
ListBox1-> Canvas-> Font-> Color = clRed;
break;
case 'G ':
ListBox1-> Canvas-> Font-> Color = clGreen;
break;
default:
ListBox1-> Canvas-> Font-> Color = clBlack;
break;
}
ListBox1-> Canvas-> TextOut(Rect.Left + p, Rect.Bottom , strTemp[i]);
p+=ListBox1-> Canvas-> TextWidth(strTemp[i]);
}
------解决方案--------------------
用TextWidth来获得偏移
ListBox1-> Canvas-> Font-> Color = clRed;
AnsiString strTemp = ListBox1-> Items-> Strings[Index];
ListBox1-> Canvas-> TextOutA(Rect.Left + ListBox1-> Canvas-> TextWidth(strTemp.SubString(1,10)), Rect.Bottom , strTemp.SubString(10,5));
ListBox1-> Canvas-> Brush-> Style=bsClear;
ListBox1-> Canvas-> Brush-> Color = clActiveBorder;//set color to the brush
ListBox1-> Canvas-> TextOutA(Rect.left, Rect.Bottom, ListBox1-> Items-> Strings[Index]);
上述代码可以将整行着色,但是怎么将该行中间一部分内容涂上其他颜色或加上背景那个?
改了一天,没成功,呵呵。。。望尽快回复啊,周一要交的。。。谢谢!
ListBox1-> Canvas-> Font-> Color = clRed;//set color to the brush
ListBox1-> Canvas-> Font-> Name = "MS Sans Serif ";
AnsiString strTemp = ListBox1-> Items-> Strings[Index];
ListBox1-> Canvas-> TextOutA(Rect.Left + 2, Rect.Bottom , strTemp.SubString(5,10));
例如:GGGGGGHHHHHGGGGHHHH //G代表灰色,H代表红色字体或红色背景
SubString着色总不成功,总有偏移
------解决方案--------------------
在哪里着色是根据你自己的代码是怎么写决定的
你要设置某一行中的一部分区域的颜色
那么就先把当前这个Item的矩形区域用背景色画一遍
然后在你需要着色的地方,设置Brush的颜色,然后再在你指定的区域画一次矩形
那就可以实现了。。。
------解决方案--------------------
用Canvas-> TextHeight和Canvas-> TextWidth来计算一下你要画背景的Rect大小,再加上相对位置来画
------解决方案--------------------
没测试过,你试试
AnsiString strTemp = ListBox1-> Items-> Strings[Index];
int p=0;
for(int i=1; i <=strTemp.Length(); i++)
{
switch(strTemp[i])
{
case 'H ':
ListBox1-> Canvas-> Font-> Color = clRed;
break;
case 'G ':
ListBox1-> Canvas-> Font-> Color = clGreen;
break;
default:
ListBox1-> Canvas-> Font-> Color = clBlack;
break;
}
ListBox1-> Canvas-> TextOut(Rect.Left + p, Rect.Bottom , strTemp[i]);
p+=ListBox1-> Canvas-> TextWidth(strTemp[i]);
}
------解决方案--------------------
用TextWidth来获得偏移
ListBox1-> Canvas-> Font-> Color = clRed;
AnsiString strTemp = ListBox1-> Items-> Strings[Index];
ListBox1-> Canvas-> TextOutA(Rect.Left + ListBox1-> Canvas-> TextWidth(strTemp.SubString(1,10)), Rect.Bottom , strTemp.SubString(10,5));