delphi7 点button改变dbgrid选中行的字体颜色

一个button按钮一个dbgrid控件,我要实现:点击那个button按钮,就能把我在dbgrid中选中的那行数据的字体颜色变成红色,其他行字体颜色不变!... 一个button按钮 一个dbgrid控件, 我要实现:点击那个button按钮,就能把我在dbgrid中选中的那行数据的字体颜色变成红色,其他行字体颜色不变! 展开
 我来答
KDERP
2016-01-13 · 知道合伙人软件行家
KDERP
知道合伙人软件行家
采纳数:266 获赞数:698
2016-2017荣获 金达软件(广州) 最佳项目负责人

向TA提问 私信TA
展开全部
操作步骤如下:
1、选择DBGrid,并双击进行事件OnDrawDataCell进行代码编辑;
2、输入代码如下:
if (qyDetail.FieldByName('field1').AsCurrency <> 0) or
(qyDetail.FieldByName('field2').AsCurrency <> 0) then //符合条件的字段
begin
ABrush.Color := clred ; //字体颜色,当前设置为红色
end;
3、编译后查看效果即可。
darlingks
推荐于2016-07-13 · TA获得超过222个赞
知道小有建树答主
回答量:638
采纳率:75%
帮助的人:171万
展开全部
var
CHAGECOLOR: Boolean; //初始化为False Button按一下就改变一次T/F 需要设置为全局变量
CHAGECOLOR:= NOT CHAGECOLOR;

DBGrid的OnDrawColCell事件中写如下代码:
With DBGrid do begin
If ((gdSelected in state) and (CHAGECOLOR)) then begin
Canvas.Font.Color :=ClYellow;
DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
追问
生效是生效了,但是我一点另一行之后之前改变字体颜色的那行又变回原来的颜色了,如何让它不变回去呢?
追答
var   //申明全局变量
  CHAGECOLOR: Boolean;
  M_COL: set of 0..255;
  i_change: integer; 
  
procedure TForm1.BitBtn1Click(Sender: TObject);//按钮  [标色]
begin
  CHAGECOLOR:=True;
  If Not (i_change in M_COL) then M_COL := M_COL + [i_change];
end;  

procedure TForm1.DBGrid1CellClick(Column: TColumn);//DBGrid单击事件
begin
  CHAGECOLOR:=False;
  i_change:=dbgrid1.DataSource.DataSet.RecNo;
end;

//放在DBGrid1的OnDrawColCell事件中, 最好还在最后加一句用于刷新重画的行 
  With DBGrid1 do begin
    If DataSource.DataSet.RecNo in M_COL then begin
      Canvas.Font.Color :=Clred;
      Canvas.Brush.Color:=clblack;
      DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
  end;

这个缺点是最多只能标注256行, 如果要标注更多, 你把SET OF 0..255 改用数组或者其他类型来保存需要上色的行号就可以了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式