EhLib使用说明(8)

2019-08-30 18:03

地是凭借平时积累的一点编程经验,终于找到了开门的匙钥。现将它充公,供大家享用。

1、 数据表的建立

在Delphi的工具菜单中选择Database desktop,在数据库DBDemos下建立一个名为 example.db的数据表。数据表的字段和内容如下: Name Age Wage 张山 25 500 王武 57 1060 李市 30 520 刘牛 28 390

2、创建基于TDBGrid的TColoredDBGrid组件

在Delphi组件菜单中,选择New Component,在弹出对话框中作以下设置:

Ancestor Type = TDBGrid

Class Name = TColoredDBGrid

然后单击OK按钮,Delphi自动完成组件基本框架的定义。增添OnDRawColoredDBGrid事件并

使它出现在Object Inspector的Events中以便在应用程序中设定改变行颜色的条件。重载 DrawCell方法,只能自己绘制单元格。不能通过在OnDrawColumnCell来设置颜色,因为在 OnDrawColumnCell改变单元格的颜色会再次触发OnDrawColumnCell。 下面就是所创建组件的源程序 。

3、建立应用程序进行验证。

在Delphi文件菜单中选择New建立新的应用程序工程Project1和主窗体Form1,设置Form1的

Caption属性为“控制DBGrid行颜色的示例”。在主窗体上添加Data Source、Table、Button和

ColoredDBGrid组件。设置各组件的属性如下:

Table1.Database=’DBDemos’ Table1.Tablename=’example.db’ Datasource1.Dataset=Table1

ColoredDBGrid1.Datasource=DataSource1 Button1.Caption=’退出’

在ColoredDBGrid1的onDRawColoredDBGrid事件中输入下列代码,设定由Wage(工资)来决

定在ColoredDBGrid1各行的颜色。

procedure TForm1.ColoredDBGrid1 DRawColoredDBGrid (Sender: TObject; Field: TField; var Color: TColor; var Font: TFont);

Var

p : Integer; begin

p := Table1.FindField('wage').AsInteger; //取得当前记录的Wage字段的值。

if (p < 500) then begin //程序将根据wage值设置各行的颜色。 Color := clGreen;

Font.Style := [fsItalic]; //不仅可以改变颜色,还可以改变字体 end;

if(p >= 500) And (p < 800) then Color := clRed;

if(p >=800) then begin Color := clMaroon;

Font.Style := [fsBold]; end; end;

//用‘退出’按钮结束程序运行。

procedure TForm1.Button1Click(Sender: TObject); begin Close; end;

2003-11-19 10:16:11 在一个Dbgrid中显示多数据库 在数据库编程中,不必要也不可能将应用程序操作的所有数据库字段放入一个数据库文件中。正确的数据库结构应是:将数据库字段放入多个数据库文件,相关的数据库都包含一个唯一 的关键字段,在多数据库结构里可以建立联系。

例如:要编制一个人事管理程序,为简化演示程序,只建立两个数据库,每个数据库都只建

立两个字段。

个人简介 jianjie.dbf,由人事处维护;工资情况 gongzi.dbf,由财务处维护。 1.数据库的建立

进入DataBase Desktop,建立数据库结构如下:

jianjie.dbf

编号 字段名:bianhao size:4 type:number

姓名 字段名:xingming size:10 type:character

gongzi.dbf

编号 字段名:bianhao size:4 type:number

工资 字段名:gongzi size:4 Dec 2 type:number

注意: 两个数据库的bianhao字段的size、type必须一致。实际上,两数据库文件可以分布

在网络的不同计算机上,为便于演示,分别存为″c: \\test\\jianjie.dbf″和 ″c:\\test \\gongzi.dbf″。

2.应用程序的编制

启动Delphi, 新建一个工程,在窗体中加入Query控件Query1,databasename属性设为c: \\test;

加入DataSource控件datasource1, DataSet属性设为Query1; 加入DbGrid控件 dbgrid1,

DataSource属性设为DataSource1,将Query1.sql属性设为

SELECT DISTINCT A.bianhao,a.xingming, b.gongzi FROM ″jianjie.dbf″ A, ″gongzi.DBF″ b WHERE A.bianhao=b.bianhao

再将Query1.enabled属性设为True, 不用编译, DbGrid1就会显示: bianhao, xingming, gongzi三个字段。如果jianjie.dbf和gongzi.dbf中有记录,则记录会显示出来。因 篇幅所限,此文只介绍了Dbgrid中显示多个数据库内容的一般方法,读者可在此基础上进行完

