[老问题]StringGrid动态画某个满足条件的行的颜色![[[[[在线等,马上结账]]]]](50分)

  • 主题发起人 主题发起人 Ekin
  • 开始时间 开始时间
E

Ekin

Unregistered / Unconfirmed
GUEST, unregistred user!
如下是我从AdoQuery取出来的值赋给以下StringGrid(值已取出赋给StringGrid)了,现在我要“条件=满足”的行换个颜色以提示(在线等,马上结账)
序号 金额 开始时间 结束时间 条件
1 200 2006/03/01 2006/4/01 满足
2 300 2006/4/01 2006/4/30 不满足
3 100 2006/5/5 2006/8/4 满足
 
好像不行的
 
问题: 关于Stringgrid某几笔资料变颜色 ( 积分: 100 )
分类: 数据库-C/S型

来自: jony, 时间: 2000-10-23 2:08:56, ID: 373070
我需要在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

来自: 王寒松, 时间: 2000-10-23 3:38:31, ID: 373076
原因是你修改了StringGrid里内容后。 StringGrid需要重画自己。同时重画了所有Cell

简单的办法
上面的判断是否画格子的条件改为判断当前格子里的颜色是否为你设置的颜色还
是默认的颜色

来自: jqw, 时间: 2000-10-23 10:01:59, ID: 373213
按理速度应该可以

来自: jony, 时间: 2000-10-23 17:35:40, ID: 373686
王寒松:
不好意思,我还是不怎么明白,能否讲细一点,最好给个例子。谢谢!
jony

来自: BaKuBaKu, 时间: 2000-10-23 19:24:19, ID: 373760
怎么能用 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
的内容判断。

来自: jony, 时间: 2000-10-24 17:39:58, ID: 374980
接受答案了.

来自: mnmn, 时间: 2001-05-10 11:29:55, ID: 526371
to BaKuBaKu:我照你的办法做的,但是怎么全部都变成红色的了?

得分大富翁: BaKuBaKu
 
分不夠再加
 
人家不是给你把示例代码都贴出来了嘛。 还加啥分, 就是Drawcell事件中写代码就可以了。
 
问题其实已经解决,大家若还有更完美的地方可以补充,呆会准备结帐了
————————————————————————————————————
 
直接用TStringGrid肯定不是最好的,因为里面的重画非你所要。直接模仿TCustomGrid做一个组件,只是部分重写 onpaint过程,并且加几个数组变量来记录每个格子的参数
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部