在DBGRID中改变字体的颜色(20分)

  • 主题发起人 主题发起人 逸魔
  • 开始时间 开始时间

逸魔

Unregistered / Unconfirmed
GUEST, unregistred user!
我说的改变字体的颜色是指有的改(不是全部都改)如果我要在数据库中插入一条记录(如果
这条记录是实时的报警,我就需要将它的颜色变成红色,请问如何改?
 
rocedure Tinfo.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if query1.FieldByName(’all’).asstring>40’ then
begin
dbgrid1.Canvas.Font.Color:=clred;
dbgrid1.Canvas.Brush.color:=clyellow;
end
else
begin
dbgrid1.Canvas.Font.Color:=clblue;
dbgrid1.Canvas.Brush.color:=clyellow;
end;

dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);
end;

 
我用的是table,dbgrid,怎么用?不需要判断FIELDBYNAME。实时报警的部分,我另外加
 
改变当前记录的颜色?
 
我试了,还是没有改变呀?
 
只是打了个比方
你再描述得详细点你想干什么?
 
在DBGRID中写入很多记录,但是有的记录(如实时报警记录) 就要用别的颜色区分。
 
你总要进行一个判断吧
你把那个IF条件换成你自己的条件不就行了
(正在插入的情况下是不会显示颜色的)
 
我试了,怎么它把整个DBGRID的记录都变成红色了。我是想把其中满足条件的一条(如是
实时报警记录的颜色改为红色),但是我用了你写的东东后,它是整个DBGRID的记录都是红色了。
 
我的IF判断不能用FIELDVALUE来判断,比如说我的FIELD有系统1报警和系统2报警,而我的
实时报警可能是系统1的也可能是系统2的,我并不要区别系统或系统2的颜色,我要区别
在DBGRID中是实时报警的话,哪整行都用红色显示。所以我在接收的实时报警时,用了一个
变量作为判断的依据,但是我发觉怎么它只在DBGRID所显示范围里的最上面的一条的第一个
字段变颜色,别的字段没有变。
 
procedure Tform1.DrawGrid(Grid:TDBGrid;const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Grid.DataSource.DataSet.FieldByName('area').value>756943 then//奇偶行判断
begin
Grid.Canvas.Font.Color:=clblack;
Grid.Canvas.Brush.color:=clwhite;
end
else
begin
Grid.Canvas.Font.Color:=clblack;
Grid.Canvas.Brush.color:=clred;
end;
Grid.DefaultDrawColumnCell(rect,datacol,column,state);
end;
这是我在一个程序中作的判断,你可以判断这条记录的一个字段值来做为条件以改变整行的背景色
 
我用字段值FieldByName('area').value判断没有用。我设了变量判断,但是不能再我加入
哪条记录变颜色,而且不能变整行
 
procedure Tform1.DrawGrid(Grid:TDBGrid;const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Grid.DataSource.DataSet.FieldByName('字段').value > 值 then begin
Grid.Canvas.Font.Color:=clblack;
Grid.Canvas.Brush.color:=clwhite;
end
else begin
Grid.Canvas.Font.Color:=clblack;
Grid.Canvas.Brush.color:=clred;
end;
Grid.DefaultDrawColumnCell(rect,datacol,column,state);
end;

 
楼上的大侠贴的方法我知道,但是我不想判断FieldByName('字段').value,判断它没有用
我在串口接收数据的事件中判断:如果是实时报警的话整行都要用红色显示。包括所有的
FIELD。怎么样才能实现的(不通过FIEDLBYNAME判断)。
procedure TForm4.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if alarm=1 then //如果是实时报警
dbgrid1.Canvas.font.Color:=clred;
。。。。
Grid.DefaultDrawColumnCell(rect,datacol,column,state);
end;
为什么我不能在实时报警的那条记录变颜色?它在DBGRID最上面那条记录变颜色,而且只
变头一个FIELD的颜色?


 
可以参考一下
if gdselected in state then
dbgrid2.Canvas.Font.Color:=rgb(255,0,255)
else if dm.monitor.FieldByName('状态').AsString='无效' then
DBGrid2.Canvas.Font.Color:=clred
else if dm.monitor.FieldByName('状态').AsString='其它' then
DBGrid2.Canvas.Font.Color:=rgb(0,128,128);
DBGrid2.DefaultDrawColumnCell(Rect, DataCol, Column, State);
 
为什么你们都不懂我说的意思呀,郁闷!
 
在DBGrid的 onDrawColumnCell事件判断

begin
if dm.Q_B_ApplyIndex.FieldByName('assessor').Asstring<>'0' then
begin
dbgrid1.Canvas.Font.Color:=clgreen;
dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);
end;
end;
 
我要在DBGRID中插入一条记录,dbgrid有4个字段的:序号、系统1报警、系统2报警、时间。
这个时候我接收报警,如果是系统1报警,就把记录写入:序号、系统1报警、时间。系统
2同理。但是如果这条记录是实时的报警,假如它是系统1的实时报警,也记入到序号、
系统1报警、时间中,但和前面不同的时要用红色显示。
所以楼上的都行不通。

(没分了,以后再补)
 
后退
顶部