善,使该方法更好地适应您的需要。

2003-11-19 10:19:40 在 DBGrid 中如何让回车变为光标右移动 在Form.OnKeyPress事件中写如下代码:

if Key = #13 then

if ActiveControl = DBGrid1 then begin

TDBGrid(ActiveControl).SelectedIndex := TDBGrid(ActiveControl).SelectedIndex + 1;

Key := #0; end;

有2点需要注意:

1.当光标达到DBGird最右列的时候,再按回车,光标还会停留在原地。 2.Key := #0

2003-11-19 10:25:07 从 DBGrid 中复制记录procedure TForm1.DBGrid1DblClick(Sender: TObject);

var

x : integer ;

HadToOpen : boolean ; begin

with Sender as TDBGrid do begin

HadToOpen := not tTarget.Active ; if HadToOpen then

tTarget.Active := True ; tTarget.Append ;

for x := 0 to FieldCount - 1 do case Fields[x].DataType of

ftBoolean : tTarget.FieldByName(Fields[x].FieldName).AsBoolean := Fields[x].AsBoolean

ftString : tTarget.FieldByName(Fields[x].FieldName).AsString := Fields[x].AsString

ftFloat : tTarget.FieldByName(Fields[x].FieldName).AsFloat := Fields[x].AsFloat

ftInteger : tTarget.FieldByName(Fields[x].FieldName).AsInteger := Fields[x].AsInteger

ftDate : tTarget.FieldByName(Fields[x].FieldName).AsDateTime := Fields[x].AsDateTime ; end ;

tTarget.Post ; if HadToOpen then

tTarget.Active := False ; end ; end;

2003-11-19 10:27:58 使用 DBGrid 的复选项(请参考如何在DBGrid中能支持多项记录的选择)procedure TForm1.SelectClick(Sender: TObject); var

x: word;

TempBookmark: TBookMark; begin

DBGrid1.Datasource.Dataset.DisableControls; with DBgrid1.SelectedRows do if Count <> 0 then begin

TempBookmark:= DBGrid1.Datasource.Dataset.GetBookmark; for x:= 0 to Count - 1 do begin

if IndexOf(Items[x]) > -1 then begin

DBGrid1.Datasource.Dataset.Bookmark:= Items[x];

showmessage(DBGrid1.Datasource.Dataset.Fields[1].AsString); end; end; end;

DBGrid1.Datasource.Dataset.GotoBookmark(TempBookmark); DBGrid1.Datasource.Dataset.FreeBookmark(TempBookmark); DBGrid1.Datasource.Dataset.EnableControls; end;

2003-11-19 10:32:27 在DBGrid上Drag & Drop(拖放)我们在做程序中发现,如果能够让用户将一个Edit的内容直接拖放到一个DBGrid里,会显得很方便,但在程序编制过程中发现,似乎拖放只能拖放到当前的记录上,那假如要拖放到其他记录又怎么办呢,总不能让用户先选择记录,然后再拖放吧。

后来,通过研究发现,当用鼠标点DBGrid时,DBGrid会自动将记录指针移动到所点击的记录上,这就给了我一个思路,让程序模拟在DBGrid上的一次点击先让光标移动到那条记录上,然后就可以将拖放的数据写入DBgrid里面了。

通过事实证明这个思路是可行的。下面,我就告诉大家我的做法:

1) 首先在Form上放一个DBGrid,并它能够显示记录,(这比较简单,就不用多说了) 2) 在Form上放一个Edit

3) 修改Edit的属性,把DragMode改为dmAutoMatic, 让用户能够拖放

4) 在Dbgrid的DragOver事件中增加如下代码: 让它能够接收 Drag & drop

procedure TForm1.DBGrid1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin

accept:=true; end;

5) 在Dbgrid的DragDrop事件中增加如下代码: 让它能够自动跳到光标所指定的记录上

procedure TForm1.DBGrid1DragDrop(Sender, Source: TObject; X, Y: Integer); begin

if Source<>Edit1 then exit; with Sender as TDbGrid do begin

Perform(wm_LButtonDown,0,MakeLong(x,y)); PerForm(WM_LButtonUp, 0,MakeLong(x,y)); SelectedField.Dataset.edit;

SelectedField.AsString:=Edit1.text; end; end;


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

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

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

马上注册会员

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