一个DBGrid小问题!(20分)

  • 主题发起人 主题发起人 雨林18
  • 开始时间 开始时间

雨林18

Unregistered / Unconfirmed
GUEST, unregistred user!
如果我想让DBGrid某一行变成黄色或是让指针指的当前行变成黄色如何实现!!
 
在DrawColumnCell里面自己画。主要是处理(gdSelected in State)
可根据下面代码进行更改
procedure TForm1.DBGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
{
if Query1.FieldByName('Col1').AsString <> '' then
if (gdSelected in State) and (DBGrid1.Focused = True) then
DBGrid1.Canvas.Font.Color := clWhite
else
DBGrid1.Canvas.Font.Color := clTeal;
}
if query1.FieldByName('Col1').AsString <> '' then
dbgrid1.Canvas.Brush.Color := $00E0FFFF
else
dbgrid1.Canvas.Brush.Color := clWhite;

if ((gdSelected in State) and (gdFocused in State)) then
begin
dbgrid1.Canvas.Brush.Color := clNavy;
dbgrid1.Canvas.Font.Color := clWhite;
end;

dbgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
 
to maikee1978 我这样写不行,请帮我看看我这样写对不对,谢谢!!


procedure Tziyufrm.DBGridEh1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
begin
if (Query1licheng.Value =0) then
begin
DBGridEh1.Canvas.Font.Color := clWhite;
DBGridEh1.Canvas.Brush.Color :=$00E0FFFF;
end;
 
Query1licheng.Value =0 这句是什么意思》?
 
没人会吗?不会吧,只是一个变色的小问题应该不难吧,请知道的人告知,谢谢
 
to 嬉皮笑脸
Query1licheng.Value =0 这是某个字段的值,也就是说当licheng这个字段的值=0时,颜色就变!
 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
DBGridDraw(DBGrid1,rect,datacol,column,state,clskyblue,$00FFE8B3,$00996600);
end;

procedure DBGridDraw(Sender: TDBGrid;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState; Color1: Tcolor; Color2: Tcolor; ColorC: Tcolor);
begin
Case Sender.DataSource.DataSet.RecNo mod 2 = 0 of//根据数据集的记录号进行判断,如果是clUseServer 会失败
True : Sender.Canvas.Brush.color:=color1; //偶数行颜色
False: Sender.Canvas.Brush.color:=color2; //奇数行颜色
end;

if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then begin //file://选中行用红色显示
Sender.Canvas.Brush.color:=colorC; //当前行颜色
Sender.Canvas.pen.mode:=pmMask;

end;

Sender.DefaultDrawColumnCell (Rect,DataCol,Column,State);
end;
 
算你运气,本人刚刚测试通过,一定给分啊!
原码如下:
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
var
i: Integer;
begin
if (ADOTable1.RecNo mod 2) = 0 then
begin
DBGrid1.Canvas.Brush.Color := $00B5DAFF;
for i := 1 to DBGrid1.Columns.Count do
DBGrid1.DefaultDrawDataCell(Rect, Field, [gdFixed]);
end else
begin
DBGrid1.Canvas.Brush.Color := $0079BCFF;
for i := 1 to DBGrid1.Columns.Count do
DBGrid1.DefaultDrawDataCell(Rect, Field, [gdFixed]);
end;
end;
 
多人接受答案了。
 
后退
顶部