delphi的VCL就是面向对象的,因此我无论我们是使用她来开发数据库的管理信息系统,还是网络应用,都可以说是面向对象,虽然可能很多人都像我当初一样,不知道什么时面向对象,如何使用面向对象来编程。在这里我不用理论来说明什么是面积对象,我们将面向对象编程的思想应用到我们的程序开发中,边实践边理解。
首先创建一个窗体,放入 ActionList1控件,命名为 actlstChild,放入ImageList1,命名为actlstChildImageList,再设置一些基本的属性,如:FormStyle为 fsMDIChild,窗体最大化等。此窗体用于将来其它窗体的基窗体。当操作主窗体中的一些功能时需要关联到基窗体上。因此窗体创建的时候要将主窗体的操作事件全部赋值到基窗体。为了让界面和代码分离,我们需要创建一个类(单元文件),专门用于基窗体上的一些操作。新建单元文件untBaseClass.pas,代码如下:
View Code
首先创建一个窗体,放入 ActionList1控件,命名为 actlstChild,放入ImageList1,命名为actlstChildImageList,再设置一些基本的属性,如:FormStyle为 fsMDIChild,窗体最大化等。此窗体用于将来其它窗体的基窗体。当操作主窗体中的一些功能时需要关联到基窗体上。因此窗体创建的时候要将主窗体的操作事件全部赋值到基窗体。为了让界面和代码分离,我们需要创建一个类(单元文件),专门用于基窗体上的一些操作。新建单元文件untBaseClass.pas,代码如下:
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1
unit
untBaseClass;
2
3 interface
4
5 uses
6 Windows,Messages,SysUtils,Variants,Classes,DB,ADODB;
7
8 type
9 TBaseClass = class
10 private
11 public
12 constructor create;
13 destructor Destroy; override ;
14
15 procedure AddData;
16 procedure CancelData;
17 procedure SaveData;
18 procedure DeleteData;
19 procedure ModifyData;
20
21 end ;
22
23 implementation
24
25 uses untDM, untGlobal, untMain, untBase;
26
27 constructor TBaseClass.create;
28 begin
29
30 end ;
31
32 destructor TBaseClass.Destroy;
33 begin
34 inherited ;
35 end ;
36
37 procedure TBaseClass.AddData;
38 begin
39 With frmDM do
40 if Assigned(dsMaster.DataSet) then
41 if not (dsMaster.State in [dsEdit,dsInsert]) then
42 begin
43 try
44 (dsMaster.DataSet as TADOQuery).Append;
45 Except
46 on E:exception do
47 MsgBox( ' 增加错误! ' + # 13 + ' 出错数类名: ' + E.ClassName + # 13 + ' 出错信息: ' + E.Message, 0 );
48 end ;
49 end ;
50
51 end ;
52
53 procedure TBaseClass.CancelData;
54 begin
55 MsgBox( ' 取消操作 ' , 0 )
56 end ;
57
58 procedure TBaseClass.DeleteData;
59 begin
60
61 end ;
62
63 procedure TBaseClass.SaveData;
64 begin
65 With frmDM do
66 if Assigned(dsMaster.DataSet) then
67 if dsMaster.State in [dsEdit,dsInsert] then
68 begin
69 try
70 conDB.BeginTrans;
71 (dsMaster.DataSet as TADOQuery).Post;
72 (dsMaster.DataSet as TADOQuery).UpdateBatch;
73 conDB.CommitTrans;
74 Except
75 conDB.RollbackTrans;
76 Raise exception.Create( ' 增加错误! '
77 end ;
78 end ;
79 end ;
80 procedure TBaseClass.ModifyData;
81 begin
82 MsgBox( ' 修改数据操作 ' , 0 )
83 end ;
84
85 end .
86
87 此时将基窗体的事件关联起来,基窗体的主要功能代码如下:
88 procedure TfrmBase.FormCreate(Sender: TObject);
89 begin
90 objBaseClass: = TBaseClass.create;
91 RelationMainFormEvent;
92 end ;
93
94 procedure TfrmBase.FormClose(Sender: TObject; var Action: TCloseAction);
95 begin
96 Action: = caFree;
97 Self: = nil ;
98 end ;
99
100 procedure TfrmBase.RelationMainFormEvent;
101 begin
102 frmMain.actAdd.OnExecute: = actAdd.OnExecute;
103 frmMain.actAdd.Enabled: = True;
104 frmMain.actModify.OnExecute: = actModify.OnExecute;
105 frmMain.actModify.Enabled: = True;
106 frmMain.actSave.OnExecute: = actSave.OnExecute;
107 frmMain.actSave.Enabled: = true;
108 end ;
109
110 procedure TfrmBase.actAddExecute(Sender: TObject);
111 begin
112 objBaseClass.AddData;
113 end ;
114
115 procedure TfrmBase.actDeleteExecute(Sender: TObject);
116 begin
117 objBaseClass.DeleteData;
118 end ;
119
120 procedure TfrmBase.actSaveExecute(Sender: TObject);
121 begin
122 objBaseClass.SaveData;
123 end ;
124
125 procedure TfrmBase.actCancelExecute(Sender: TObject);
126 begin
127 objBaseClass.CancelData;
128 end ;
129
130 procedure TfrmBase.actModifyExecute(Sender: TObject);
131 begin
132 objBaseClass.ModifyData;
133 end ;
2
3 interface
4
5 uses
6 Windows,Messages,SysUtils,Variants,Classes,DB,ADODB;
7
8 type
9 TBaseClass = class
10 private
11 public
12 constructor create;
13 destructor Destroy; override ;
14
15 procedure AddData;
16 procedure CancelData;
17 procedure SaveData;
18 procedure DeleteData;
19 procedure ModifyData;
20
21 end ;
22
23 implementation
24
25 uses untDM, untGlobal, untMain, untBase;
26
27 constructor TBaseClass.create;
28 begin
29
30 end ;
31
32 destructor TBaseClass.Destroy;
33 begin
34 inherited ;
35 end ;
36
37 procedure TBaseClass.AddData;
38 begin
39 With frmDM do
40 if Assigned(dsMaster.DataSet) then
41 if not (dsMaster.State in [dsEdit,dsInsert]) then
42 begin
43 try
44 (dsMaster.DataSet as TADOQuery).Append;
45 Except
46 on E:exception do
47 MsgBox( ' 增加错误! ' + # 13 + ' 出错数类名: ' + E.ClassName + # 13 + ' 出错信息: ' + E.Message, 0 );
48 end ;
49 end ;
50
51 end ;
52
53 procedure TBaseClass.CancelData;
54 begin
55 MsgBox( ' 取消操作 ' , 0 )
56 end ;
57
58 procedure TBaseClass.DeleteData;
59 begin
60
61 end ;
62
63 procedure TBaseClass.SaveData;
64 begin
65 With frmDM do
66 if Assigned(dsMaster.DataSet) then
67 if dsMaster.State in [dsEdit,dsInsert] then
68 begin
69 try
70 conDB.BeginTrans;
71 (dsMaster.DataSet as TADOQuery).Post;
72 (dsMaster.DataSet as TADOQuery).UpdateBatch;
73 conDB.CommitTrans;
74 Except
75 conDB.RollbackTrans;
76 Raise exception.Create( ' 增加错误! '
77 end ;
78 end ;
79 end ;
80 procedure TBaseClass.ModifyData;
81 begin
82 MsgBox( ' 修改数据操作 ' , 0 )
83 end ;
84
85 end .
86
87 此时将基窗体的事件关联起来,基窗体的主要功能代码如下:
88 procedure TfrmBase.FormCreate(Sender: TObject);
89 begin
90 objBaseClass: = TBaseClass.create;
91 RelationMainFormEvent;
92 end ;
93
94 procedure TfrmBase.FormClose(Sender: TObject; var Action: TCloseAction);
95 begin
96 Action: = caFree;
97 Self: = nil ;
98 end ;
99
100 procedure TfrmBase.RelationMainFormEvent;
101 begin
102 frmMain.actAdd.OnExecute: = actAdd.OnExecute;
103 frmMain.actAdd.Enabled: = True;
104 frmMain.actModify.OnExecute: = actModify.OnExecute;
105 frmMain.actModify.Enabled: = True;
106 frmMain.actSave.OnExecute: = actSave.OnExecute;
107 frmMain.actSave.Enabled: = true;
108 end ;
109
110 procedure TfrmBase.actAddExecute(Sender: TObject);
111 begin
112 objBaseClass.AddData;
113 end ;
114
115 procedure TfrmBase.actDeleteExecute(Sender: TObject);
116 begin
117 objBaseClass.DeleteData;
118 end ;
119
120 procedure TfrmBase.actSaveExecute(Sender: TObject);
121 begin
122 objBaseClass.SaveData;
123 end ;
124
125 procedure TfrmBase.actCancelExecute(Sender: TObject);
126 begin
127 objBaseClass.CancelData;
128 end ;
129
130 procedure TfrmBase.actModifyExecute(Sender: TObject);
131 begin
132 objBaseClass.ModifyData;
133 end ;
基本的功能做完后,下一步就可以创建一个新窗体并继承此窗体。
此文网址:http://www.cnblogs.com/DelphiFan/archive/2008/02/05/1645610.html