起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: 新来小职员

[搞定]如何控制dataGrid中某行的字体色[问题]**

[复制链接]
 楼主| 发表于 2007-10-30 16:07:23 | 显示全部楼层
9楼问题解决,

"如果是手工直接修改,把光标移动到其他的记录上"
我的checkbox是手动点击的,
你的意思是说代码只要这样写
procedure TWLDZ.DataGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TTreeListNode; AColumn: TTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean; var AText: string; var AColor: Integer; AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean);
begin
     if DataGrid1.DataSource.DataSet.FieldByName('DZBJ').AsString  = '1' then
     begin
          AColor := $CCFFFF;
     end;
end;
然后鼠标点击到别的记录上就行了?
回复 支持 反对

使用道具 举报

发表于 2007-10-30 17:10:50 | 显示全部楼层
这是一个颜色,你把 AColor := $CCFFFF 修改为 AColor := Graphics.clRed;

然后鼠标点击到别的记录上就行了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-30 18:00:59 | 显示全部楼层
晕完全相反了,不选的先自己全部变成红色,被选择的反而变成黑色
procedure TWLDZ.DataGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TTreeListNode; AColumn: TTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean; var AText: string; var AColor: Integer; AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean);
begin
    if DataSource1.DataSet.FieldByName('DZBJ').AsString  = '0' then //(ANode.Index mod 2) = 1 then
    begin
      AFont.Color := Graphics.clRed;
    end;
end;

1.jpg

95.05 KB, 下载次数: 183

回复 支持 反对

使用道具 举报

发表于 2007-10-31 08:36:00 | 显示全部楼层
把 if DataSource1.DataSet.FieldByName('DZBJ').AsString  = '0' then
修改为  if DataSource1.DataSet.FieldByName('DZBJ').AsString  = '1' then
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-31 09:07:32 | 显示全部楼层
改了但是改变的并不是代码中设置的AFont.Color := Graphics.clRed;
而是黑色,我不知道是不是默认变黑色,我想这就是之前6楼看不出颜色改变的原因,因为改变的颜色和原来的字体颜色是一样的。
回复 支持 反对

使用道具 举报

发表于 2007-10-31 09:53:00 | 显示全部楼层
默认是黑色的,你可以在这里根据字段的值设置自己的颜色,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-31 10:18:27 | 显示全部楼层
可是我不知道哪个才是默认的颜色属性,改了默认是黑色的属性但是没有一个是
回复 支持 反对

使用道具 举报

发表于 2007-10-31 11:03:46 | 显示全部楼层
怎么会呢?
begin
    if DataSource1.DataSet.FieldByName('DZBJ').AsString  = '0' then //(ANode.Index mod 2) = 1 then
    begin
      AFont.Color := Graphics.clRed;
    end;
end;
这段代码的意思是当DZBJ' 这个字段值为0时,整条记录的颜色变成红色,其他的为默认色。
要不你这样修改
begin
    if DataSource1.DataSet.FieldByName('DZBJ').AsString  = '0' then //(ANode.Index mod 2) = 1 then
         AFont.Color := Graphics.clRed;
    else
         AFont.Color := Graphics.clBlue;
end;
你看看结果是啥
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-31 11:14:13 | 显示全部楼层
按上面写的结果如图

1.jpg

170.91 KB, 下载次数: 161

回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-31 11:18:37 | 显示全部楼层
还有就是勾上以后变成蓝色,按代码的意思取消勾选就应该变回红色了,但是取消后还是蓝色没变回红色,我的checkbox字段为字符;checkbox类型,这样设置没错吧?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-29 20:03 , Processed in 0.043205 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表