EhLib使用说明(5)

2019-08-30 18:03

DataCol Column State);

2. 纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。

file://将上述代码修改为: Case DataCol Mod 2 = 0 of

True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色 False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色 End;

If ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then If Not DbGrid1.SelectedRows.CurrentRowSelected then

DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色 DbGrid1.Canvas.Pen.Mode:=pmMask; DbGrid1.DefaultDrawColumnCell (Rect DataCol Column State);

上述两种方法突出了列的显示效果。

3.在数据网格中以红色突出显示当前选中的行。

设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色)

在DbGrid的DrawColumnCell事件中编写如下代码:

if ((State = [gdSelected]) or (State=[gdSelected gdFocused])) then

DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色

DbGrid1.Canvas.pen.mode:=pmmask; DbGrid1.DefaultDrawColumnCell (Rect DataCol Column State);

4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。

file://其它属性设置同3,将上述代码修改为:

if ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then begin

Case DataCol Mod 2 = 0 of

True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列显示红色 False: DbGrid1.Canvas.Brush.color:=clblue; file://当前选中行的奇数列显示蓝色

end;

DbGrid1.Canvas.pen.mode:=pmmask; DbGrid1.DefaultDrawColumnCell (Rect DataCol Column State); end;

5.横向斑马线, 同时以红色突显当前行效果。

file://其它属性设置同3,将上述代码修改为:

Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断 True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示 False: DbGrid1.Canvas.Brush.color:=clblue; file://奇数行用蓝色表示 end;

if ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then file://选中行用红色显示

DbGrid1.Canvas.Brush.color:=clRed; DbGrid1.Canvas.pen.mode:=pmMask; DbGrid1.DefaultDrawColumnCell (Rect DataCol Column State);

6.双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。

file://其它属性设置同3,将上述代码修改为:

Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断 True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示 False: DbGrid1.Canvas.Brush.color:= clblue; file://奇数行用蓝色表示 end;

If ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then Case DataCol mod 2 = 0 of

True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列用红色

False: DbGrid1.Canvas.Brush.color:= clGreen; file://当前选中行的奇数列用绿色表示 end;

DbGrid1.Canvas.pen.mode:=pmMask; DbGrid1.DefaultDrawColumnCell (Rect DataCol Column State);

上述6种方法分别就数据网格控件的列和行的色彩进行了设置,读者可以根据自己的需要设置特效。该程序在Delphi5中测试通过。

2003-11-13 11:11:31 点击DBGrid的Title对查询结果排序 关键词:DBGrid 排序

欲实现点击DBGrid的Title对查询结果排序,想作一个通用程序,不是一事一议,例如不能在SQL语句中增加Order by ...,因为SQL可能原来已经包含Order by ...,而且点击另一个Title时又要另外排序,目的是想作到象资源管理器那样随心所欲。

procedure TFHkdata.SortQuery(Column:TColumn); var

SqlStr,myFieldName,TempStr: string; OrderPos: integer; SavedParams: TParams; begin

if not (Column.Field.FieldKind in [fkData,fkLookup]) then exit; if Column.Field.FieldKind =fkData then

myFieldName := UpperCase(Column.Field.FieldName) else

myFieldName := UpperCase(Column.Field.KeyFields); while Pos(myFieldName,';')<>0 do myFieldName := copy(myFieldName,1,Pos(myFieldName,';')-1)+ ',' copy(myFieldName,Pos(myFieldName,';')+1,100);

with TQuery(TDBGrid(Column.Grid).DataSource.DataSet) do begin

SqlStr := UpperCase(Sql.Text);

// if pos(myFieldName,SqlStr)=0 then exit; if ParamCount>0 then begin

SavedParams := TParams.Create; SavedParams.Assign(Params); end;

OrderPos := pos('ORDER',SqlStr);

if (OrderPos=0) or (pos(myFieldName,copy(SqlStr,OrderPos,100))=0) then TempStr := ' Order By ' + myFieldName + ' Asc' else if pos('ASC',SqlStr)=0 then

