关于Stringgrid某几笔资料变颜色(100分)

  • 主题发起人 主题发起人 jony
  • 开始时间 开始时间
J

jony

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要在Stringgrid中将符合条件的几笔资料更变颜色,但发现它每一笔都从新刷新
比如说第一笔和第四笔符合条件,但只对第四笔进行颜色更改,不知是否我的程序有问题
请各位高手帮我看看,谢谢!(i1是个全局变量,第一笔符合条件的i1就是1,第四笔符合
条件的i1就是4,然后对这一笔进行更改颜色)
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if query3.fieldbyname('已选').asboolean=true then arow:=i1;
if (Arow=i1) then begin
with Stringgrid1.Canvas do
begin
FillRect(Rect);
Font.Color:=clred;
TextOut(Rect.left,Rect.top,Stringgrid1.cells[Acol,Arow]);
end;
end
else
with Stringgrid1.Canvas do
begin
FillRect(Rect);
Font.Color:=clblack;
TextOut(Rect.left,Rect.top,Stringgrid1.cells[Acol,Arow]);
end;
end;
jony
 
原因是你修改了StringGrid里内容后。 StringGrid需要重画自己。同时重画了所有Cell

简单的办法
上面的判断是否画格子的条件改为判断当前格子里的颜色是否为你设置的颜色还
是默认的颜色
 
按理速度应该可以
 
王寒松:
不好意思,我还是不怎么明白,能否讲细一点,最好给个例子。谢谢!
jony
 
怎么能用 Query 的内容来判断格子的颜色呢?Query 的记录指针又不会随着 Grid 的绘制
的改变而改变。
最好的办法是:把 Grid 多定义一列放到最后,把这列的宽度设置为 -1 ,这列的内容
视 Query 每行的条件而定,比如用 “1” 代表 True ,“0”代表 False。
在 OnDrawCell 事件中就可以这样写:(假设这列为第 9 列)

if (Stringgrid1.cells[9,Arow]=‘1’) then begin
with Stringgrid1.Canvas do
begin
FillRect(Rect);
Font.Color:=clred;
TextOut(Rect.left,Rect.top,Stringgrid1.cells[Acol,Arow]);
end;
else ...

知道了吗?其实就是加一列标志列,根据该列的标志使用不同的颜色,不能用 Query
的内容判断。
 
接受答案了.
 
to BaKuBaKu:我照你的办法做的,但是怎么全部都变成红色的了?
 
后退
顶部