StringGrid字体颜色问题

时间:2023-02-05 19:53:58
我想实现为某个满足条件的单元中字体更换颜色。
procedure TForm3.Button1Click(Sender: TObject);
var
i:integer;
arect:TRect; 
if strtoint(get_jisuan[1])>50 then
  begin
    arect:=StringGrid1.CellRect(5,i);
    StringGrid1.Canvas.Brush.Color:=clblue;
    StringGrid1.Canvas.font.Color := clRed;

    StringGrid1.Canvas.FillRect(ARect);

    StringGrid1.Canvas.TextOut(120,20,'测试测试');

  end;

大约的代码如上所失,但是发现填充的颜色在固定行可以显示,在数据区就会被遮挡。。。。求解啊。。。

StringGrid字体颜色问题

StringGrid字体颜色问题

8 个解决方案

#1


你说的是它把数据挡上了是吗?还是说下图有问题?

#2


引用 1 楼 dongyonggan 的回复:
你说的是它把数据挡上了是吗?还是说下图有问题?


下图有问题,我希望它能在最上层,如第二张图所示,为何会被数据挡住?

#3


呼叫大神们~~~

#4


你这样写不太好吧,给你个方法,满足条件的行列做个标志,设置CELL的颜色,字体什么的 在OnDraw也就是该控件的重绘事件中写比较好

#5


在onDrawGridCell事件里画比较好,好像是叫这个名字吧

#6


引用 4 楼 zhzhrony 的回复:
你这样写不太好吧,给你个方法,满足条件的行列做个标志,设置CELL的颜色,字体什么的 在OnDraw也就是该控件的重绘事件中写比较好


如何坐标志哦。。。求点拨

#7


为何会被数据挡住?
因为Grid在不停地自绘,自绘...

#8


引用 6 楼 caima123 的回复:
Quote: 引用 4 楼 zhzhrony 的回复:

你这样写不太好吧,给你个方法,满足条件的行列做个标志,设置CELL的颜色,字体什么的 在OnDraw也就是该控件的重绘事件中写比较好


如何坐标志哦。。。求点拨

比如cell[1,1]的框 定义2个全局变量 X=1,Y=1
在重绘里面的可以这样先判断 当前是否为X,Y符合的CELL 如果是就改变颜色
如果是多个状态,可以声明一个全局2维数组,但是每个重绘都要判断这个数组,也行效率比较低,不过估计界面上看不出延迟

#1


你说的是它把数据挡上了是吗?还是说下图有问题?

#2


引用 1 楼 dongyonggan 的回复:
你说的是它把数据挡上了是吗?还是说下图有问题?


下图有问题,我希望它能在最上层,如第二张图所示,为何会被数据挡住?

#3


呼叫大神们~~~

#4


你这样写不太好吧,给你个方法,满足条件的行列做个标志,设置CELL的颜色,字体什么的 在OnDraw也就是该控件的重绘事件中写比较好

#5


在onDrawGridCell事件里画比较好,好像是叫这个名字吧

#6


引用 4 楼 zhzhrony 的回复:
你这样写不太好吧,给你个方法,满足条件的行列做个标志,设置CELL的颜色,字体什么的 在OnDraw也就是该控件的重绘事件中写比较好


如何坐标志哦。。。求点拨

#7


为何会被数据挡住?
因为Grid在不停地自绘,自绘...

#8


引用 6 楼 caima123 的回复:
Quote: 引用 4 楼 zhzhrony 的回复:

你这样写不太好吧,给你个方法,满足条件的行列做个标志,设置CELL的颜色,字体什么的 在OnDraw也就是该控件的重绘事件中写比较好


如何坐标志哦。。。求点拨

比如cell[1,1]的框 定义2个全局变量 X=1,Y=1
在重绘里面的可以这样先判断 当前是否为X,Y符合的CELL 如果是就改变颜色
如果是多个状态,可以声明一个全局2维数组,但是每个重绘都要判断这个数组,也行效率比较低,不过估计界面上看不出延迟