TempStr := ' Order By ' + myFieldName + ' Asc' else

TempStr := ' Order By ' + myFieldName + ' Desc';

if OrderPos<>0 then SqlStr := Copy(SqlStr,1,OrderPos-1); SqlStr := SqlStr + TempStr; Active := False; Sql.Clear;

Sql.Text := SqlStr; if ParamCount>0 then

+ begin

Params.AssignValues(SavedParams); SavedParams.Free; end; Prepare; Open; end; end;

2003-11-13 11:13:57 去掉DbGrid的自动添加功能 关键词:DbGrid

移动到最后一条记录时再按一下“下”就会追加一条记录,如果去掉这项功能 procedure TForm1.DataSource1Change(Sender: TObject; Field: TField); begin

if TDataSource(Sender).DataSet.Eof then TDataSource(Sender).DataSet.Cancel; end;

2003-11-16 12:05:46 DBGrid不支持鼠标的上下移动的解决代码(感谢 wangxian11 提供)自己捕捉WM_MOUSEWHEEL消息处理 private

OldGridWnd : TWndMethod;

procedure NewGridWnd (var Message : TMessage); public

procedure TForm1.NewGridWnd(var Message: TMessage); var

IsNeg : Boolean; begin

if Message.Msg = WM_MOUSEWHEEL then begin

IsNeg := Short(Message.WParamHi) < 0; if IsNeg then

DBGrid1.DataSource.DataSet.MoveBy(1) else

DBGrid1.DataSource.DataSet.MoveBy(-1) end else

OldGridWnd(Message); end;

procedure TForm1.FormCreate(Sender: TObject); begin

OldGridWnd := DBGrid1.WindowProc ; DBGrid1.WindowProc := NewGridWnd; end;

2003-11-17 14:46:56 dbgrid中移动焦点到指定的行和列 dbgrid是从TCustomGrid继承下来的,它有col与row属性,只不过是protected的,不能直接访问,要处理一下,可以这样:

TDrawGrid(dbgrid1).row:=row; TDrawGrid(dbgrid1).col:=col; dbgrid1.setfocus; 就可以看到效果了。

1 这个方法是绝对有问题的,它会引起DBGrid内部的混乱,因为DBGrid无法定位当前纪录,如果DBGrid只读也就罢了(只读还是会出向一些问题,比如原本只能单选的纪录现在可以出现多选等等,你可以自己去试试),如果DBGrid可编辑那问题就可大了,因为当前纪录的关系,你更改的数据字段很可能不是你想象中的

2 我常用的解决办法是将上程序改为(随便设置col是安全的,没有一点问题)

Query1.first;

TDrawGrid(dbgrid1).col:=1; dbgrid1.setfocus;

这就让焦点移到第一行第一列当中

2003-11-17 14:55:26 如何使DBGRID网格的颜色随此格中的数据值的变化而变化? 在做界面的时候,有时候为了突出显示数据的各个特性(如过大或者过小等),需要通过改变字体或者颜色,本文就是针对这个情况进行的说明。

如何使DBGRID网格的颜色随此格中的数据值的变化而变化。如<60的网格为红色? Delphi中数据控制构件DBGrid是用来反映数据表的最重要、也是最常用的构件。在应用程序中,如果以彩色的方式来显示DBGrid,将会增加其可视性,尤其在显示一些重要的或者是需要警示的数据时,可以改变这些数据所在的行或列的前景和背景的颜色。

DBGrid属性DefaultDrawing是用来控制Cell(网格)的绘制。若DefaultDrawing的缺省设置为True,意思是Delphi使用DBGrid的缺省绘制方法来制作网格和其中所包含的数据,数据是按与特定列相连接的Tfield构件的DisplayFormat或EditFormat特性来绘制的;若将DBGrid的DefaultDrawing特性设置成False,Delphi就不绘制网格或其内容,必须自行在


EhLib使用说明(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2013管理类联考数学真题分析

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: