关于DBGrid单元格着色--高手大侠请进

mingjunr 2004-05-13 02:05:31
在发贴之前我把老贴都看了,几乎全是下面的程序:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Column.FieldName = 'fname' then
begin
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
if Column.Field.AsString ='Chang' then
begin
DBGrid1.Canvas.Font.Color := clBlue ;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;
这个着色的办法是在数据加载的时候加上的,
能不能写一个函数想给哪个格着色就给哪个格着色;可以在任何过程函数里引用它;
procedure PaintCell(ACol:integer,ARow:Integer,color:Tcolor)
begin
//如何写一直没有想出头绪来,当然不能影响原来的操作所画上的颜色
end;

...全文
50 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
太空11 2004-05-13
  • 打赏
  • 举报
回复
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Column.FieldName = 'fname' then
begin
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
if Column.Field.AsString ='Chang' then
begin
DBGrid1.Canvas.Font.Color := clBlue ;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;
这个着色的办法是在数据加载的时候加上的,
能不能写一个函数想给哪个格着色就给哪个格着色;可以在任何过程函数里引用它;
procedure PaintCell(ACol:integer,ARow:Integer,color:Tcolor)
begin
//如何写一直没有想出头绪来,当然不能影响原来的操作所画上的颜色
end;
miky 2004-05-13
  • 打赏
  • 举报
回复
我在错误检查程序里不知道怎么调用DBGrid1DrawColumnCell!

这个不应该是你调用的,永远不要去调用他!
你可以通过行,列,甚至单元格的内容来决定怎么上色。
aiirii 2004-05-13
  • 打赏
  • 举报
回复
>>我在错误检查程序里不知道怎么调用DBGrid1DrawColumnCell!
要有個列表記載改變顏色的cell
juliens 2004-05-13
  • 打赏
  • 举报
回复
换用EhLib吧!
不用这么麻烦!
mingjunr 2004-05-13
  • 打赏
  • 举报
回复
呵呵,老大教训的是.不过我在加载数据库(Excel表)时根本不知道要验证哪一行,只有填好哪一列是哪个字段时,按一下错误检查按钮.才对dbgrid重绘,对非法的字符所在的格显示红色.
我在错误检查程序里不知道怎么调用DBGrid1DrawColumnCell!
duhailee 2004-05-13
  • 打赏
  • 举报
回复
如果你换作listview可能会好点。
miky 2004-05-13
  • 打赏
  • 举报
回复
能不能写一个函数想给哪个格着色就给哪个格着色;可以在任何过程函数里引用它;

可以倒是可以,可你知道大家为什么都不这样干吗?
1、因为那样你取不到const Rect: TRect也就是绘制的区域!除非你继承他,自己写个控件
2、你需要额外的变量或记录来记录某个单元格的信息,以便在重绘的时候能正确绘制。
3、你还是要在DBGrid1DrawColumnCell写代码,否则窗口被挡住时绘制就不正常;

综合以上3点,所以大家都不用你说的办法,那样麻烦。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