第 13章 使用 Delphi开发 SQL
Server应用程序
Delphi的开发环境
Delphi应用程序的开发过程
Delphi数据库应用程序的实现
13.1 Delphi概述
13.2 Delphi应用程序举例分析
13.3 Delphi应用程序的开发
13.4 Delphi应用程序的实现
13.1 Delphi概述
13.1.1 Delphi的特点
Delphi 7是一个针对 Windows平台上的跨平台 ( Windows、
Linux) 快速开发 ( RAD) 环境,完全支持新近出现的 Web服务标准,并且整合了模型驱动的开发方式,同时该套件向开发者提供了对 Microsoft,NET框架初步支持 。
Delphi实际上是一个 Object Pascal的编译器,它提供了一个强大的可视化开发环境,并提供了大量的组件,组件是
Delphi中开发应用程序的基础,是建立应用程序界面所必须的基本元素 。 在 Delphi中组件分成两个大类:可视组件与非可视组件 。
Delphi将所有的组件都封装在对应的类中,如 Edit和
ComboBox组件的对应类名是 TEdit和 TComboBox。 对象是类的实例化,即相当于是某一个类的变量 。 因此 Delphi中的所有组件都具有对象的所有特性:封装,继承性和多态性等 。
Delphi中的对象由三个部分组成:属性 (Property),方法
(Method)和事件 (Event)
第
13
章
D
e
l
p
h
i
13.1.2 Delphi的开发环境启动 Delphi 7主程序,进入图 13-1所示的可视化开发环境 。 它有 以下五部分组成 。第13
章
D
e
l
p
h
i
主界面对象管理窗口对象监视器代码编辑器窗口窗体 (Form)
快捷按钮栏组件面板
13.1.2 Delphi的开发环境
1,Delphi 主界面 (Main Windows)
主界面位于屏幕的上部,包括主菜单 (Main Menu)、
快捷按钮栏 (Speed Bar) 和组件面板 (Component
Panel)。
2,对象管理窗口 (ObjectTreeView)
对象管理窗口中显示出当前窗体的一棵对象树,
用于描述当前窗体中的各个对象及对象之间的层次关系,
第
13
章
D
e
l
p
h
i
13.1.2 Delphi的开发环境
3,对象监视器 (ObjectInspector)
默认情况下,对象监视器位于屏幕左边的下方 。 它的功能是编辑和管理一个对象的各项属性并为组件设置事件响应处理程序 。 对象监视器包含两部分 。
位于顶部的是一个下拉式组合框 (简称对象列表框 ),该组合框中包含当前窗体中的所有对象,用户可以通过组合框右边的下拉按钮,从组合框中选择一个对象作为当前对象 。
顶部下拉式组合框的下面是一个具有 Properties(属性 )和
Events(事件 ) 两个选项卡的多选项卡,分别显示当前对象的属性和事件设置情况 。
Properties页列出了当前被选择对象的设计期属性,如图
13-1所示 。 它分成左右两个部分,左边是属性名,右边是该属性对应的当前值 。
Events页列出了该对象所有可能发生的事件 。 它也分成左右两个部分,左边是事件名,右边是该事件处理程序的名字,
开始时右边都是空的 。
第
13
章
D
e
l
p
h
i
13.1.2 Delphi的开发环境
4,窗体 (Form)
Form窗体是应用程序开发时使用最多的一个工作区域 。 程序中的所有用户界面 ( 即人机接口 ) 均是在这里完成的,因此
Form是程序开发阶段的主要战场 。
从开始菜单启动 Delphi时,系统将自动生成一个名为
ProjectX.dpr的工程项目,并将一个空白窗体 Form1作为该项目的主窗口显示在用户的眼前;而从一个项目文件启动 Delphi
时,则用户看到的是该工程项目中的主窗口 (Main Form)。
窗体是一个可以放置其它组件的一个容器 。 设计时用户将组件面板中的若干个组件,按程序设计的要求,将它们放置在窗体的合适位置 。 也可以使用鼠标将它们拖动到一个合适位置并随心所欲地改变它们的大小 。
一个应用程序可以拥有一个以上的窗体,但只能有一个主窗体,用户可以根据程序执行的需要按一定的显示方式显示应用程序中的不同窗体,以满足实际的需求 。
第
13
章
D
e
l
p
h
i
13.1.2 Delphi的开发环境
5,代码编辑器 (CodeEditor)窗口代码编辑器是编写程序代码的场所,图 13-1中在窗口
Form1后面标有 Unit1.PAS的窗口就是代码编辑器窗口 。
当用户在窗体中添加组件时,Delphi会自动地生成该组件所需的用户界面代码,用户需做的仅仅是在 Delphi生成的代码框架中的适当位置加入完成所需功能的程序代码即可,如程序中所使用到的常量,变量,过程和函数等就在代码编辑窗口中定义和使用 。
可以通过,Toggle Form/Unit”快捷按钮在 Form窗体和该
Form所对应的 Unit单元代码窗口之间进行切换 。
代码编辑器窗口中显示的是当前的单元文件,该文件的名字显示在编辑器的标题栏中,如图中的 Unit1.pas。 当应用程序中含有一个以上的窗体或单元时,可以通过 View Unit快捷按钮将指定的单元文件显示在代码编辑器窗口中,供用户编辑和修改 。
第
13
章
D
e
l
p
h
i
13.2 Delphi应用程序举例分析
13.2.1 功能总体设计为了实现学校教务管理系统,需要实现以下主要功能:
l 基础信息的数据维护:包括系信息,专业信息,班级信息,学生信息,教师信息,课程类别和课程信息的添加,
修改和删除工作 。
l 根据每个专业的教学计划,将每个专业在不同学期的课程计划添加到专业课程设置信息表中 。
l 根据每个专业的教学计划,制定每个学期每个班级的课程表 。
l 根据课程计划,输入学生每个学期每门课程的成绩 。
l 允许根据班级或学生个人查询每个学期的成绩,根据班级统计每个班每学期的成绩排名,并实现以上数据的报表输出 。
l 用户密码的维护 。
第
13
章
D
e
l
p
h
i
13.2.2 功能模块的设计第
13
章
D
e
l
p
h
i
学校教务管理系统用户登录模块 数据模块学校教务管理系统主模块专业信息维护模块课程信息维护模块专业计划维护模块学生成绩维护模块学生成绩单模块成绩查询统计模块用户密码维护模块系信息维护模块教师信息维护模块学生信息维护模块班级信息维护模块课程类别维护模块
13.2.2 功能模块的设计第
13
章
D
e
l
p
h
i
图 13-3
图 13-4
图 13-5
13.3 Delphi应用程序的开发第
13
章
D
e
l
p
h
i
13.3.1 Delphi应用程序的组成
Delphi使用工程来管理应用程序中的各种文件 。
Delphi的应用程序由工程文件,窗体文件及对应的单元文件,选项配置文件和资源文件等组成 。 应用程序创建后,这些文件就已经存在指定的目录中 。
Delphi应用程序中的文件有以下几种:
1,工程文件 (DelphiProject File)
工程文件是一个特殊的单元文件,由 Delphi统一管理,一般读者不必关心,但对于需要深入学习
Delphi的读者,工程文件是相当重要的,工程文件的扩展名为,dpr。 工程文件用来初始化系统环境,建立应用程序主窗口和实例化其它窗口 。
第
13
章
D
e
l
p
h
i
13.3 Delphi应用程序的开发第
13
章
D
e
l
p
h
i
2,单元文件 (UnitFile)
工程文件中的代码仅仅是针对应用程序的,因此该文件往往很短,而程序中极大多数的功能均是在其它单元文件中实现的,在工程文件中只要引用这些单元文件即可,这样可以将一个大的应用程序分解成若干个模块 (即单元 ),再由工程文件将这些模块组合在一起而成为一个整体 。 这种模块化的设计使程序更为清晰且易于今后的维护 。
单 元 文 件 由 单 元 文 件 首 部,接 口 部 分
(interface),实现部分 (implementation),可选的初始化部分 (Initialization),结束部分 (finalization)
和 End.共同组成 。
13.3 Delphi应用程序的开发第
13
章
D
e
l
p
h
i
3,窗体文件 (FormFile)
窗体文件存储有关该窗体中对象的信息,它是一个二进制文件,窗体文件的扩展名为,,dfm” 。 每个窗体文件都有一个与之相对应的单元文件,如有一个
UnitStudent.dfm 窗体文件,就 存 在 一 个 名 为
UnitStudent.pas的单元文件 。
为方便用户,Delphi中提供了允许以文本格式观察窗体文件的功能 。 用鼠标右击窗体的空白位置,在弹出的快捷菜单中选择,View As Text” 命令,系统将显示所在窗体的窗体文件内容,用户可以在该界面上修改窗体上各个对象的有关设置 。 再用鼠标右击窗体文件的文本区域,在弹出的快捷菜单中选择,View
As Form” 命令,又切换到 Form状态 。
13.3 Delphi应用程序的开发第
13
章
D
e
l
p
h
i
4,资源文件 (ResourceFile)
该文件由 Delphi在创建应用程序时自动建立,用于存放与应用程序有关的主题 (Title),应用程序图标和版本等信息 。
资源文件的基本文件名与应用程序的工程相同,扩展名为,,
res”,是一个二进制文件 。
5,工程选项文件 (DelphiOptions File)
该文件由 Delphi在创建应用程序时自动建立,用于存放与应用程序有关的工程选项等信息 。 工程选项文件的基本文件名与应用程序的工程相同,扩展名为,,dof”,是一个文本文件 。
6,编译指令配置文件该文件由 Delphi在创建应用程序时自动建立,用于存放与应用程序有关的编译指令的设置信息 。 编译指令配置文件的基本文件名与应用程序的工程相同,扩展名为,,cfg”,是一个文本文件 。
13.3 Delphi应用程序的开发第
13
章
D
e
l
p
h
i
7,备份文件当生成的工程文件,单元文件和窗体文件修改后,系统自动将原文件做一个备份 。 备份文件的基本文件名与原文件相同,
而扩展名改为,,~dpr”,,,~pas” 和,,~dfm” 。
应用程序编译连接后,又会自动生成:
⑴ 程序可执行文件应用程序经过编译连接后最后生成的可执行文件 。
⑵ 单元目标文件每个单元文件经过编译后生成一个对应的单元目标文件,
该单元目标文件被链接到最后生成的可执行文件中 。 单元目标文件的扩展名为,,dcu” 。
⑶ 动态连接库文件当用户指定要将该应用程序生成动态连接库时,那么就生成该文件 。 动态连接库文件的扩展名为,,dll” 。
13.3 Delphi应用程序的开发第
13
章
D
e
l
p
h
i
7,备份文件当生成的工程文件,单元文件和窗体文件修改后,系统自动将原文件做一个备份 。 备份文件的基本文件名与原文件相同,
而扩展名改为,,~dpr”,,,~pas” 和,,~dfm” 。
应用程序编译连接后,又会自动生成:
⑴ 程序可执行文件应用程序经过编译连接后最后生成的可执行文件 。
⑵ 单元目标文件每个单元文件经过编译后生成一个对应的单元目标文件,
该单元目标文件被链接到最后生成的可执行文件中 。 单元目标文件的扩展名为,,dcu” 。
⑶ 动态连接库文件当用户指定要将该应用程序生成动态连接库时,那么就生成该文件 。 动态连接库文件的扩展名为,,dll” 。
13.3.2 工程管理第
13
章
D
e
l
p
h
i
1,使用工程管理器 (ProjectManager)
一般一个工程中包含若干个窗体及单元文件,为了有效地管理工程中的各种不同文件,可以使用
Delphi提供的工程管理器来管理。
2,工程选项设置
Delphi为每个工程创建了一个工程选项文件,用于保存与该工程相关的参数 。 工程文件的基本文件名与工程名相同,扩展名为,,dof” 。
可以利用,Project Options” 工程选项对话框修改工程中的选项,以符合应用程序的需要 。
13.3.3 Delphi应用程序的开发过程第
13
章
D
e
l
p
h
i
Delphi应用程序的开发过程一般分为以下几个步骤:
1.创建新的应用程序当用户启动 Delphi后,系统就自动创建了一个新的应用程序,它只有一个空白的 Form1窗体 。 用户可以直接在该空白的窗体中开始一个应用程序设计之旅,也可以执行主菜单的
,New”→“Application” 命令来建立一个新的工程 。
2,向应用程序添加窗体
Windows应用程序是由若干个窗体组成的 。 一个应用程序可以根据需要拥有多个窗体,当多于 1个窗体时,就需为应用程序添加窗体 。
单击快捷按钮,New Form”,可以快速地为当前应用程序添加一个新的空白窗体 。
3,设计窗体窗体创建完成后,就需要根据程序的设计要求向窗体中加入需要的组件 。
13.3.3 Delphi应用程序的开发过程第
13
章
D
e
l
p
h
i
4.设置对象属性通过对象属性的修改可以改变该对象的显示特征 。 属性的设置既可以在设计阶段进行,也可以通过语句的方式在程序运行期间根据需要进行设置 。
5,为对象编写事件处理程序对象的属性设置完成后,还需要为对象编写事件处理程序 。 所谓事件处理程序,就是指程序运行时当用户在该对象上发生了该事件后,程序所要完成的处理动作 。
实际编程时,不是每个对象都需要编写事件处理程序的,
只要根据程序设计的要求对指定的对象编写事件处理程序即可 。
6,保存文件当应用程序建立完成后,要及时将应用程序中的文件存盘 。
7,编译与执行程序先执行菜单中的,Project”→,Build 工程文件名,来编译和连接应用程序,然后再调试和运行程序 。
13.4 Delphi应用程序的实现第
13
章
D
e
l
p
h
i
13.4.1 使用到的组件学校教务管理系统中,使用了组件面板中,Standard”
页的 Label,Edit和 CheckBox组件,,Additional” 页中的
SpeedButton,BitBtn组件,,BDE” 页中的 Database,Table、
Query,UpdateSQL组件,,Data Controls” 页中的 DBEdit、
DBComboBox,DBLookupComboBox,DBText,DBGrid 和
DBNavigator组件,,Data Access” 页中的 DataSource组件和,Win32” 页中的 DateTimePicker组件 。
13.4.2 创建新的应用程序执行主菜单的,New”→“Application” 命令,创建一个新的工程 。 工程中自动创建一个名为,Form1” 的空白窗体,
工程名自动命名为,Project1” 。
13.4.3 数据模块的设计第
13
章
D
e
l
p
h
i
为使程序中的各个窗体能使用同一个 Database组件连接到数据库,使用同一个 Table,Query访问同一个数据表中的数据,避免每个窗体使用不同访问组件访问同一个数据表,本程序中使用了 Delphi提供的数据模块功能 。
1) 执行主菜单的,New”→“DataModule” 命令,Delphi
在当前应用程序中添加一个空白的数据模块 。
2) 向数据模块窗体中放置一个 Database组件,两个
DataSource组件,一个 Table组件,一个 Query组件和一个
UpdateSQL组件,如图 13-4所示 。
3) Database组件用于连接数据库 。 单击 Database组件,设置数据库组件的所需属性 。 将 Name属性修改为 DatabaseEdu;
双击 Database组件,系统出现如图 13-13所示的配置连接数据库参数对话框 。
13.4.3 数据模块的设计第
13
章
D
e
l
p
h
i
4) 在,Name” 输入框中指定一个数据库名,应用程序中的其它数据组件通过该数据库名连接到指定的数据库,这里输入
Edu。
5) 下拉,Alias Name” 列表框,从中选择一个已创建的
ODBC数据源名,这里选择在第 12章中创建的 EduDSN。
6) 单击,Defaults” 按钮,Delphi将根据,Alias Name”
列表框中指定的 ODBC数据源名自动创建连接数据库的初始参数表,并将该参数表显示在,Parameter Overrides” 列表框中 。,Parameter Overrides” 列表框中的每一行是一个连接参数,在,PASSWORD=” 的后面加上 edu,用于设置连接密码,
,USER NAME=” 的后面加上 Useredu,用于设置连接用户名,
其它参数取默认值 。
7) 在,Options” 栏中,去掉,Login Prompt” 复选框中的选中标记 。
8) 单击,OK” 按钮,保存 Database组件的连接参数 。
13.4.3 数据模块的设计第
13
章
D
e
l
p
h
i
9) 在对象监视器中将 Database组件的 Connected属性设置为 True,验证连接参数的正确性 。
10) 其它组件的设置请参见表 13-1所示 。
对象 属性名 属性值
TDataModule Name DM_Data
TTable Name TableClass
DatabaseName Edu
TableName Class
TDataSource Name DataSourceClass
DataSet TableClass
TUpdateSQL Name UpdateSQL1
TQuery Name QueryStudent
DatabaseName Edu
SQL SELECT * FROM Student
UpdateObject UpdateSQL1
RequestLive True
CachedUpdates False
TDataSource Name DataSourceStudent
DataSet QueryStudent
13.4.3 数据模块的设计第
13
章
D
e
l
p
h
i
11) 双击 UpdateSQL1,系统出现如图 13-14所示的,Update
SQL editor” 设置窗口 。
12) 在,Options” 选项页的,Table Name” 中是关联的数据表名;,Key Fields” 列表框中选中该表的关键字字段,
Student表的主关键字字段是 StudentID;,Update Fields”
列表框中选择需更新的字段,这里选中所有的字段,效果如图
13-14所示 。
13) 单击,Generate SQL” 按钮,由 Delphi根据前面步骤中设置的参数自动生成对应的数据表插入,更新和删除语句 。
14) 单击,SQL” 选项卡,出现图 13-15所示的,Update
SQL editor” 设置窗口的,SQL” 选项页 。
图 13-14 图 13-15
13.4.3 数据模块的设计第
13
章
D
e
l
p
h
i
15) 单击,OK” 按钮,关闭,Update SQL Editor” 设置窗口 。
16) 设置 DM_Data数据模块的相关事件 。 在对象监视器中选中 DM_Data,
单击,Events” 选项卡,切换到事件页,双击,OnCreate” 事件名后的空白输入栏,Delphi将自动在当前单元中生成,OnCreate” 事件所对应的过程定义框架,并将光标置入该过程代码的前面,在此,输入:
DatabaseEdu.Connected,= True; // 运行时,先连接数据源用于在程序运行时,由系统自动连接数据库 。 同样,双击,OnDestroy”
事件名后的空白输入栏,Delphi将自动在当前单元中生成,OnDestroy”
事件所对应的过程定义框架,并将光标置入该过程代码的前面,在
OnDestroy事件中,输入:
DatabaseEdu.Connected,= False; // 断开与数据源的连接用于程序运行结束时,由系统自动断开与数据库的连接 。
17) 单击快捷按钮,”,将数据模块的单元文件以,UnitDM.pas”存盘 。
至此数据模块设计完成,按以上参数设置后的数据模块窗体如图 13-4所示 。
13.4.4 学生信息管理窗体的设计第
13
章
D
e
l
p
h
i
设置了数据模块后,该应用程序就可以使用数据模块与相关数据库进行连接,在其它的窗体上就可以使用数据模块上的相关组件连接数据库,操作数据库中的相关数据 。
1) 单击快捷按钮组中的,” 按钮,在出现的
,View Form” 对话框中选中,Form1” 窗体,单击
,OK” 按钮,出现,Form1” 空白窗体 。 或单击,”
按钮,在当前应用程序中添加一个空白的 Form窗体 。
2) 向窗体上加入五个 SpeedButton按钮,三个
Label标签,四个 DBEdit,一个 DBComboBox,一个
DBLookupComboBox,一个 DateTimePicker,一个
DBText,一个 DBGrid和一个 DBNavigator组件 。 在窗体的适当位置放置这些组件,如图 13-10所示 。
13.4.4 学生信息管理窗体的设计第
13
章
D
e
l
p
h
i
3) 为了引用数据模块上的对象,在学生信息管理窗体对应单元文件的 implementation关键字后的单元引用部分输入
uses UnitDM;表示学生信息管理窗体要引用 UnitDM单元 ( 即数据模块 ) 中定义的对象 。
4) 按表 13-2设置相关参数 。 设置各个属性后的学生信息管理窗体如图 13-11所示 。
5) 设置窗体各对象所需事件的代码 。 选中 FormStudent窗体,单击,Events” 选项卡,切换到事件页,双击,OnShow”
事件名后的空白输入栏,Delphi将自动在当前单元中生成
,OnShow” 事件所对应的过程定义框架,并将光标置入该过程代码的前面,在此,按 书上 代码输入 FormStudent的 OnShow
事件,
6) 双击,OnClose” 事件名后的空白输入栏,按书上 代码编写 FormStudent的 OnClose事件 。
13.4.4 学生信息管理窗体的设计第
13
章
D
e
l
p
h
i
7) 因数据显示组件中没有对应的日期组件,因此需要在数据表的记录指针移动后,将学生的出生年月送入
DateTimeBirthday 对 象 中 显 示 。 这 里 自 定 义 了 一 个
QueryStudent对象的 AfterScroll事件,用于实现以上任务 。
8) 同样,系统要将用户在 DateTimeBirthday对象中对学生出生年月的修改保存到相应的数据表中 。 这里自定义了一个
QueryStudent对象的 BeforePost事件,用于实现以上任务 。
9 ) 选中 DateTimeBirthday 对象,按 书中 代 码 编 写
DateTimeBirthday的 OnChange事件,
10 ) 双击 SpeedButton1 对象,按 书中 代 码 编 写
SpeedButton1的 OnClick事件 。
11 ) SpeedButton2,SpeedButton3,SpeedButton4 和
SpeedButton5对象共享 SpeedButton1的,OnClick” 事件 。
12) 单击快捷按钮,”,将学生信息管理的单元文件以
,UnitStudent.pas”存盘 。
13.4.5 查询窗体的设计第
13
章
D
e
l
p
h
i
用户在学生信息管理窗体上单击,学号,,,姓名,,
,出生年月,,,所在班级,和,联系电话,按钮,将调用查询窗体,用于输入查询值,实现按对应字段进行相应的查询,
并将查询结果显示在学生信息管理窗体上 。
1) 在当前应用程序中添加一个空白的 Form窗体 。
2) 向窗体中加入一个 Label,一个 Edit,两个 BitBtn和一个 CheckBox组件 。 并按表 13-3设置各个组件的属性值 。
3) 设置属性后的查询窗体如图 13-5所示 。
4) 单击,保存,按钮,将查询窗体的单元文件以
,UnitSearch.pas”存盘 。 至此,学生查询窗体设计完成 。
13.4.6 编译、调试和执行程序第
13
章
D
e
l
p
h
i
执行主菜单的,File”→“Save Project As” 命令,将应用程序以,Pro13_1.dpr” 文件名存盘 。
执行主菜单的,Project”→“Build Pro13_1” 命令,
对应用程序进行编译和连接,生成,Pro13_1.exe” 可执行文件 。 编译应用程序时,系统显示如 下 图所示的要求添加引用信息框 。
单击,Yes” 按钮,Delphi将自动在学生信息管理窗体所对应的单元文件中添加对查询窗体的引用 。
单击,运行,按钮运行程序,出现如图 13-3所示的学生信息管理界面 。
Server应用程序
Delphi的开发环境
Delphi应用程序的开发过程
Delphi数据库应用程序的实现
13.1 Delphi概述
13.2 Delphi应用程序举例分析
13.3 Delphi应用程序的开发
13.4 Delphi应用程序的实现
13.1 Delphi概述
13.1.1 Delphi的特点
Delphi 7是一个针对 Windows平台上的跨平台 ( Windows、
Linux) 快速开发 ( RAD) 环境,完全支持新近出现的 Web服务标准,并且整合了模型驱动的开发方式,同时该套件向开发者提供了对 Microsoft,NET框架初步支持 。
Delphi实际上是一个 Object Pascal的编译器,它提供了一个强大的可视化开发环境,并提供了大量的组件,组件是
Delphi中开发应用程序的基础,是建立应用程序界面所必须的基本元素 。 在 Delphi中组件分成两个大类:可视组件与非可视组件 。
Delphi将所有的组件都封装在对应的类中,如 Edit和
ComboBox组件的对应类名是 TEdit和 TComboBox。 对象是类的实例化,即相当于是某一个类的变量 。 因此 Delphi中的所有组件都具有对象的所有特性:封装,继承性和多态性等 。
Delphi中的对象由三个部分组成:属性 (Property),方法
(Method)和事件 (Event)
第
13
章
D
e
l
p
h
i
13.1.2 Delphi的开发环境启动 Delphi 7主程序,进入图 13-1所示的可视化开发环境 。 它有 以下五部分组成 。第13
章
D
e
l
p
h
i
主界面对象管理窗口对象监视器代码编辑器窗口窗体 (Form)
快捷按钮栏组件面板
13.1.2 Delphi的开发环境
1,Delphi 主界面 (Main Windows)
主界面位于屏幕的上部,包括主菜单 (Main Menu)、
快捷按钮栏 (Speed Bar) 和组件面板 (Component
Panel)。
2,对象管理窗口 (ObjectTreeView)
对象管理窗口中显示出当前窗体的一棵对象树,
用于描述当前窗体中的各个对象及对象之间的层次关系,
第
13
章
D
e
l
p
h
i
13.1.2 Delphi的开发环境
3,对象监视器 (ObjectInspector)
默认情况下,对象监视器位于屏幕左边的下方 。 它的功能是编辑和管理一个对象的各项属性并为组件设置事件响应处理程序 。 对象监视器包含两部分 。
位于顶部的是一个下拉式组合框 (简称对象列表框 ),该组合框中包含当前窗体中的所有对象,用户可以通过组合框右边的下拉按钮,从组合框中选择一个对象作为当前对象 。
顶部下拉式组合框的下面是一个具有 Properties(属性 )和
Events(事件 ) 两个选项卡的多选项卡,分别显示当前对象的属性和事件设置情况 。
Properties页列出了当前被选择对象的设计期属性,如图
13-1所示 。 它分成左右两个部分,左边是属性名,右边是该属性对应的当前值 。
Events页列出了该对象所有可能发生的事件 。 它也分成左右两个部分,左边是事件名,右边是该事件处理程序的名字,
开始时右边都是空的 。
第
13
章
D
e
l
p
h
i
13.1.2 Delphi的开发环境
4,窗体 (Form)
Form窗体是应用程序开发时使用最多的一个工作区域 。 程序中的所有用户界面 ( 即人机接口 ) 均是在这里完成的,因此
Form是程序开发阶段的主要战场 。
从开始菜单启动 Delphi时,系统将自动生成一个名为
ProjectX.dpr的工程项目,并将一个空白窗体 Form1作为该项目的主窗口显示在用户的眼前;而从一个项目文件启动 Delphi
时,则用户看到的是该工程项目中的主窗口 (Main Form)。
窗体是一个可以放置其它组件的一个容器 。 设计时用户将组件面板中的若干个组件,按程序设计的要求,将它们放置在窗体的合适位置 。 也可以使用鼠标将它们拖动到一个合适位置并随心所欲地改变它们的大小 。
一个应用程序可以拥有一个以上的窗体,但只能有一个主窗体,用户可以根据程序执行的需要按一定的显示方式显示应用程序中的不同窗体,以满足实际的需求 。
第
13
章
D
e
l
p
h
i
13.1.2 Delphi的开发环境
5,代码编辑器 (CodeEditor)窗口代码编辑器是编写程序代码的场所,图 13-1中在窗口
Form1后面标有 Unit1.PAS的窗口就是代码编辑器窗口 。
当用户在窗体中添加组件时,Delphi会自动地生成该组件所需的用户界面代码,用户需做的仅仅是在 Delphi生成的代码框架中的适当位置加入完成所需功能的程序代码即可,如程序中所使用到的常量,变量,过程和函数等就在代码编辑窗口中定义和使用 。
可以通过,Toggle Form/Unit”快捷按钮在 Form窗体和该
Form所对应的 Unit单元代码窗口之间进行切换 。
代码编辑器窗口中显示的是当前的单元文件,该文件的名字显示在编辑器的标题栏中,如图中的 Unit1.pas。 当应用程序中含有一个以上的窗体或单元时,可以通过 View Unit快捷按钮将指定的单元文件显示在代码编辑器窗口中,供用户编辑和修改 。
第
13
章
D
e
l
p
h
i
13.2 Delphi应用程序举例分析
13.2.1 功能总体设计为了实现学校教务管理系统,需要实现以下主要功能:
l 基础信息的数据维护:包括系信息,专业信息,班级信息,学生信息,教师信息,课程类别和课程信息的添加,
修改和删除工作 。
l 根据每个专业的教学计划,将每个专业在不同学期的课程计划添加到专业课程设置信息表中 。
l 根据每个专业的教学计划,制定每个学期每个班级的课程表 。
l 根据课程计划,输入学生每个学期每门课程的成绩 。
l 允许根据班级或学生个人查询每个学期的成绩,根据班级统计每个班每学期的成绩排名,并实现以上数据的报表输出 。
l 用户密码的维护 。
第
13
章
D
e
l
p
h
i
13.2.2 功能模块的设计第
13
章
D
e
l
p
h
i
学校教务管理系统用户登录模块 数据模块学校教务管理系统主模块专业信息维护模块课程信息维护模块专业计划维护模块学生成绩维护模块学生成绩单模块成绩查询统计模块用户密码维护模块系信息维护模块教师信息维护模块学生信息维护模块班级信息维护模块课程类别维护模块
13.2.2 功能模块的设计第
13
章
D
e
l
p
h
i
图 13-3
图 13-4
图 13-5
13.3 Delphi应用程序的开发第
13
章
D
e
l
p
h
i
13.3.1 Delphi应用程序的组成
Delphi使用工程来管理应用程序中的各种文件 。
Delphi的应用程序由工程文件,窗体文件及对应的单元文件,选项配置文件和资源文件等组成 。 应用程序创建后,这些文件就已经存在指定的目录中 。
Delphi应用程序中的文件有以下几种:
1,工程文件 (DelphiProject File)
工程文件是一个特殊的单元文件,由 Delphi统一管理,一般读者不必关心,但对于需要深入学习
Delphi的读者,工程文件是相当重要的,工程文件的扩展名为,dpr。 工程文件用来初始化系统环境,建立应用程序主窗口和实例化其它窗口 。
第
13
章
D
e
l
p
h
i
13.3 Delphi应用程序的开发第
13
章
D
e
l
p
h
i
2,单元文件 (UnitFile)
工程文件中的代码仅仅是针对应用程序的,因此该文件往往很短,而程序中极大多数的功能均是在其它单元文件中实现的,在工程文件中只要引用这些单元文件即可,这样可以将一个大的应用程序分解成若干个模块 (即单元 ),再由工程文件将这些模块组合在一起而成为一个整体 。 这种模块化的设计使程序更为清晰且易于今后的维护 。
单 元 文 件 由 单 元 文 件 首 部,接 口 部 分
(interface),实现部分 (implementation),可选的初始化部分 (Initialization),结束部分 (finalization)
和 End.共同组成 。
13.3 Delphi应用程序的开发第
13
章
D
e
l
p
h
i
3,窗体文件 (FormFile)
窗体文件存储有关该窗体中对象的信息,它是一个二进制文件,窗体文件的扩展名为,,dfm” 。 每个窗体文件都有一个与之相对应的单元文件,如有一个
UnitStudent.dfm 窗体文件,就 存 在 一 个 名 为
UnitStudent.pas的单元文件 。
为方便用户,Delphi中提供了允许以文本格式观察窗体文件的功能 。 用鼠标右击窗体的空白位置,在弹出的快捷菜单中选择,View As Text” 命令,系统将显示所在窗体的窗体文件内容,用户可以在该界面上修改窗体上各个对象的有关设置 。 再用鼠标右击窗体文件的文本区域,在弹出的快捷菜单中选择,View
As Form” 命令,又切换到 Form状态 。
13.3 Delphi应用程序的开发第
13
章
D
e
l
p
h
i
4,资源文件 (ResourceFile)
该文件由 Delphi在创建应用程序时自动建立,用于存放与应用程序有关的主题 (Title),应用程序图标和版本等信息 。
资源文件的基本文件名与应用程序的工程相同,扩展名为,,
res”,是一个二进制文件 。
5,工程选项文件 (DelphiOptions File)
该文件由 Delphi在创建应用程序时自动建立,用于存放与应用程序有关的工程选项等信息 。 工程选项文件的基本文件名与应用程序的工程相同,扩展名为,,dof”,是一个文本文件 。
6,编译指令配置文件该文件由 Delphi在创建应用程序时自动建立,用于存放与应用程序有关的编译指令的设置信息 。 编译指令配置文件的基本文件名与应用程序的工程相同,扩展名为,,cfg”,是一个文本文件 。
13.3 Delphi应用程序的开发第
13
章
D
e
l
p
h
i
7,备份文件当生成的工程文件,单元文件和窗体文件修改后,系统自动将原文件做一个备份 。 备份文件的基本文件名与原文件相同,
而扩展名改为,,~dpr”,,,~pas” 和,,~dfm” 。
应用程序编译连接后,又会自动生成:
⑴ 程序可执行文件应用程序经过编译连接后最后生成的可执行文件 。
⑵ 单元目标文件每个单元文件经过编译后生成一个对应的单元目标文件,
该单元目标文件被链接到最后生成的可执行文件中 。 单元目标文件的扩展名为,,dcu” 。
⑶ 动态连接库文件当用户指定要将该应用程序生成动态连接库时,那么就生成该文件 。 动态连接库文件的扩展名为,,dll” 。
13.3 Delphi应用程序的开发第
13
章
D
e
l
p
h
i
7,备份文件当生成的工程文件,单元文件和窗体文件修改后,系统自动将原文件做一个备份 。 备份文件的基本文件名与原文件相同,
而扩展名改为,,~dpr”,,,~pas” 和,,~dfm” 。
应用程序编译连接后,又会自动生成:
⑴ 程序可执行文件应用程序经过编译连接后最后生成的可执行文件 。
⑵ 单元目标文件每个单元文件经过编译后生成一个对应的单元目标文件,
该单元目标文件被链接到最后生成的可执行文件中 。 单元目标文件的扩展名为,,dcu” 。
⑶ 动态连接库文件当用户指定要将该应用程序生成动态连接库时,那么就生成该文件 。 动态连接库文件的扩展名为,,dll” 。
13.3.2 工程管理第
13
章
D
e
l
p
h
i
1,使用工程管理器 (ProjectManager)
一般一个工程中包含若干个窗体及单元文件,为了有效地管理工程中的各种不同文件,可以使用
Delphi提供的工程管理器来管理。
2,工程选项设置
Delphi为每个工程创建了一个工程选项文件,用于保存与该工程相关的参数 。 工程文件的基本文件名与工程名相同,扩展名为,,dof” 。
可以利用,Project Options” 工程选项对话框修改工程中的选项,以符合应用程序的需要 。
13.3.3 Delphi应用程序的开发过程第
13
章
D
e
l
p
h
i
Delphi应用程序的开发过程一般分为以下几个步骤:
1.创建新的应用程序当用户启动 Delphi后,系统就自动创建了一个新的应用程序,它只有一个空白的 Form1窗体 。 用户可以直接在该空白的窗体中开始一个应用程序设计之旅,也可以执行主菜单的
,New”→“Application” 命令来建立一个新的工程 。
2,向应用程序添加窗体
Windows应用程序是由若干个窗体组成的 。 一个应用程序可以根据需要拥有多个窗体,当多于 1个窗体时,就需为应用程序添加窗体 。
单击快捷按钮,New Form”,可以快速地为当前应用程序添加一个新的空白窗体 。
3,设计窗体窗体创建完成后,就需要根据程序的设计要求向窗体中加入需要的组件 。
13.3.3 Delphi应用程序的开发过程第
13
章
D
e
l
p
h
i
4.设置对象属性通过对象属性的修改可以改变该对象的显示特征 。 属性的设置既可以在设计阶段进行,也可以通过语句的方式在程序运行期间根据需要进行设置 。
5,为对象编写事件处理程序对象的属性设置完成后,还需要为对象编写事件处理程序 。 所谓事件处理程序,就是指程序运行时当用户在该对象上发生了该事件后,程序所要完成的处理动作 。
实际编程时,不是每个对象都需要编写事件处理程序的,
只要根据程序设计的要求对指定的对象编写事件处理程序即可 。
6,保存文件当应用程序建立完成后,要及时将应用程序中的文件存盘 。
7,编译与执行程序先执行菜单中的,Project”→,Build 工程文件名,来编译和连接应用程序,然后再调试和运行程序 。
13.4 Delphi应用程序的实现第
13
章
D
e
l
p
h
i
13.4.1 使用到的组件学校教务管理系统中,使用了组件面板中,Standard”
页的 Label,Edit和 CheckBox组件,,Additional” 页中的
SpeedButton,BitBtn组件,,BDE” 页中的 Database,Table、
Query,UpdateSQL组件,,Data Controls” 页中的 DBEdit、
DBComboBox,DBLookupComboBox,DBText,DBGrid 和
DBNavigator组件,,Data Access” 页中的 DataSource组件和,Win32” 页中的 DateTimePicker组件 。
13.4.2 创建新的应用程序执行主菜单的,New”→“Application” 命令,创建一个新的工程 。 工程中自动创建一个名为,Form1” 的空白窗体,
工程名自动命名为,Project1” 。
13.4.3 数据模块的设计第
13
章
D
e
l
p
h
i
为使程序中的各个窗体能使用同一个 Database组件连接到数据库,使用同一个 Table,Query访问同一个数据表中的数据,避免每个窗体使用不同访问组件访问同一个数据表,本程序中使用了 Delphi提供的数据模块功能 。
1) 执行主菜单的,New”→“DataModule” 命令,Delphi
在当前应用程序中添加一个空白的数据模块 。
2) 向数据模块窗体中放置一个 Database组件,两个
DataSource组件,一个 Table组件,一个 Query组件和一个
UpdateSQL组件,如图 13-4所示 。
3) Database组件用于连接数据库 。 单击 Database组件,设置数据库组件的所需属性 。 将 Name属性修改为 DatabaseEdu;
双击 Database组件,系统出现如图 13-13所示的配置连接数据库参数对话框 。
13.4.3 数据模块的设计第
13
章
D
e
l
p
h
i
4) 在,Name” 输入框中指定一个数据库名,应用程序中的其它数据组件通过该数据库名连接到指定的数据库,这里输入
Edu。
5) 下拉,Alias Name” 列表框,从中选择一个已创建的
ODBC数据源名,这里选择在第 12章中创建的 EduDSN。
6) 单击,Defaults” 按钮,Delphi将根据,Alias Name”
列表框中指定的 ODBC数据源名自动创建连接数据库的初始参数表,并将该参数表显示在,Parameter Overrides” 列表框中 。,Parameter Overrides” 列表框中的每一行是一个连接参数,在,PASSWORD=” 的后面加上 edu,用于设置连接密码,
,USER NAME=” 的后面加上 Useredu,用于设置连接用户名,
其它参数取默认值 。
7) 在,Options” 栏中,去掉,Login Prompt” 复选框中的选中标记 。
8) 单击,OK” 按钮,保存 Database组件的连接参数 。
13.4.3 数据模块的设计第
13
章
D
e
l
p
h
i
9) 在对象监视器中将 Database组件的 Connected属性设置为 True,验证连接参数的正确性 。
10) 其它组件的设置请参见表 13-1所示 。
对象 属性名 属性值
TDataModule Name DM_Data
TTable Name TableClass
DatabaseName Edu
TableName Class
TDataSource Name DataSourceClass
DataSet TableClass
TUpdateSQL Name UpdateSQL1
TQuery Name QueryStudent
DatabaseName Edu
SQL SELECT * FROM Student
UpdateObject UpdateSQL1
RequestLive True
CachedUpdates False
TDataSource Name DataSourceStudent
DataSet QueryStudent
13.4.3 数据模块的设计第
13
章
D
e
l
p
h
i
11) 双击 UpdateSQL1,系统出现如图 13-14所示的,Update
SQL editor” 设置窗口 。
12) 在,Options” 选项页的,Table Name” 中是关联的数据表名;,Key Fields” 列表框中选中该表的关键字字段,
Student表的主关键字字段是 StudentID;,Update Fields”
列表框中选择需更新的字段,这里选中所有的字段,效果如图
13-14所示 。
13) 单击,Generate SQL” 按钮,由 Delphi根据前面步骤中设置的参数自动生成对应的数据表插入,更新和删除语句 。
14) 单击,SQL” 选项卡,出现图 13-15所示的,Update
SQL editor” 设置窗口的,SQL” 选项页 。
图 13-14 图 13-15
13.4.3 数据模块的设计第
13
章
D
e
l
p
h
i
15) 单击,OK” 按钮,关闭,Update SQL Editor” 设置窗口 。
16) 设置 DM_Data数据模块的相关事件 。 在对象监视器中选中 DM_Data,
单击,Events” 选项卡,切换到事件页,双击,OnCreate” 事件名后的空白输入栏,Delphi将自动在当前单元中生成,OnCreate” 事件所对应的过程定义框架,并将光标置入该过程代码的前面,在此,输入:
DatabaseEdu.Connected,= True; // 运行时,先连接数据源用于在程序运行时,由系统自动连接数据库 。 同样,双击,OnDestroy”
事件名后的空白输入栏,Delphi将自动在当前单元中生成,OnDestroy”
事件所对应的过程定义框架,并将光标置入该过程代码的前面,在
OnDestroy事件中,输入:
DatabaseEdu.Connected,= False; // 断开与数据源的连接用于程序运行结束时,由系统自动断开与数据库的连接 。
17) 单击快捷按钮,”,将数据模块的单元文件以,UnitDM.pas”存盘 。
至此数据模块设计完成,按以上参数设置后的数据模块窗体如图 13-4所示 。
13.4.4 学生信息管理窗体的设计第
13
章
D
e
l
p
h
i
设置了数据模块后,该应用程序就可以使用数据模块与相关数据库进行连接,在其它的窗体上就可以使用数据模块上的相关组件连接数据库,操作数据库中的相关数据 。
1) 单击快捷按钮组中的,” 按钮,在出现的
,View Form” 对话框中选中,Form1” 窗体,单击
,OK” 按钮,出现,Form1” 空白窗体 。 或单击,”
按钮,在当前应用程序中添加一个空白的 Form窗体 。
2) 向窗体上加入五个 SpeedButton按钮,三个
Label标签,四个 DBEdit,一个 DBComboBox,一个
DBLookupComboBox,一个 DateTimePicker,一个
DBText,一个 DBGrid和一个 DBNavigator组件 。 在窗体的适当位置放置这些组件,如图 13-10所示 。
13.4.4 学生信息管理窗体的设计第
13
章
D
e
l
p
h
i
3) 为了引用数据模块上的对象,在学生信息管理窗体对应单元文件的 implementation关键字后的单元引用部分输入
uses UnitDM;表示学生信息管理窗体要引用 UnitDM单元 ( 即数据模块 ) 中定义的对象 。
4) 按表 13-2设置相关参数 。 设置各个属性后的学生信息管理窗体如图 13-11所示 。
5) 设置窗体各对象所需事件的代码 。 选中 FormStudent窗体,单击,Events” 选项卡,切换到事件页,双击,OnShow”
事件名后的空白输入栏,Delphi将自动在当前单元中生成
,OnShow” 事件所对应的过程定义框架,并将光标置入该过程代码的前面,在此,按 书上 代码输入 FormStudent的 OnShow
事件,
6) 双击,OnClose” 事件名后的空白输入栏,按书上 代码编写 FormStudent的 OnClose事件 。
13.4.4 学生信息管理窗体的设计第
13
章
D
e
l
p
h
i
7) 因数据显示组件中没有对应的日期组件,因此需要在数据表的记录指针移动后,将学生的出生年月送入
DateTimeBirthday 对 象 中 显 示 。 这 里 自 定 义 了 一 个
QueryStudent对象的 AfterScroll事件,用于实现以上任务 。
8) 同样,系统要将用户在 DateTimeBirthday对象中对学生出生年月的修改保存到相应的数据表中 。 这里自定义了一个
QueryStudent对象的 BeforePost事件,用于实现以上任务 。
9 ) 选中 DateTimeBirthday 对象,按 书中 代 码 编 写
DateTimeBirthday的 OnChange事件,
10 ) 双击 SpeedButton1 对象,按 书中 代 码 编 写
SpeedButton1的 OnClick事件 。
11 ) SpeedButton2,SpeedButton3,SpeedButton4 和
SpeedButton5对象共享 SpeedButton1的,OnClick” 事件 。
12) 单击快捷按钮,”,将学生信息管理的单元文件以
,UnitStudent.pas”存盘 。
13.4.5 查询窗体的设计第
13
章
D
e
l
p
h
i
用户在学生信息管理窗体上单击,学号,,,姓名,,
,出生年月,,,所在班级,和,联系电话,按钮,将调用查询窗体,用于输入查询值,实现按对应字段进行相应的查询,
并将查询结果显示在学生信息管理窗体上 。
1) 在当前应用程序中添加一个空白的 Form窗体 。
2) 向窗体中加入一个 Label,一个 Edit,两个 BitBtn和一个 CheckBox组件 。 并按表 13-3设置各个组件的属性值 。
3) 设置属性后的查询窗体如图 13-5所示 。
4) 单击,保存,按钮,将查询窗体的单元文件以
,UnitSearch.pas”存盘 。 至此,学生查询窗体设计完成 。
13.4.6 编译、调试和执行程序第
13
章
D
e
l
p
h
i
执行主菜单的,File”→“Save Project As” 命令,将应用程序以,Pro13_1.dpr” 文件名存盘 。
执行主菜单的,Project”→“Build Pro13_1” 命令,
对应用程序进行编译和连接,生成,Pro13_1.exe” 可执行文件 。 编译应用程序时,系统显示如 下 图所示的要求添加引用信息框 。
单击,Yes” 按钮,Delphi将自动在学生信息管理窗体所对应的单元文件中添加对查询窗体的引用 。
单击,运行,按钮运行程序,出现如图 13-3所示的学生信息管理界面 。