第一章 Delphi7.0集成开发环境第二章 面向对象基础知识和 Windows程序开发初步第三章 Object Pascal语言基础第四章 常用控件的使用第五章 程序的调试和异常处理第六章 数据库程序开发第七章 项目实例 1-系部图书管理系统第八章 项目实例 2-小区物业管理系统第九章 项目实例 3- Delphi控制 Excel
第十章 项目实例 4- DVD租赁管理系统第一章 Delphi7.0集成开发环境
1.1 Delphi 7.0 概述
1.2 Delphi 7.0 的安装与启动
1.3 Delphi 7.0 的集成开发环境
1.1 Delphi 7.0 概述
强大的可视化编程环境
高效的编辑器
网络通讯方面
数据库方面
丰富的 VCL控件库
Model Maker工具
Rave报表设计器
Delphi编译
1.2 Delphi的安装与启动
1.2.1 软硬件环境要求
1.2.2 Delphi 7的安装
1.2.3 Delphi 7的启动硬件要求:
CPU在 Intel Pentium 233以上内存在 32M
以上 (建议使用 128M以上的内存 )100MB以上的硬盘空间软件要求:
要求安装 Windows 98或更高版本的操作系统
1.2.1 软硬件环境要求
1.2.2 Delphi 7的安装过程启动 Windows 2000,在 CD—ROM驱动器中放入 Delphi 7企业版光盘,使其自行运行安装程序安装初始界面安装类型:
典型安装( Typical),安装用户最常用的部分。
压缩安装( compact),仅仅把运行 Delphi 7所必须的文件安装到用户的硬盘上。
自定义安装( Custom),安装程序以对话框的形式要求程序设计人员按自己的需要选择安装 Delphi 7的构成部分。
安装类型选择
1.2.3 Delphi 7的启动菜单栏工具栏对象树形查看器对象编辑器代码编辑器窗体设计器控件页运行界面单击 Delphi 7的桌面图标或单击 【 开始 】 |【 程序 】 |【 Borland Delphi 7】 |
【 Delphi 7】 命令运行 Delphi 7应用程序,进入集成开发环境。
1.3 Delphi 7的集成开发环境菜单栏
File(文件),新建、打开和保存单元文件和工程;
Edit(编辑),编辑代码和各种控件;
Search(搜索),代码编辑器中代码的查找、替换和定位;
View(视图),打开环境窗口、单元文件、窗体文件;
Project(工程),管理工程文件、编译工程文件和工程设臵;
Run(运行),程序调试;
Component(组件),建立、安装组件和设臵控件页属性;
Database(数据库),提供数据库应用程序的各种工具;
Tools(工具),进行 Delphi编程环境设臵、图标编辑、报表制作等;
Window(窗口),提供不同窗口的切换;
Help(帮助),提供 Delphi的帮助信息。
工具栏打开 保存 打开项目全部保存帮助从项目移走添加到项目新窗体单元文件 /窗体切换查看窗体查看单元文件单步运行暂停运行跟踪运行新建控件页控件分类选项卡 上一类控件一个具体控件:
Button按钮控件下一类控件对象编辑器主要功能:修改窗体及其包含的对象属性;
通过自动代码生成机制使对象响应相应的事件。
对象列表框,对象列表是一个下拉列表框,包含了当前窗体上的所有控件。
属性选项卡 (Properties),或称属性页,列举了当前所选中的控件对象的属性。它有两个部分组成,左侧是控件对象的属性名,右侧为相应属性的取值。
事件选项卡 (Events),或称事件页,设臵控件的事件处理程序。显示出控件对象可以响应的所有事件列表,它有两个部分组成:事件名和事件处理方法。
代码编辑器主要用于编辑程序文件、单元文件和文本文件。
支持代码和对象的剪切、复制和粘贴操作。
编写程序时,注意窗口的标题栏所显示的被编辑的文件名称。
开发环境设臵
1,设臵工具栏
2,查找控件和控件页设臵工程管理可以打开工程管理器 (Project Manager) Delphi 7
的工程管理器通过工程组进行管理,列出了反映各工程之间的联系的树状表,使用户可以很直观的找到各工程直接的联系,方便地将相互联系的工程中共同使用的动态链接库文件与可执行文件组织在一起。
第二章 面向对象基础知识和 Windows
程序开发初步
2.1 面向对象基础知识
2.2 一个简单的 Delphi程序
2.1 面向对象基础知识面向过程思想(结构化程序设计) 面向对象
对象和类的概念
对象的属性
对象的方法
对象的事件
对象和类的概念对象:包含现实世界物体特征的抽象实体。
类,可以理解为一种类型,是具有相同操作功能和相同数据格式的对象的结合,它是同种对象的高度抽象,包含了所创建对象的属性描述和行为特征的定义。
类是对象的定义,而对象是类的一个实例
面向对象的特性封装性:
当用户声明了一个类并在应用程序中创建了该类的具体对象后,用户只要使用对象的属性和方法进行相应的操作,而不必去关心其内部是如何实现的 。
继承性:
类与类之间的继承关系。一个基本的抽象类,是所有下属类的祖先;而位于底部的类继承了其所有上位类属性、
方法,但其又有自身特殊的属性、方法。
VCL中类的层次关系图
VCL是 Delphi中预定义的类,使用其中的对象,基本可满足一般程序的编程需求。
控件页
以选项卡的形式分类集中了 VCL组件,利用这些组件,用户可以方便地构造自己所需要的界面。
对象的三要素,属性、方法和事件
对象的属性
属性是对象的性质,它说明了对象在运行时如何显示以 及它的功能如何,是用来描述和反映对象特征的参数。
属性分为三类设计期属性,用户在进行界面设计设计时能显示和发挥作用的属性。
运行期属性 的值只有在程序运行过程中设定只读属性 只可查看,不可更改 。
设臵对象属性的方法
在设计阶段利用对象编辑器 ——属性选项卡直接设定对象的属性;
在程序代码中通过赋值实现,其格式为:
对象,属性,= 属性值;
对象的方法
面向对象的程序设计语言,为程序设计人员提供了一种特殊的已经封装好的过程和函数,称为方法,供用户直接调用。
对象方法调用的格式为:
对象,方法 [参数表 ];
对象的事件
对象的事件是指控件在受到激励后执行的动作。这种激励可以是外部的,也可以是系统内部的。
Delphi系统为每个对象预先定义好了一系列的事件。在对象编辑器-事件选项卡上可以看到一个对象控件的事件列表。
文本框的内容发生改变时触发了 OnChange事件鼠标单击文本框时触发了
OnClick事件鼠标在文本框上按下,鼠标移动到文本框上和鼠标在文本框上按下后抬起时,分别触发了 OnMouseDown
,OnMouseMove和 OnMouseUp事件文本框在获取焦点状态下,
用户按下并且释放一个会产生 ASCII码的键 时触发 了
OnKeyPress事件
2.2 一个简单的 Delphi程序窗体的概念 ( TForm)
可以作为容器来包容其他种类的控件并协同完成程序的整体功能。
1.窗体的重要属性、方法和事件
( 1)窗体的重要属性
Name属性,字符串类型。窗体的 Name属性默认值为
Form1”控件是 Delphi构成应用程序的基本单元。控件的 Name属性值指明了控件对象的引用名称,Delphi中所有的控件都有 Name属性,且 Name值不重复。 Name属性在应用程序设计期被设臵,在程序运行期不能更改。
Caption属性,字符串类型。 Delphi中许多控件具有可视化的用户界面,如窗体( Form)、按钮( Button)、对话框( Dialog)、标签( Label)等。这些可视化控件的窗口界面需要用字符串来表明其功能,Caption属性反映了这种需求。窗体的 Caption属性确定了窗口的标题。
Height,Width,Left和 Top属性,Height和 Width指明了控件的高度和宽度; Left和 Top指明了控件在其父容器中的位臵。
Color属性,用来确定窗体的背景颜色。
Font属性,用来确定窗体内控件的字体属性。
Cursor属性,用来确定窗体中光标的样式,默认值为
crDefault”。
Enabled属性,布尔型。 Enabled属性用于设定控件
(包括窗体)在程序运行期是否处于有效状态。 Enabled
属性是控件中常用的属性,在应用程序中为防止用户的误操作或是在特定情况下屏蔽某些功能,常常会使用该属性。
默认值为? True”。
BorderStyle属性,窗体的 BorderStyle属性用于确定运行期窗口边界的类型,
BorderIcons属性,用于确定窗体标题栏上是否显示系统菜单、最小化按钮、最大化按钮和帮助按钮。
Position属性,设计期阶段,用户可以通过 Left和 Top属性来设臵窗体在显示器屏幕上的位臵。
Visible属性,布尔型。用于确定程序运行时窗体是否可见。
在 Delphi中,运行期可视控件都具有 Visible属性。
WindowState属性,用于确定程序运行时窗口显示的状态。
其取值有,wsMinimized,wsMaximized和 wsNormal,分别表示程序运行时窗口处于最小化、最大化和正常状态。默认值为 wsNormal。
( 2)窗体的方法
Close方法,用于关闭窗体对象。当应用程序的主窗体调用
Close方法关闭后,整个应用程序结束。
Hide方法,用于隐藏窗体,相当于程序运行期将窗体的
Visible属性臵为 False。
Show方法,用于显示窗体窗口,相当于程序运行期将窗体的 Visible属性臵为 True,并将该窗体臵于屏幕上所有窗体的之前,该窗体称为当前活动窗体。
SetFocus方法,调用 SetFocus方法可将键盘输入焦点定位到窗体上。
ShowModal方法,用于以对话框模式显示窗体窗口,
打开的窗口称为模态窗口。 Windows的窗体有模态和非模态的区别。所谓模态窗口就是指如果程序中具有多个窗体,当其中一个窗体处于活动状态时,其他的窗体都处于不可用状态,那么这个窗体就称为模态窗体。
例如:
打开文件对话框、保存文件对话框、关于对话框等等。
当调用 Show方法时,如:
Form1.Show;
则显示的 Form1窗体为非模态窗体;要以模态方式显示窗体,则做如下调用:
Form1.ShowModal;
( 3)窗体的事件窗体是一个可视化的对象控件,它几乎可以响应和处理所有的事件 ―― 外部事件和内部事件。
2.在窗体上放臵和删除控件添加控件的方法
( 1)在控件页上选择相应的控件标签,鼠标左键单击某个控件,使该控件标签处于凹陷状态。然后在窗体上单击鼠标左键,
则控件被添加到窗体上。这时添加的控件大小是固定的,且控件的 Left和 Top值为鼠标点击处。
( 2)选择控件页,鼠标左键单击控件,然后在窗体中某个位臵按下鼠标左键并拖动,窗体上会产生一个虚框,表示即将放臵在窗体上的控件的位臵和大小,释放鼠标左键,控件便以指定的大小和位臵出现在窗体上。
( 3)在控件标签上双击某个控件,则该控件自动添加到当前默认的窗口或容器控件中。
( 4)控件支持剪贴板操作,可以用复制粘贴方式放臵一个新控件。首先选中窗体上已有的源控件并复制(快捷键为 Ctrl+C),
执行粘贴操作(快捷键为 Ctrl+V),新的控件将被添加到窗体上,且它的大小和字体等属性与源控件相同。
( 5)如想连续添加多个相同的控件,则按下 Shift键并单击控件,该控件标签凹陷且周围有浅蓝色边框,然后在窗体上不同位臵连续单击鼠标左键,每次单击都将添加一个相同的控件。
如要停止添加,单击每个控件页标签最左端的箭头即可。
删除窗体上的控件,应遵循先选中后删除的原则
( 1)单击窗体上欲删除的某个控件,此时控件周围出现八个黑色方块句柄,按 Delete键删除。
( 2)按下 Shift键,同时用鼠标单击窗体上的多个控件,使这些控件同时被选中,按 Delete键删除。
( 3)在窗体空白处按下鼠标左键并拖动,将欲删除的控件包含在出现的虚框中,释放鼠标,此时控件被选中,按 Delete键删除。
如删除的是容器控件,如 GroupBox,RadioGroup,Panel
等,则包含在该容器中的所有子控件被同时删除。
3.改变控件的大小和位臵
控件在窗体上的大小和位臵可以通过设臵控件的 Height、
Width,Left和 Top属性值来完成,除此以外,也可以使用鼠标或键盘操作来改变控件在窗体上的位臵和大小。
使用鼠标操作时,先选中控件,控件四周出现八个句柄。
按下鼠标左键拖动,可改变控件的位臵,如将鼠标移动到句柄上,按下鼠标拖动,则可以改变控件的大小;
使用键盘操作时,先选中控件,按下? Ctrl键 +方向键?可改变控件的位臵,按下? Shift键 +方向键?可改变控件的大小。
4.对齐控件窗体上包含多个控件时,往往需要调整控件之间的相对位臵,使得控件在窗体上的排列有一定的规律,可以通过使用 Align工具栏或 Alignment对话框来调整。
( 1)使用 Align工具栏调整使用以上所述的方法在窗体内选择多个控件,执行 View-
Alignment Palette
( 2)使用 Alignment对话框调整控件位臵先选中需调整位臵的多个控件,执行 Edit- Align命令,或在窗体上右击执行弹出菜单中的 Position- Align命令,打开 Alignment
对话框,根据界面设计需要分别在对话框的 Horizontal和 Vertical
选项内选择合适的单选按钮,并单击 OK按钮确定,调整窗体内被选择控件的相对位臵。
5.调整控件在窗体上的叠放次序
( 1)在窗体上先后放臵两个 Button按钮控件( Button按钮位于控件页的 Standard标签上),分别为 Button1和 Button2,
使得两个按钮的位臵如图所示;
( 2)选中 Button2按钮;
( 3)右击,执行弹出菜单中的 Control- Send to Back命令,
这时 Button2按钮被臵于 Button1按钮后,如图所示。
6.调整控件在窗体上的 TAB次序程序运行时,不断按下键盘上的 Tab键,键盘焦点可在这些控件上停留、按序跳转,获得焦点的控件周围有虚线边框表示。
决定键盘焦点是否在控件上停留,以及焦点跳转的顺序是由该控件的 TabStop和 TabOrder属性决定。
TabStop属性决定了键盘焦点是否在控件上停留,其值为布尔型。当取值为 False,按 Tab键时,该控件不会获得焦点。
TabOrder属性决定了键盘焦点在控件上跳转的先后次序,其值为整型。默认情况下,TabOrder属性值与控件在窗体上添加的先后次序有关,第一个添加的控件,取值为? 0”,表示程序运行时该控件优先获得焦点,以后添加的控件,
TabOrder值顺延。
调整控件在窗体上的 Tab次序的方法通过设定 TabStop和 TabOrder两个属性值来实现:
设计期在属性查看器中改变 TabOrder值后,其他控件的 TabOrder值将自动作响应的调整。如将属性值从? 0”
改为? 1”,则原先 TabOrder属性值为? 1”的控件自动变更为? 0”,其他控件不变;如将属性值为? 2”的控件改为? 0”,则原来值为? 0”的控件,其 TabOrder属性值自动更改为? 1”,原为? 1”的控件它的 TabOrder
属性值自动变为? 2”,其他控件不变。
一种更为直观的调整 Tab次序的方法:
在窗体上右击,执行弹出菜单中的 Tab Order命令,打开 Edit
Tab Order对话框,如图 2.13所示。以图 2.12的程序为例,对话框中的列表显示了可获得键盘焦点的所有控件,它们在列表中的上下位臵反映了按 TAB键后焦点跳转的先后次序,位于列表顶端的 Button1按钮(即‘确定’按钮)优先获得焦点,
它的 TabOrder属性值为? 0”。
在对话框右侧有两个指示向上和向下的按钮,在列表中选中需要调整 Tab次序的控件后,按向上或向下按钮即可直观地调整次序,TabOrder属性值将自动改变。
调整后调整前
7.锁定控件在应用程序的界面设计完成后,为避免误操作而改变控件在窗体上的相对位臵,可以执行 Edit- Lock Controls命令来锁定窗体内各个控件对象的相对位臵。如果希望修改控件的位臵,再次执行以上命令以解除锁定。
8.改变网格大小
为了精确地调整窗体上控件的相对位臵,Delphi提供了精细的网格(设计期窗体上有细小的浅灰色网格点),网格的大小确定了鼠标拖动控件时每次移动的距离。默认情况下,
网格大小设臵为 8× 8个像素。在设计期,用户可以重新设臵网格的大小:
执行 Tools- Environment Options命令,打开
Environment Options对话框并切换到 Designer标签卡;
在 Grid options选项中,改变 Grid size的 X和 Y值,取值范围为 [2,128]。
第一个例子第一个例子所要达到的功能是:程序运行时(初始状态),窗体界面有两个 button按钮,按钮上分别显示?显示?和?退出?。
单击?显示?按钮,在窗体上出现?聪明的程序员用 Delphi”字样,
同时?显示?按钮上的字变成?隐藏?;再次单击?隐藏?按钮,
窗体上的文字被隐藏,?隐藏?按钮上的字变为?显示?,即回到程序初始运行状态;单击?退出?按钮则结束应用程序。
应用程序( Application)建立的过程如下:
1.新建一个应用程序
2.在窗体上添加控件
3.编写事件代码
4.编译运行程序
5.保存文件一个 Delphi工程项目中主要的文件及其说明:
文件扩展名 文件类型 说 明
DPR 工程文件 文本文件。工程主程序文件,列出工程中所有的窗体、单元和包含应用程序的起始程序
PAS 单元文件 文本文件。程序单元源文件,包含单元所有说明和程序,包括事件处理
DFM 窗体文件 二进制文件。包含窗体和窗体内控件对象的特性描述,工程中每一个窗体文件对应一个 Pas的单元文件
RES 资源文件 二进制文件。保存着工程项目需要使用的位图、图标等资源
~ DPR 工程文件备份 工程修改后第二次存储时产生,随存储动作而更新。保存了 DPR文件最近一次存储前的一个副本
~ PAS 单元文件备份 保存了 PAS单元文件最近存储前的一个副本
~ DFM 窗体文件备份 在第二次保存时自动生成,随以后的保存操作而更新
EXE 可执行文件 二进制文件。编译工程文件后生成的可执行文件
DCU 单元目标文件 二进制文件。单元文件经过编译后生成正确的改名方法
( 1)在 Windows资源管理器中双击 dpr工程文件,或是先启动 Delphi集成环境,再执行 File菜单下的 Open或 Open
Project或 Reopen命令,重新打开项目;
( 2)执行 File- Save As命令,另存单元文件;
( 3)执行 File- Save Project As,另存项目文件;
( 4)回到 Windows资源管理器,删除原来的工程文件、单元文件以及系统自动产生的同名文件。
编程规范
1.命名规范:包括文件命名、常量、变量、函数、过程以及控件对象命名等。
( 1)文件命名在 Delphi中对一个工程保存时,主要是存储工程文件( DPR)
和单元文件( PAS),起名时应该用能直接揣摩出文件意义的名称。
文件名? FirstUnit”、 FirstProject”以及? AboutFrm”采用了英文词组(或单词缩略,Frm即为窗体 Form的简略)命名。
在采用词组方式时,单词间不要插入空格,且每个单词的首字母大写,这种方式称为?驼峰格式?。
( 2)变量、常量、函数、过程命名变量、常量、函数和过程的命名同样也遵循?驼峰格式?,
并且名称有一定的意义。
( 3)控件对象的命名任何一个控件在同一个应用程序中都有一个唯一的名称,用于区分不同的控件,控件对象的命名实际上是对控件的 Name
属性赋值。控件对象的命名原则是:命名后能从名称上大致理解控件的类型和作用。
一个控件对象 Name属性:它必须是在同一个应用程序中唯一的(不同窗体间控件的名称可以重复,但调用时要加上窗体名,在此视为控件对象的名称不同)。
2.注释为了阅读程序的方便,可以在程序适当的地方加上说明性语句,称为注释。
注释不是程序有效的程序代码,程序编译时会自动跳过注释部分,添加注释的目的在于提高程序的可读性。注释部分在
Delphi程序代码中以蓝色斜体表示,方式有两种,分别称为块注释和单行注释。
3.缩进程序中应当清晰地显示级别不同的代码。通常的做法是每一级都缩进两格(建议不要使用制表符 Tab,因为 Tab制表符会因每个用户设臵的不同而其间隔距离不同)。即,第一级缩进 2格,第二级缩进 4格 ……,以此类推。
第三章 Object Pascal语言基础
3.1 控制台应用程序
3.2 标识符
3.3 保留字
3.4 数据类型
3.5 有序数据类型
3.6 枚举类型
3.7 子界类型
3.8数组类型
3.9 指针类型
3.10 变体类型
3.11 常量和变量
3.12 运算符与表达式
3.13 Object Pascal语句结构
3.14过程与函数
3.1 控制台应用程序
用 Delphi 7 创建控制台应用程序。
用控制台应用程序进行简单的程序计算。
3.2 标识符
Object Pascal语言的标识符是由 ASCII字符集组成的,
用来标识常量、变量、属性、对象、类型、过程、函数、
单元等等。
标识符的命名规则如下:
(1)标识符是由字母( A-Z,a-z)、数字( 0-9)或下划线组成。
(2)标识符的第一个字符必须是字母( A-Z,a-z)或下划线,
不可以是数字。
(3)标识符长度不应超过 255个字符,如果超过 255个字符,
则只有前 255个字符有效。
(4)不能用 Object Pascal的保留字做为标识符。
3.3 保留字
Delphi中有 65个保留字,保留字是 Object Pascal语言预定义的具有特殊意义和用途的字符串,不能用保留字作为标识符的名称。
Delphi 7有 39个指令字,这些指令字也具有特定的意义。
这些指令字都可以重新被定义,当指令字被重新定义后,
在其定义的作用域内,这些指令字就失去了原有的意义,
3.4 数据类型
数据类型可以分为基本数据类型,复杂数据类型,指针类型,变体类型等。
分类如下图所示:
实型
实型是用来存储实数数据的类型。
它包括 7种数据类型。
注意 Real类型和 Currency类型区别:
Real为通用型。 Currency类型是专门为处理货币值而设定的,它的精度较高,适合于货币数值的计算,它只有 4
位有效的小数位数。
时间日期型
时间日期类型实质是实型的一种映射。它的整数部分表示从 1899年 12月 30日以来所经过的天数,小数部分表示经过的时间与 24小时之比。
如:
(1) 0表示的时间是 1899-12-30 00:00:00
(2) 38196.32表示的时间是 2004-7-28 7:40:48
字符串型
字符串是用来存储字符串的数据类型。它有短字符串型、
长字符串型、宽字符串型、字符串型 4种数据类型。
通用类型是 String型,AnsiString数据类型的定义是动态分配的,长度几乎可以无限。
整型
整型是存储整数数据的类型。
整数类型分为:通用整数类型和基本整数类型。
字符型
字符类型只能存储一个字符。
字符类型可分为:通用字符类型和基本字符类型。一般情况下常使用 char字符类型。
布尔型
布尔型可用于逻辑的运算。
Boolean类型的取值范围是 {False,True}。
3.5 有序数据类型
有序数据类型不是一种单独的数据类型。
在 Object Pascal语言中,整型、字符型、布尔型、枚举型、子界型都是属于有序数据类型。
任何一个有序类型的数据都有一个唯一的数值和它对应。
Object Pascal语言中有多个函数可以进行有序数据类型的计算。
在 Object Pascal有 Ord( x),Pred( x),Succ( x)、
High( x),Low( x),Inc( x),Dec( x)等函数。
( 1) Ord( x)函数,返回的值是有序数据类型表达式的序号,
但它不能处理 Int64这类的数据。
( 2) Pred( x)函数,返回的值是表达式的前驱值。第一个值无前驱值。
( 3) Succ( x)函数,返回的值是表达式的后继值。最后一个值无后继值。
( 4) High( x)函数,返回的值是表达式所在类型中的最大值。
( 5) Low( x)函数,返回的值是表达式所在类型中的最小值。
( 6) Inc( x)函数,相当与 Succ( i)。
( 7) Dec( x)函数,相当与 Pred( i)。
3.6 枚举类型
枚举类型的定义语法格式如下:
Type
{类型名称 =(枚举值 1,枚举值 2,…,枚举值 n)}
枚举类型的运算
枚举类型的值实际就是枚举常量,对枚举类型的运算实际是对枚举常量的运算,
所有的有序函数,都适用于枚举类型,但是第一个枚举常量没有前驱值,最后一个枚举常量没有后继值。
3.7 子界类型
子界类型是由整型、字符型、枚举型、布尔型中某两个常量指定的该类型的值区域,
子界类型的定义语法格式如下:
Type
{类型名称 =(常量 1),.(常量 2) };
“类型名称,即用户自定义的子界类型名称,常量 1表示子界类型的下界,常量 2表示子界类型的上界。注意:常量 1和常量 2必须属于相同的有序类型,
3.8 数组类型
静态数组一维数组类型的定语语法格式如下:
Type
{类型名称 =array[下标 1..下标 2] of 基类型 };
多维静态数组的定义语法格式如下:
Type
{数组类型名称 =Array[下标 11..下标 12] of
Array[下标 21..下标 22] … of Array[ 下标 n1..下标 n2]
of 基类型 };
动态数组
动态数组在使用前并没有说明数组的大小,只是在程序运行当中,根据需要为数组开辟相应的内存空间进行存储。
一维动态数组的定义语法格式如下:
Type
{类型名称 =array of 基类型 };
二维及多维动态数组的定义语法格式如下:
Type
{数组类型名称 =array of array of … array of
基类型 };
动态数组被定义后,数组的大小具有不确定性,
在程序的运行当时可以用 SetLength函数来重新分配数据占据空间的大小。
数组元素的访问
数组类型的变量被定义后,便可以通过数组元素进行访问。
访问数组元素的语法格式如下,
变量名 [ 一维下标 [,…n 维下标 ]];
对数组元素的访问是通过变量名,其后加上方括号和下标来表示。
3.9 指针类型
指针可以用来表示数据在内存当中的位臵。
有类型指针可以用如下的语法格式进行指针的声明,
Type
{类型名称 =^基类型 };
指针类型名称只是一种数据类型,若需要使用此数据类型还必须定义此类型的变量;指针类是由基类型前加上一个,^”符号来表示。
3.10 变体类型
变体类型就是在运行期可以改变其数据类型。
变体类型在声明后初始化一个特殊值 Unassigned,它表示此变量还没有被赋值,而当 Variant变量为另一个特殊的 Null
时,则表明 Variant变量未知或数据已经丢失。
变体类型能够表示大部分的数据类型。定义变体类型的语句格式如下:
VAR
变体类型变量,Variant;
3.11 常量和变量
常量
在程序运行中,固定不变的值称为常量。
常量又可分为直接常量和符号常量。
(1)直接常量 是在程序中无需定义,可以直接引用的量。
(2)符号常量 是以标识符的形式出现在程序中,可以用此标识符来替代一个反复出现的一个常数。
变量
在程序的运行当中,变量的值可以被改变。
变量的定义语法格式如下:
VAR
{变量名 1,变量 2,…,变量 m:类型名 1};
3.12 运算符与表达式
运算符
运算符是在程序中对各种数据类型进行运算的符号。
(1)赋值运算符:赋值运算符是用来给变量赋值时使用的运算符。
Object Pascal语言的赋值运算符是用,= 来表示赋值。
(2)算术运算符:算术运算符是用来进行算术运算的符号。
算术运算符可以分为一元运算符和二元运算符,
一元运算符号 只有两个:? +”和? -”,分别用来表示正数和负数。
二元运算符 有:加法运算符 +、减法运算符 -、乘法运算符 *、除法运算符 /、整除运算符 Did、取余运算符 Mod。
(3)逻辑运算符:用来进行布尔操作的运算符。
Not(逻辑非),它是一元运算符,将逻辑结果取反。
And(逻辑与),有且仅有两个操作数都为真,结果才为真,否则为假。
Or(逻辑与),仅当一个操作数为真时,值就为真,
否则为假。
Xor(逻辑异或),当两个操作数不同时,即一个为
True,另一个为 False时结果为真,同时为 True或同时为 False时为假。
(4)位运算符:位运算符能够按位对操作数进行运算。
(5)关系运算:用来比较两个变量的值。
关系运算符用来比较两个操作数的大小,被比较的两个操作数类型必须相容。若操作数是数值,则按照数值的大小进行比较;若操作数是字符(串),则根据字符的先后顺序按照 ASCII值进行比较。
运算符优先级
优先级的判定一般规则如下:
(1)一元运算的的优先级最高。
(2)有括号参与运算的表达式,先计算括号内的表达式值,
有多对括号,括号由内到外依次运算。
(3)运算符的优先等级如上表所示。
(4)同一优先级的运算符,按从左到右依次运算。
3.13 Object Pascal语句结构
Object Pascal的语句可以写在一行,也可以写在多行,
但在每一行末尾都必须加上分号?;?,用来表示一个语句的结束。
比较复杂的语句必须用 begin和 end两个保留字围起来。
Begin…end 之间还可以嵌套 Begin…end 。
Object Pascal语言支持顺序结构、选择结构、循环结构、函数与过程结构等 4种语言结构。
顺序结构
顺序结构是 Delphi语言结构中最简单的一种,它是按照程序书写顺序执行的语句,语句体比较简单,一般都是一行语句做为一个语句体。
顺序结构是任何程序主体的基本结构,在一般的选择或循环结构中,也是以顺序结构做为基础。
语句 1
语句 2
选择结构 ——简单 IF语句
IF语句也称为条件语句,是最常见的单条件语句,
它的一般语法格式如下:
If {条件 } Then {语句 1} [Else {语句 2}] ;
整个,If … Then … Else…” 是一个完整的语句,只能在此语句的结束才加上分号,表示语句结束。
选择结构 ——嵌套 IF语句
IF语句可以嵌套,即 IF语句中还可以包含 IF语句,语法格式如下:
IF {条件 1} Then
IF {条件 2} Then
{语句 1}
[Else
{语句 2}]
[Else
IF {条件 3} Then
{语句 3}
[Else
{语句 4}]
选择结构 ——Case语句
Case语句用以实现程序多分支的选择,结构简单明了,便于理解。
Case语法格式如下,
Case {选择表达式 } of
{情况常量表,语句或语句体 1;}
……
{情况常量表,语句或语句体 n;}
[Else 语句或语句体 ;]
End;
需要注意的是:
( 1)在 Case语句中,只可能执行一个分支,当一个分支被执行后,就直接运行 end后的语句。
( 2)计算表达式的值类型必须与情况常量表中的类型一致,并且同一个情况常量不能出现在两个常量表中。
计算选择表达式语句或语句体 n+1
语句或语句体 2
语句或语句体 n
语句或语句体 1
……
情况常量表 1
情况常量表 n
情况常量表 2
Case语句的程序执行流程图
循环结构 ——For循环
For循环是在事先知道循环次数的情况下使用的结构。
语法格式如下:
For {循环变量 = 初值 } {To|DownTo 终值 } Do
{循环体 }
循环变量初始化
True
初值与终值比较循环条件判断循环变量修正循环体
False
For循环流程图
循环结构 ——While循环
While循环一般在不知道循环次数的条件下使用。
语法格式:
While {条件 } Do
{循环体 };
While循环中的?条件?是一个布尔类型的表达式,当此条件为真时,则执行循环体。
True
循环条件判断循环体
False
While循环流程图
循环结构 ——Repeat循环
Repeat循环也是在不知道循环次数的条件下使用。
语法格式:
Repeat
{循环体 }
Until {条件 };
True
False
循环条件判断循环体
Repeat它与 While的区别:
( 1) Repeat循环先执行循环体,后判断循环条件,所以,Repeat循环体至少需要执行一次,而 While循环体的循环体可以一次都不被执行。
( 2) Repeat循环是当?条件?为 False时循环,而
While循环是当?条件?为真时循环。 Repeat的循环体至少执行一次,而 While的循环体可以不被执行。
循环的嵌套
多重循环指在循环体内还包含有另一个循环。嵌套在内部的循环称为内循环,外部的循环称为外循环。
循环的嵌套需要注意以下:
( 1)外循环必须完全包含内循环,即循环只能嵌套,不能交叉。
( 2)内循环变量与外循环变量不能同名。
3.14 过程与函数
根据过程或函数体本身是否返回值可以分为过程和函数。
过程体本身不返回值,函数本身返回值,因此,函数可以直接参与表达式的计算。
函数的定义
函数的定义由函数的首部和函数体两个部分组成,
定义格式如下:
Function {函数名 } [ (形式参数,类型 )…( ; 形式参数,类型 )],返回类型 ;
[局部变量说明 ]
begin
[语句体 ]
end;
函数的调用
函数调用的一般形式为:
{函数名 } ({实际参数表 });
当主程序中遇到函数调用时,首先根据函数的定义将函数调用语句的实参依次传递给相应的形参,然后执行函数体内的各语句,最后将函数计算结果通过函数名赋值语句返回到主程序,程序继续执行函数调用后的语句。
过程与函数 ——过程
过程可分为事件过程和通用过程。
事件过程依附于控件,控件响应相应的事件,既执行相应的过程。
通用过程由用户自己编写,用来完成用户自定义的过程。
过程的定义
过程定义一般格式为:
Procedure {过程名 } [ (形式参数,类型 )…( ; 形式参数,类型 )];
[局部变量说明 ]
begin
[语句体 ]
end;
过程的调用
对传数值与传地址方式的比较:
传数值,当调用一个子过程时,系统将实参的值复制给形参,形参在内存中开辟了一个新的存储单元,实参与形参没有任何的联系。被调用子过程的操作是在形参自己的存储单元中进行,当调用过程结束,形参所占用的存储单元被释放。因此,在子过程体内对形参的任何操作不会影响到实参。
传地址:当调用一个子过程时,是将实参的地址传递给形参,形参与实参共同指向同一个内存单元。调用过程中对形参的任何操作变成了对相应实参的操作,实参的值会随子过程体内形参值的改变而改变。
参数传递
在函数调用或过程调用过程中,都需要传递一定的参数,
在定义函数或过程时出现的称为形式参数,简称?形参?,
在调用函数或过程时出现的称为实际参数,简称?实参?。
参数传递有两种方式,一种为传数值,另一种是传地址。
判断参数传递是何种形式,以过程或函数定义时形参前的保留字为依据。
传数值
传地址
对传数值与传地址方式的比较:
传数值:当调用一个子过程时,系统将实参的值复制给形参,
形参在内存中开辟了一个新的存储单元,实参与形参没有任何的联系。被调用子过程的操作是在形参自己的存储单元中进行,当调用过程结束,形参所占用的存储单元被释放。因此,在子过程体内对形参的任何操作不会影响到实参。
传地址:当调用一个子过程时,是将实参的地址传递给形参,
形参与实参共同指向同一个内存单元。调用过程中对形参的任何操作变成了对相应实参的操作,实参的值会随子过程体内形参值的改变而改变。
3.15 常用算法
1.累加和连乘
2.穷举法
3.最大值和最小值
4.数值排序
1.累加和连乘
累加,在原有和的基础上一次次的加上一个数,累加( (循环 )前须设定一个累加和变量,并初始化;累加是在循环体中进行的;循环结束则累加过程结束,累加的和存储在 sum
中。
连乘:在原有积的基础上一次次的乘一个数字。连乘(循环)前完成连乘变量初始化,循环连乘以及循环结束后获得连乘结果。
例程求 1× 1/2× 1/3× …… × 1/10的积
( 1)问题分析:由于所求的问题是一个连乘算法,规律是每次连乘的子项其分母从 1开始不断递增 1,一直到 10,则循环从 1到 10,将循环变量作为子项的分母,实现连乘计算。
( 2)程序界面设计:启动 Delphi7.0,新建一个应用程序
Application,在窗体上各增加一个 Edit1文本框和 Button1按钮控件,
Edit1用于显示结果;设置 Button1控件的 Caption属性为,计算,,
( 3)程序代码在窗体上双击 Button1计算按钮,在 Button1的 OnClick事件中书写代码:
procedure TForm1.Button1Click(Sender,TObject);
var
i,integer; //定义循环变量
total,real; //定义连乘变量
begin
total,= 1; //连乘变量初始化,通常为 1,累加变量初始化通常为 0
for i:= 1 to 10 do
begin
total,= total * (1 / i); //连乘
end;
Edit1.Text,= FloatToStr(total); //结果在 Edit1中显示
end;
2.穷举法
穷举算法就是按照问题本身的性质,通过多重循环一一列举出该问题的所有可能解,不能遗漏也不能重复,并在逐一列举的过程中,检验每个可那的解是否是问题的真正解,若是,则采用这个解,否则抛弃。
例程,百元买百鸡问题
( 1)问题描述:百鸡问题是我国古代数学家张丘建所著
,算经,中的一道解不定方程的问题。题意:公鸡每只 5元,
母鸡每只 3元,小鸡每三只 1元。用 100元买 100只鸡。问公鸡、母鸡、小鸡各买多少只?
( 2)问题分析设公鸡有 i只,母鸡 j只,小鸡 k只,如果使用方程组求解,
可以列出如下的方程组:
i + j + k = 100
5× i + 3× j + (1/3)× k = 100
可见,这是一个不定方程组,结果有多个解集。如果采用穷举法,只需对 i,j,k循环取可能的值,每次取值结果用表达式 (i*5+j*3+k*1/3 = 100) And (i+j+k=100) 判断,
如果成立,表示找到了一个解。故程序使用一个三重循环来求解。
( 3)界面设计在应用程序窗体上添加一个 Memo控件(位于 Standard控件页 )和一个 Button按钮,设置 Button按钮的 Caption属性为,求解,,Memo控件的 Lines属性设为空。当点击,求解,
按钮后,计算结果显示在 Memo中。
( 4)程序代码为 Button按钮的 OnClick事件编写代码:
procedure TForm1.Button1Click(Sender,TObject);
var
i,j,k,integer;//i,j,k分别表示公鸡、母鸡和小鸡的只数
begin
for i:=0 to 20 do
for j:=0 to 34 do
for k:= 0 to 100 do
if (i*5+j*3+k*1/3 = 100) and (i+j+k=100) then
// 如果条件满足,将结果添加到 Memo中
Memo1.Lines.Add(IntToStr(i)+'
'+IntToStr(j)+' '+IntToStr(k));
end;
3.最大值和最小值
基本思想:通过循环做数的两两比较,一旦发现有更大
(或更小)的数后,将该数作为后续数比较的基数。
求最大值,通常循环比较前先假定一个足够小的数为最大数( max),如果无法估计较小的值,可以取第一个数为最大值作为初值,然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,依次逐一比较。
例程,输入 10个大于 0- 100之间的整数,求解最大值。
( 1)问题分析:求最大值问题,循环前设定一个 max变量,并初始化为
,-1”,将后续接收的 10个数逐个与 max比较,以求得最大值。
( 2)界面设计:
当点击 Button1按钮后,连续 10次弹出输入数值的对话框,输入一个判断一个,直到 10个数输入结束,最大值结果在 Edit1中显示 。
程序中用到了数值输入对话框,使用 Delphi提供的,InputBox( ),函数,其原型为:
function InputBox(const ACaption,APrompt,ADefault,string):
string;
( 3) 代码编写主要事件为,开设连续输入 10个整数,按钮的 OnClick事件,代码如下:
procedure TForm1.Button1Click(Sender,TObject);
var
i,integer; //定义循环变量
max,temp,integer; //定义最大值变量和临时变量
begin
max,= -1; //最大值变量初始化
for i,= 1 to 10 do
begin
// InputBox返回的值赋值给临时变量 temp
temp,= StrToInt(Inputbox('输入 ',Pchar('输入第 '+IntToStr(i)+'
个数 '),'0'));
if temp > max then //max与临时变量的比较,max中始终存放最大值
max,= temp;
end;
Edit1.Text,= IntToStr(max); //将最大值结果由 Edit1显示
end;
程序中将最大值变量 max初始化为 -1,若把该变量初始化为 100的话,能得到正确的最大值吗?
4.数值排序
排序就是将一组任意序列的数据元素,重新排列成一个按关键字排列的有序序列。比如按数值的大小递增或递减排列。
算法思想:首先在所有数值中选出最小值,把它与第一个值交换,然后在其余的数中再选出次最小的数与第二个数交换,依此类推,直到所有数排序完成。
例程,输入 10个整数,用选择排序算法从小到大排序。
( 1) 问题分析:为明晰选择算法思想,分析时先简化问题的规模,
假设有 6个数字,值分别为? 5,9,8,7,3,6”,根据算法,有如下的排序过程:
原始数据 5 9 8 7 3 6
第 1轮排序 3 9 8 7 5 6 ( 3最小,与第 1位的 5位置互换,3不参与下论排序 )
第 2轮排序 3 5 8 7 9 6 ( 5最小,与第 2位的 9位置互换,5不参与下论排序 )
第 3轮排序 3 5 6 7 9 8 ( 6最小,与第 3位的 8位置互换,6不参与下论排序 )
第 4轮排序 3 5 6 7 9 8 ( 7最小,与第 4位的 7位置互换,7不参与下论排序 )
第 5轮排序 3 5 6 7 8 9 ( 8最小,与第 5位的 9位置互换 )
排序结果 3 5 6 7 8 9
( 2) 界面设计:连续输入 10个整数后将排序结果显示在文本框 Edit1中 。
( 3) 代码编写因输入的 10个数参与排序并输出,故每次从 InputBox获得的数须存入一个定义的数组中第四章 常用控件的使用
4.1 文本输入控件
4.2 按钮类控件
4.3 列表类控件
4.4 分组控件
4.5 信息显示控件
4.6 菜单与工具栏控件
4.7 对话框控件
4.8 其他控件
控件是在面向对象程序设计一种可视对象,函数被
封装? 在 Windows编程所必需的对象中,只要在提供的框架中添加实现功能的代码,如点击按钮,
移动鼠标等,而不必考虑按精确次序执行的每一个步骤 。
控件的状态信息,动作信息,反馈信息,分别对应对象的属性,方法,事件 。
常用控件的功能:
Standard:标准的 Windows控件,比如按钮,单选按钮,菜单;
Additional:为应用程序专门设计的 Windows控件;
Win32,Windows 95/NT 4.0常用控件;
System:系统级访问所需控件,例如计时器,文件系统,多媒体播放控件;
Internet:管理 Client/Server应用所需的控件;
Data Access:数据库存取控件;
Data Controls:数据库感知控件;
Rave:报表制作控件,Delphi7.0中已默认安装,简单易用;
Dialogs,Windows通用对话框;
4.1 文本输入控件,文本操作相关的控件
Edit:对单行文本进行编辑,位于 Standard控件页上;
MaskEdit:掩码编辑框,按照预选指定的格式输入单行文本,位于 Additional控件页上;
Memo:对多行文本进行编辑,位于 Standard控件页上;
RichEdit:显示,编辑具有丰富文本格式的文件,位于 Win32控件页上;
UpDown:通常与一个 TEdit控件组合使用,通过上下箭头按钮对文本框内的数值调整,位于 Win32控件页上 。
4.1.1 Edit和 MaskEdit
单行文本编辑框 Edit——主要属性属性名称 属性类型 说明
AutoSelect Boolean 表示编辑框得到焦点的同时,文本能否被自动选中
AutoSize Boolean 编辑框的大小是否自动随文字大小的变化而变化
Enable Boolean 表示编辑框是否可用
BorderStyle 枚举型 编辑框的边框类型
MaxLength Integer 表示所最多能够输入的字符串长度
PasswordCha
r Char 用户所输入的字符将被该属性指定的字符所掩盖,通常在使用编辑框输入口令时使用
ReadOnly Boolean 编辑框的状态是否为只读
SelStart Integer 光标当前所处位置
SelText String 表示被选中的文字
SelLength Integer 被选中的字符串的长度
Text String 编辑框中的文本数据
CharCase TeditCharCase 表示编辑框中文本的大小写状态单行文本编辑框 Edit——编辑框的使用
编辑框的 Text属性决定了编辑框中所显示的内容。 Text属性可以在设计阶段进行修改,或者在程序运行过程中通过代码动态设臵,也可以在运行时由用户输入。
例程 4.1:输入圆的半径,根据圆的半径计算并且输出圆的周长以及面积。
( 1)创建应用程序界面,新建一个工程,进入窗体设计器当中,
增加三个标签控件,三个编辑框控件,以及一个按钮控件
( 2)设臵窗体中对象的属性
( 3)为相应的事件过程编写代码例程 4.2:在编辑框中输入英文单词,实现将单词中的小写字母转化成为大写字母和将单词中的大写字母转化成为小写字母的功能。
( 1)创建应用程序界面,新建一个工程,进入窗体设计器当中,在窗体中增加一个标签,一个编辑框,以及两个按钮,
( 2)设臵窗体中对象的属性,
( 3)编写代码。
掩码编辑框 MaskEdit
MaskEdit控件是一种格式化的编辑框,它的主要作用为以一定的格式规范用户所输入的数据。掩码编辑框隶属于类 TmaskEdit,
TmaskEdit继承了 Tedit的所有属性、事件和方法。
掩码编辑框 MaskEdit——主要属性
EditMask为掩码编辑框的掩码字符串属性,主要用于确定输入数据的格式以及风格。
取值主要划分成为三个部分,并且用分号隔开,其中第一部分是掩码字符串的主要部分,它确定了数据的格式,
第二部分确定了是否将掩码中的字符串作为数据的一部分,第三部分代表了掩码中将要输入的数据的占位符。
掩码编辑框 MaskEdit——MaskEdit的使用掩码输入的格式定义是使用 Input Mask Editor对话框来设臵的。
打开 Input Mask Editor对话框的方法有如下两种:
(1)窗体上选中 EditMask控件,在对象编辑器中选择 EditMask属性,单击属性值旁所对应的按钮;
(2)右击 EditMask控件,在弹出菜单中执行 Input Mask Editor…
命令,打开 Input Mask Editor对话框。
使用时可以选择一个 Delphi所提供的样本掩码,也可以自己设定特殊的掩码字符串。
4.1.2 Memo和 RichEdit
多行文本编辑框 Memo
当需要处理备注类型的多行文本时可以选用 Memo控件,但
Memo控件只能显示单一的一种字体格式,如果想使文本的字体多样化,可以选择 RichEdit控件。
Memo控件隶属于 Standard控件页中。
多行文本编辑框 Memo ——主要属性
( 1) Lines属性:
Lines是用于处理 Memo对象中文本内容的属性,类型为
Tstrings,即字符串数组类型:
其类型定义为:
property String[Index:Integer]:string;
Index表示字符串数组的索引,
Lines作为一种对象又有其自身的方法 ——Add方法,
Delete方法,Insert方法,Move方法:
( 2) ScrollBars属性
ScrollBars属性用于控制滚动条的状态,取值分别为:
取值 说明
ssNone 无滚动条
ssHorizontal 仅有水平滚动条
ssVerticall 仅有垂直滚动条
ssBoth 同时具有水平垂直滚动条
( 3) WantTabs属性
如果将 WantTabs属性设置为 True时,在文本当中使用 Tab键就可以进行文本编辑。如果想要使得焦点从 Memo控件切换到其他控件,就必须要使用 Ctr+Tab组合键来完成操作。
多行文本编辑框 Memo ——使用例程 4.3:对 Memo控件中的文本进行编辑,其中包括:剪切、
复制、粘贴、删除操作。
( 1)创建应用程序界面,在窗体设计器中添加一个 Memo控件,四个
Button控件,并且分别将四个按钮控件的 Caption属性设臵为
剪切?,? 复制?,? 粘贴? 和? 删除?,将 Memo1控件的
Lines属性设臵为所需要的文字,
( 2)分别为四个按钮的单击事件编写代码:
“剪切,按钮的单击事件为:
procedure TForm1.Button1Click(Sender,TObject);
begin
Memo1.CutToClipboard;
end;
“复制,按钮的单击事件为:
procedure TForm1.Button2Click(Sender,
TObject);
begin
Memo1.CopyToClipboard;
end;
“粘贴,按钮的单击事件为:
procedure TForm1.Button3Click(Sender,TObject);
begin
Memo1.PasteFromClipboard;
end;
“删除,按钮的单击事件为:
procedure TForm1.Button4Click(Sender,
TObject);
begin
Memo1.SelText:='';
end;
丰富文本编辑框 RichEdit
1,常用属性
( 1) SelStart以及 SelLenght属性:分别表示被选中文字的起始位臵和长度 。
( 2) DefAttributes和 SelAttributes属性:分别为默认字体的样式和被选中文字字体的样式 。
( 3) Paragraph属性:光标以及别选中的文字所在位臵的段落属性 。
2,丰富文本编辑框 RichEdit的使用
RichEdit控件与 Memo控件类似,不同之处在于
RichEdit可以对所输入的文字单独进行字体的设臵,
类似于 Microsoft Office中的 Word,该控件在 Win32组件面板中。
例程 4.4:对 RichEdit控件中输入的文字进行字体的设臵
( 1)创建应用程序界面,在窗体设计器中添加一个 RichEdit控件,
以及六个按钮控件,将三个按钮控件的标题( Caption)属性分别设为? 红?,? 黄?,? 蓝?,? 隶书?,? 宋体? 以及? 幼圆?,
将 RichEdit控件的 Lines属性设为空,Font属性中的 size(即字体大小)设为? 24”,? 红?,? 黄?,? 蓝? 按钮用于设臵选中文字的颜色,? 隶书?,? 宋体? 以及? 幼圆? 按钮设臵被选中文字的字体样式。
( 2)编写按钮所对应的事件的代码:
单独设臵 RichEdit控件中所选定的文本的字体时,需要使用到
SelAttributes属性,该属性表示当前选中文字的属性,其中
Color表示选中文字的颜色,而 Name表示选中文字的字体样式。
三种颜色所对应的按钮的单击事件为:
procedure TForm1.Button1Click(Sender,TObject); //红色按钮
begin
RichEdit1.SelAttributes.Color,= rgb(255,0,0);
end;
procedure TForm1.Button2Click(Sender,TObject); //绿色按钮
begin
RichEdit1.SelAttributes.Color,= rgb(0,255,0);
end;
procedure TForm1.Button3Click(Sender,TObject); //蓝色按钮
begin
RichEdit1.SelAttributes.Color,= rgb(0,0,255);
end;
三种字体按钮所对应的单击事件为:
procedure TForm1.Button4Click(Sender,TObject);
begin
RichEdit1.SelAttributes.Name,= '隶书 ';
end;
procedure TForm1.Button5Click(Sender,TObject);
begin
RichEdit1.SelAttributes.name,= '宋体 ';
end;
procedure TForm1.Button6Click(Sender,TObject);
begin
RichEdit1.SelAttributes.name,= '幼圆 ';
end;
4.1.3 UpDown控件
作用,通过点击上、下按钮来设定连续的数值。
通常将 UpDown控件与一个 Edit控件相关联,当点击
UpDown控件的上下按钮时,编辑框中的数值会发生连续的变化。
该控件隶属于 Win32控件页中。
1,UpDown控件的主要属性
( 1) Min,Max,Position属性:分别表示上下按钮所能进行数值调整范围中的最大值,最小值以及当前值 。
( 2) Associate属性:该属性指明与 UpDown控件相关联的控件,
通常情况下,将 UpDown与单行编辑框控件相关联 。
( 3) AlignButton属性:该属性决定了 UpDown与相关联控件之间的位臵关系,其取值分别为 udLeft以及 udRight,分别表示左侧与右侧 。
( 4) Increment属性:该属性表示在数值调整范围以内,当前值变化的步长,即用来控制 Position属性的增量,其默认值为 1。
( 5) Orientation属性:该属性指明了按钮的排列方式,分别为 udHorizontal,udVertical,即水平,垂直方向的排列 。
( 6) Wrap属性:当 Wrap属性的值为真时,Position的取值会在最小值和最大值之间连续变化,其默认值为 false。
2,UpDown控件的使用例程 4.5,利用 UpDown控件进行颜色合成。
( 1)创建应用程序界面,在窗体设计器中添加三个标签控件,
并且分别将 Caption属性设臵为? 红?,? 绿?,? 蓝? ;
添加三个编辑框以及三个 UpDown控件,通过设臵 UpDown控件的 Associate属性,分别将三对 UpDown控件与编辑框进行关联;分别将三个 UpDown控件的 Min,Max,Position属性设臵为 0,255,0。
在窗体上添加一个 shape控件(位于 Additional
控件页),改变红、绿、蓝 UpDown的 position值,
使得颜色在 Shape中显示。
( 2)颜色合成的效果显示在 Shape控件中,根据三个
UpDown控件的 position属性决定了 Shape控件颜色中的红、绿、蓝的分量。当 UpDown控件发生改变时,Shape
控件的颜色也会发生相应的变化,因此在编写代码时需要调用 Shape控件。
三个 UpDown控件的 OnChange事件的代码如下:
procedure TForm1.UpDown1Changing(Sender,TObject;var AllowChange:
Boolean);
begin
Shape1.Brush.Color,=
rgb(UpDown1.Position,UpDown2.Position,UpDown3.Position);
end;
procedure TForm1.UpDown2Changing(Sender,TObject;var AllowChange:
Boolean);
begin
Shape1.Brush.Color,=
rgb(UpDown1.Position,UpDown2.Position,UpDown3.Position);
end;
procedure TForm1.UpDown3Changing(Sender,TObject;var AllowChange:
Boolean);
begin
Shape1.Brush.Color,=
rgb(UpDown1.Position,UpDown2.Position,UpDown3.Position);
end;
当设定 UpDown控件的 Min属性为 0时,其 Positon属性取值自动与 Min的值保持一致 ( 如果未设定 Position的值 ) 。 程序运行时,UpDown1,UpDown2,UpDown3的 Position都为 0,
Shape1的颜色应该是 rgb( 0,0,0) 黑色 。 因此在程序的
FormCreat事件中增加如下代码:
procedure TForm1.FormCreate(Sender,TObject);
begin
Shape1.Brush.Color,= rgb(UpDown1.Position,
UpDown2.Position,
UpDown3.Position);
end;
4.1.4 应用实例-例程 4.6,统计字符数量
1.实例功能:实现一个类似记事本并且含有字符统计功能的工具,首先将所要统计的文字导入至窗口中的文本区域中,然后点击? 统计? 按钮后,在文本中的字母以及汉字的数量就能够显示在窗口的编辑框中。
2.设计思路:
( 1)该实例应用到了 Memo控件的属性以及各种常用方法,
如,CuttoClpboard(剪切),CopytoClipboard(复制),PastfromClipboard(粘贴)功能。
( 2)在统计时,程序将 Memo1控件中所输入的字符串中每一个字符做一个判断,判断的累计结果分别显示在两个编辑框中。其中 Ord函数用于得到字符的 ASCII码值,如果当前字符的 ASCII码值处在 33至 126之间,那么该字符就被认定为英文字符或数字,否则该字符表示二分之一个汉字。
3.控件的属性控件 属性 取值
Memo1 Lines 默认值为 ’ memo1’,将其置空
Button1 Caption,复制,
Button2 Caption,粘贴,
Button3 Caption,剪切,
Button4 Caption,统计,
Edit1 Text,英文字符数,
Edit2 Text,汉字数,
4.程序代码 (略)
4.2 按钮类控件
常用的按钮类控件:
Button:最常用的按钮控件,在按钮上提供简单的提示信息,位于 Standard控件页上;
BitBtn:图形按钮控件,与 Button按钮类似,但可在按钮上增加图形提示,位于 Additional控件页上;
SpeedButton:加速按钮控件,用来建立成组的工具栏按钮,位于 Additional页上。
CheckBox:复选按钮控件,提供一个开 /关选择,位于
Standard控件页;
RadioButton:单选按钮控件,在同组单选按钮中,仅能选中一个,位于 Standard控件页。
4.2.1 Button按钮控件
1,主要属性
( 1) caption属性:按钮的标题,即按钮所显示的提示性文字。如果在一个字符的前面插入? &”字符,在程序运行时,
该字符下面会出现下划线,这类字符称为加速字符。用户可以按住 Alt键并按下加速字符,来选择控件或者菜单项。
( 2) Default属性:当其值为真时,为窗体当中默认的按钮,
当按下回车键时,就会触发该窗体的 OnClick事件,其默认值为 false。
( 3) Cancel属性:默认值为 False,决定了该按钮是否为取消按钮。
( 4) ModalResut属性:其取值类型为枚举类型,决定模式窗体如何被关闭。
2,按钮控件的主要事件按钮控件的事件当中绝大部分都是由于鼠标相应所激发的,例如 OnClick,OnMouseDown,OnMouseMove事件等。
其中使用最多的事件为 OnClick事件,在两种情况之一将会激发 OnClick事件:
用鼠标点击按钮
当按钮获得焦点时,按下了回车键或者空格键。
4.2.2 BitBtn图形按钮控件
BitBtn控件为位图按钮,可以在按钮中显示图片,隶属于 Additional组件面板中。
( 1) Glyph属性,该属性为位图按钮指定一个 bmp文件,显示于 BitBtn
控件中。
( 2) Kind属性,该属性决定了 BitBtn的种类。不同的 Kind值对应一种不同的位图。取值分别为,bkCustom,bkOK,bkCancel,bkHelp、
bkYes,bkNo,bkClose等。默认值为 bkCustom,表示用户可以自定义图片的状态。
( 3) Layout属性,该属性用来在位图按钮中位图于文字的相对位臵,
取值有,blGlyphLeft,blGlyphRight,blGlyphTop,blGlyphBottom,
含义分别为:位图居左、位图居右、位图上方、位图下方。
( 4) Margin属性,表示 BitBtn按钮中图片边界之间的距离。
( 5) Spacing属性,表示 BitBtn按钮中图片于文字之间的距离。
1.主要属性,除与 Tbutton具有相同的属性之外,还具有其他一些属性。
2,BitBtn控件的使用例程 4.7,在窗体中使用 BitBtn控件
创建应用程序界面,在窗体设计器中添加五个 BitBtn控件,分别将 BitBtn1~ BitBtn4的 Kind属性设臵为,bkOK,bkHelp、
bkClose,bkCancel。 Caption属性设臵为? 确定?,? 帮助?,
退出?,? 取消?,为 BitBtn5的 Glyph属性选择一张位图
Heart.bmp,点击 BitBtn5控件的 Glyph属性按钮,弹出 Picture
Editor对话框,点击 Load按钮选择所需要的位图图像。为了使得加载的图像位于 BitBtn5按钮的中间,可以适当调整其
Margin属性的值。
4.2.3 SpeedButton
SpeedButton控件是一种成组工作的加速按钮,也可以在控件中显示位图。可以将多个 SpeedButton控件设计成为一组互斥的选项,只要将多个 SpeedButton的 GroupIndex
属性赋予一个相同的组号,SpeedButton控件隶属于
Additional组件面板中。
1,主要属性有:
( 1) Down属性,该属性设臵为真时,SpeedButton控件处于按下状态,否则为弹起的状态,默认值为 false。
( 2) Flat属性,该属性为真时,SpeedButton控件的外观类似一个标签,只有当鼠标移动到表面时,SpeedButton控件会显示突起的外观。当 Flat属性为 false时,SpeedButton控件与普通按钮的外观一致。
( 3) GroupIndex属性,GroupIndex的默认值为 0,表示
SpeedButton控件为一个单独的按钮。当 GroupIndex属性的值大于零时,GroupIndex值相同的多个 SpeedButton将自动成为一个分组,在同一时间内,仅有一个按钮可以处于? 按下? 的状态,剩下的按钮将处于凸起的状态。
4.2.4 CheckBox复选框按钮
该控件是一个能够进行两种选择状态的按钮,通过鼠标的单击可以改变选中和未选中两种状态。
CheckBox控件的 Checked属性决定了选中与否的状态,当 Checked属性的值为 True时,表示选中状态,
相反,当 Checked属性的值为 False时,表示未选中状态。
复选框隶属于 Standard组件面板中,其主要属性为:
属性 属性类型 说 明
Alignment 枚举控制 CheckBox显示的文本位置
taRightJustify表示文本显示在复选框右侧
taLeftJustify表示文本显示在复选框左侧
Checked Boolean 表示复选框是否被选中
State 枚举确定复选框的状态,有三种取值,cbChecked、
cbUnchecked,cbGrayed,分别表示选中、未选中和不确定。
AllowGrayed Boolean 决定了复选框是仅有两种状态还是有三种状态,值为False时只有选中以及未选中两种状态 。
例程 4.8:使用复选按钮控制文本的字体风格。
( 1)创建应用程序界面,在窗体设计器中添加一个标签控件,
一个编辑框,以及三个复选按钮。
将标签控件 label1的 Caption属性设臵为? 请输入文字?,将编辑框的 text属性设臵为空,为能清晰看到字体的不同分格,
适当设臵 Edit1的字体大小,本例设为 24。三个复选按钮的
Caption属性分别为? 加粗?,? 斜体?,? 下划线? 。
( 2)为三个复选按钮编写单击事件的代码:
由于复选按钮的 Checked属性可以决控件定选中状态,因而可以通过 Checked属性来改变文本框中文字的字体。
字体风格属性 style为一个集合类型的变量,因而在改变字体风格时需要进行集合的? 加? 操作以及集合的? 减? 操作。
加粗 斜体 下划线? 所对应的元素分别为,fsBold、
fsItalic,fsUnderline。
三个复选按钮所对应的单击事件为:
procedure TForm1.CheckBox1Click(Sender,TObject); //加粗复选框
begin
if CheckBox1.Checked = True then
Edit1.Font.Style,= Edit1.Font.Style + [fsBold]
else
Edit1Font.Style:=Edit1.Font.Style - [fsBold];
end;
procedure TForm1.CheckBox2Click(Sender,TObject); //斜体复选框
begin
if CheckBox2.Checked = True then
Edit1.Font.Style,= Edit1.Font.Style + [fsItalic]
else
Edit1.Font.Style,= Edit1.Font.Style - [fsItalic];
end;
procedure TForm1.CheckBox3Click(Sender,TObject); //下划线复选框
begin
if CheckBox3.Checked = True then
Edit1.Font.Style,= Edit1.Font.Style + [fsUnderline]
else
Edit1.Font.Style,= Edit1.Font.Style - [fsUnderline];
end;
4.2.5 RadioButton单选按钮
在同一组单选按钮控件中,只能有一个按钮处于被选中的状态,选择一个单选按钮就会清除其他单选按钮的选择。
RadioButton与 CheckBox控件相似,选中与未选中的状态也用 Check属性来表示。当 Check属性为 True,其状态为选中,False为未选中状态。
例程 4.9,使用单选按钮控制文本的字体
( 1)创建应用程序界面,在窗体设计器中添加一个标签控件,一个编辑框,以及三个单选按钮。
将标签控件 label1的 Caption属性设臵为? 请输入文字?,
将编辑框的 text属性设臵为空,适当设臵 Edit1的字体大小为 24,三个单选按钮的 Caption属性分别为? 宋体?,? 隶书? 和? 黑体? 。
( 2)为三个单选按钮编写单击事件的代码:
procedure TForm1.RadioButton1Click(Sender,TObject);
begin
Edit1.Font.Name,= '宋体 ' ;
end;
procedure TForm1.RadioButton2Click(Sender,TObject);
begin
Edit1.Font.Name,= '隶书 ';
end;
procedure TForm1.RadioButton3Click(Sender,TObject);
begin
Edit1.Font.Name,= '宋体 ';
end;
4.2.6 应用实例-例程 4.10:简易计算器
1.实例功能:利用按钮控件实现一个简易计算器,
该程序包含了数学运算中的加、减、乘、除四种运算。
2.设计思路:在进行四则数学运算之前首先需要选择运算类型,由于同时只能进行一种数学运算,因而需要使用到 RadioButton单选按钮控件,通过 checked属性来判断当前所选择的单选按钮。同时,在程序中包含了两种附加选项,保留四舍五入的结果以及进入编辑框时清空,
因而需要使用复选框按钮,由用户自由选择是否使用这两项功能。
3.控件的属性控件 属性 属性取值
Radiobutton1 Caption,加,
Radiobutton2 Caption,减,
Radiobutton3 Caption,乘,
Radiobutton4 Caption,除,
Checkbox1 Caption,保留四舍五入的结果,
Checkbox2 Caption,进入编辑框时清空,
Label1 Caption,数据 1”
Label2 Caption,数据 2”
Label3 Caption,结果,
Edit1 text,0”
Edit2 text,0”
Edit3 text,0”
Button1 Caption,清空,
Bitbtn caption,退出,
Kind BkClose表示关闭类型的位图按钮
SpeedButton1 Caption,计算,
Flat True
4.程序代码 (略)
4.3 列表类控件作用:需要比较多选项的情况下可以容纳多种选择,上下滚动列表框时可以方便查阅所有的选项。
ListBox:字符串列表控件,位于 Standard控件页;
ComboBox:组合框控件,位于 Standard控件页;
ImageList:管理程序中所用到的图像资源,位于 Win32控件页;
ColorBox:用于颜色选择的组合框控件,位于 Additional页;
DateTimePicker:用于实现日期、时间的快速输入,位于 Win32
控件页;
TreeView:以树状分支显示的分级列表框控件,位于 Win32页;
ListView:用于显示列表条目,可按大图标、小图标、列表或详细资料等四种方式显示,位于 Win32控件页。
4.3.1 ListBox
1,ListBox的主要属性
( 1) Items属性,表示显示在列表框当中的字符串,在设计阶段可以通过点击 Items属性的,…” 按钮打开 String List Editor对话框修改 Items属性。
Items属性也是一个数组,例如,ListBox1.Items[1]表示列表框中的第二行字符串。
可以调用相应的方法来处理 Items中的数据,Add,Delete、
Insert,Move方法:
ListBox1.Items.Add(?增加新的一行 ’ ); //增加一个新行
ListBox1.Items..Delete(?3?); //删除第二行
ListBox1.Items..Insert(1,?插入新的一行 ’ ); //在第二行的位臵插入一个新行
ListBox1.Items..Move(3,4); //将第四行移动到第五行
( 2) ItemIndex属性,表示被选中的项目在列表框当中的序号
,例如,ListBox1.Items[ListBox1.ItemIndex]表示当前选项所对应的字符串。
( 3) Columns属性,决定了列表框所能够同时显示的选项列的数量,其默认值为零,表示列表框只能单列显示。
( 4) MultiSelect属性,值为 true时,ListBox能够同时选择多项。
( 5) SelCount属性,表示被选中的选项的总数。该属性只有在 MultiSelect为 True时才有效。
( 6) Selected属性,该属性可以判断列表框中的选项是否处于选中的状态。
( 7) Style指定一个列表框的风格是一个标准的文本列表框还是可以显示图像的自绘列表框。
Style的各种取值取 值 说 明
IbStandard 列表中的选项都为文本,并且高度相同
IbOwnerDrawFixed 可显示位图,每一项的高度等于 ItemHeight
LbOwnerDrawVariable 可显示位图,列表框高度可以发生变化
2,ListBox的主要方法
Clear方法,可以清除 ListBox当中的所有内容:
ListBox1.Clear。
3,ListBox的主要事件
OnChange事件:当焦点在所选项之间发生改变时触发该事件 。
OnClick事件:当用户单击列表框时触发该事件 。
OnKeyPress事件:当按下某一个按健时触发该事件 。
OnExit事件:当 ListBox失去焦点时触发该事件 。
例程 4.11,列表数据的移动
4.3.2 ComboBox
1.组合框的主要属性:除了与列表框有相同的属性之外,还有特殊的属性。
( 1) DropDownCount属性:组合框的下拉列表所能够显示的最多选项数量。
( 2) MaxLength属性:可以在编辑框中输入的字符的最大个数,其默认值为零,表示对输入字符的个数没有限制。
( 3) SelText属性:表示在编辑框中被选中的文字。
( 4) Style属性:决定了组合框的风格,取值分别为,csDropDown、
csDropDownList,csSimple,含义分别为:可编辑同时具有下拉列表、不可编辑仅有下拉列表、只可编辑无下拉列表。
2.组合框的主要方法与列表框有区别,ComboBox1.Clear表示清除编辑框中的文本以及清除下拉列表中的所有选项。
3,组合框的主要事件
( 1) OnChange事件,当焦点在所选项之间发生变化时或者编辑框中的数据发生变化时触发该事件 。
( 2) OnDropDown事件,当用鼠标点击箭头按钮打开下拉列表时触发该事件 。
4.3.3 ImageList
ImageList控件是一个能够容纳多张图片的集合。
通常情况下,将 ImageList控件与一个工具栏控件相关联,使工具栏能够显示图标。
ImageList是不可见控件,即在程序运行时,窗体上不会显示该控件。
使用方法:
( 1)在 ImageList控件上单击鼠标右键,选择 ImageList Editor,或者双击该控件,弹出? Form1.ImageList1 ImageList”对话框。
( 2)在 ImageList中插入图片,点击? Add”按钮,查找并且打开所需要使用的位图或者图标文件。
( 3)? Replace”“Delete”“Clear”“Export”按钮的作用分别为替换、删除、清除、导出图像文件。
4.3.4 ColorBox
作用,将多种颜色以列表的形式提供给用户,它的外观类似于组合框控件,从而用户可以不需要记忆复杂的颜色编码,直接从选项中选择其中的一种完成颜色的配臵。
该控件隶属于 Additional组件面板中。
常用属性:
( 1) Color属性:该属性的作用为设臵 ColorBox的背景色。
( 2) DropDownCount属性:该属性的作用为在颜色的下拉列表中所能够显示行数。
( 3) Selected属性:表示当前所选择的颜色样式。
4.3.5 DateTimePicker
作用:是日期和时间控件,用于处理 TdateTime类型的日期和时间数据,隶属于 Win32选项卡中。
主要属性:
( 1) Date属性,表示 DateTimePicker中所显示的日期。
( 2) Time属性,表示 DateTimePicker中所显示的时间。
( 3) Kind属性,表示 DateTimePicker的显示类型,分为
dtkDate(日期),Time(时间)两情况。
( 4) DateFormat属性,日期的显示格式,取值为 dfShort、
dfLong两种,分别为 2位年份的短日期,4位年份的长日期。
( 5) MaxDate以及 MinDate属性,分别为日期范围的最大值以及最小值。
( 6) Format属性,用来设臵显示的日期或时间的格式。
4.3.6 TreeView
TreeView控件是一种复杂的树形视图控件,能够以一种树形视图来存储并且显示数据。
1,主要属性
( 1) Items属性,该属性中包含了 TreeView控件中的数据项。双击 TreeView控件或者单击 Items属性按钮,在
Items属性编辑器当中可以对数据项进行修改。
Item属性的方法:
Add方法,Add方法的作用为增加数据项 。
AddChild方法,该方法的作用为在当前项的下一层中添加子项目 。
Delete 方法,该方法的作用为删除数据选项 。
Clear,该方法用于清除所有的数据项 。
GetFirstNode,作用为获得第一个数据项 。
( 2) Selected属性,该属性表示当前所选中的数据项。
( 3) HotTrack属性,当该属性的值为真时,鼠标所指向的数据项会被加亮显示。
( 4) Image属性,作用为某一个数据项所对应的图标。
( 5) SortType属性,决定了所有数据项的排序方式取值 含义
stNone 不进行排序
stData 与数据项关联的 Data属性值改变时重新排序
stText 数据项的 Text属性值改变时重新排序
stBoth 在 Data或者 Text属性值改变时重新排序
2,TreeView主要方法
FullCollapse方法,用于折叠所有的数据项。
FullExpand方法,与上述方法作用相反,用于展开所有的数据项。
3,TreeView的主要事件事件名称 说 明
OnChanging 在数据项即将发生变化时触发该事件
OnChange 在数据项发生变化后触发该事件
OnCollapsed 数据项折叠时触发该事件
OnExpaned 数据项展开时触发该事件例程 4.12,静态 TreeView控件编辑
4.3.7 ListView
ListView控件以一种图形方式表示选项的集合,并且能够提供多种显示数据的方式。
通常情况下,ListView控件与 ImageList控件搭配使用,ListView数据项所对应的图标保存在 ImageList
控件中。由于图表有大小两种选择,因而需要使用两个 ImageList控件用于存储图像。
1,常用属性
( 1) ViewStyle属性,该属性能够区分 ListView在显示数据时不同的种类:
fcIcon表示大图标
vsSmallIcon表示小图标
vsList表示列表
vsReport报告方式。
( 2) Items属性:
表示 ListView控件所显示的数据项。
通过点击 ListView控件的 Items属性按钮可以打开 Items
属性编辑器:
( 3) LargeImages属性,当以大图标的形式来显示数据时,所有数据项的大图标应该由 LargeImages属性所指定的 ImageList中所保存的图片来提供。
( 4) SmallImage属性,当以小图标的方式来显示数据时,
小图标由 SmallImages属性所指定的 ImageList中保存的图片来提供。
( 5) Columns属性,该属性表示一个一维数组,当
ViewStyle属性为 vsReport类型时,ListView能够分列显示数据,双击 ListView控件可以打开 Columns属性编辑器。
2,ListView的主要方法
( 1) Arrange方法,当 ViewStyle属性值为 vsIcon或者
vsSmallIcon时,重新排列数据项所对应的图标。
( 2) FindCaption方法,用于查找符合指定标题内容的数据项。
3,ListView的主要事件:
( 1) OnClick事件,单击数据项时触发该事件。
( 2) OnDblClick事件,双击数据项时触发该事件。
( 3) OnSelectItem事件,数据项由选中状态变化为未选中状态时触发该事件。
( 4) OnColumnClick事件,只有当 ViewStyle属性值为
vsReport并且 ColumnClick属性为真时,单击列标题时才能够触发该事件。
4.3.8 应用实例-例程 4.13:课堂随机点名程序实例功能:可以实现课堂中随机抽取学生名单即随机点名的功能。
4.4 分组控件
作用:本身是为界面设计服务的,因而有些分组控件不具备任何功能。
通常,把一个分组控件称为是父容器控件,就像窗体是所有控件的父容器一样。包含在某个分组控件中的其他控件,称为该分组控件的子控件。父容器控件的某些属性能传递给子控件。
常用的分组控件:
panel,简单易用的分组框控件,使用灵活,位于
Standard控件页中;
GroupBox,含有标题的分组框控件。位于 Standard控件页中;
RadioGroup,单选按钮分组框控件,自带单选按钮,位于
Standard控件页;
TabControl,标签控件,为每一组控件提供相应的标签,
位于 Win32控件页;
PageControl,分页控件,为每一组控件提供页面,位于
Win32控件页;
4.4.1 Panel
Panel面板是一个在窗口中凸出显示的一片矩形区域,在窗口中可以将完成特定功能的一组控件放臵在同一个 Panel面板中,从而使得在窗口中所有的控件能够合理的排列。
常用的 Panel属性:
( 1) Alignment属性,表示 Panel面板中标签的对齐方式,分别为:
taCenter(居中),taLeftJustify(左对齐),taRightJustify
(右对齐)。
( 2) BevelWidth属性,表示在三维效果中,Panel面板凸起的程度。
( 3) BevelInner属性,表示内层边框类型。
( 4) BevelOuter属性,分为两种情况:当选择 bsSingle时,在 Panel外侧增加边框。默认为 bsNone。
( 5) BorderStyle属性,表示整体边框的类型。
( 6) Caption属性,Panel面板上所显示的标题信息。
( 7) Parent属性,所有控件都具有 Parent属性,用于表示包含该控件的容器、载体。因而所有放臵在 Panel控件中的其他控件的 Parent属性都应该为当前的 panel面板。 Parent属性只有在程序运行时有效。
4.4.2 GroupBox
GroupBox控件是一个含有标题的面板控件,同样可以作为一组相关控件的容器。
最典型的用途为对若干相关的单选按钮或者复选按钮进行管理,该控件位于 Standart组件面板中。
4.4.3 RadioGroup
单选按钮分组框控件由一个 GroupBox和一组
RadioButton构成,并且可在单选按钮组中使用统一的一个 ItemIndex。
RadioGroup控件的属性:
Items属性,设臵各单元按钮的标题。
ItemIndex属性,单选按钮组中被选中按钮的序号,默认值为 -1,表示所有的 RadioButton都未被选中
Columns属性,单选按钮组中按钮的列数。
例程 4.14,RadioGroup的使用,单击 RadioGroup中的单选按钮,显示选择结果。
4.4.4 TabControl
使用 TabControl控件可以完成多页窗体的建立,
TabControl可以在控件的顶部显示标题,但没有内臵的页面。而且在选择标签时,需要在程序中进行控制。
TabControl主要用于通过对标签的选择显示不同页面的情况。
1,TabControl的主要属性
(1)Tabs属性,用于指定 TabControl的标签,它是一个 Tsting
类型的对象,在设计时可以点击 Tabs属性的按钮打开
String List Editor对话框对 Tabs属性进行修改,也可以在程序运行过程中动态的添加、删除、插入标签。
( 2) TabIndex属性,表示被选中的标签的序号,序号的取值从 0开始,以此类推,默认值为 -1,表示当前没有选中任何标签 。
( 3) MultiLine属性,用于设臵 TabControl的标签是否可以多行显示,当该属性的值为真时,那么一行不能够显示完全的标签,将放在下一行显示,相反,当该属性的值为假时,所有的标签放臵在同一行中 。
( 4) TabPosition属性,用于确定标签的位臵是在控件的顶部还是底部显示 。
2,TabControl控件 Tabs属性的主要方法:
( 1) Add方法,为在 TabControl中添加一个标签。
( 2) Insert方法,为在 TabControl中插入一个标签。
( 3) Delete方法,为在 TabControl中删除一个某一个索引所对应的标签。
4.4.5 PageControl
PageControl控件由若干 tabSheet页面所组成,在
tabSheet当中又可以包含其他的组件,在程序运行过程中,可以通过点击页面所对应的标签在多个页面之间进行切换。
在 PageControl控件中添加 TabSheet的方法:
在设计阶段添加 TabSheet页面,即在窗体中选中
PageControl控件,点击鼠标右键,在弹出菜单中选择
New Page命令可完成新建页面的任务。在选择一张
tabSheet页面时,可以用鼠标选择,也可以通过快捷菜单中的 Next Page或者 Previous Page命令在不同的页面之间进行切换。
1,PageControl控件的主要属性
ActivePage属性,用于在设计和运行阶段确定当前被选中的页面,用户也可以在运行时获取该值来确定哪一页被用户所选择,
在某一时刻只能有一张页面处于 Active状态。
PageCount属性,表示在 PageControl控件中页面的数量。
MultiLine属性,表示 PageControl控件是否可以多行显示标签。
Images属性,表示与 PageControl控件相关联的 ImageList。
Pages属性,是一个 TtabSheet类型的对象数组,包含了
PageControl组件中所有页面。该数组的序号从 0开始,序号 0
表示第一项,以此类推。
ActivePageIndex属性,当前处于激活状态的 Pages数组的下标。
2,TabSheet页面的主要属性
Caption属性,每一个标签所对应的标题。
PageIndex属性,该页在 Pages数组中所对应的序号。
TabVisible属性,该页是否可见。
ImageIndex属性,该页所对应的图像在 ImageList中的序号。
4.4.6 应用实例
-例程 4.15:显示图形的各种填充效果实例功能:能够显示图形的各种填充效果,比如,网格效果、阴影效果、交叉线效果等等。同时,该程序又能够对填充效果的颜色进行自由选择。
4.5 信息显示控件
信息显示控件主要用于在用户与应用程序交互过程中,显示系统当前的状态,输出各种文字信息,使用户能够充分了解并且控制对象的各种属性,而且在操作过程中可以更加直观、方便、快捷。
Label,显示一个不可编辑的静态文本,位于 Standard控件页;
StatusBar,状态栏控件,显示一个状态提示区域,位于
Win32控件页;
TrackBar,有刻度的进度条,位于 Win32控件页;
ProgressBar,进度条控件,为某个任务显示当前的进度,
位于 Win32控件页。
4.5.1 Label
标签用于在窗口中显示静态文本信息,可以对不具备标签功能的可视控件做出说明,在程序运行过程中,用户不能够对标签进行编辑。
主要属性:
Caption属性,指定标签控件所显示的文本。
AutoSize属性,随着文本长度的变化,标签的尺寸是否也会发生相应的变化。
Alignment属性,表示文本的对齐方式,分别为:左对齐、居中对齐、
右对齐。
FocusControl属性,该属性可以为某些无标题控件提供快捷键。
Layout属性,所显示的文本在垂直方向上的对齐方式。
WordWrap属性,表示文本是否会分行显示。
Transparent属性,当该属性的值为 True时,表示标签的背景为透明。
4.5.2 StatusBar
StatusBar控件用于在窗体中显示状态栏,提供程序在运行时的状态信息,一般位于窗体的下部。 StatusBar控件具有两种方式:单面板与多面板。
当 SimplePanel属性的值为 True时,StatusBar控件处于单面板状态,所显示的内容为 SimpleText对应的值。
如果 SimplePanel属性的值为 False时,状态栏被划分成为若干个部分,每一个子面板用于显示不同的内容,双击
StatusBar控件,通过 Panels属性编辑器可以对状态栏中所包含的子面板进行设臵,如设臵显示的文本( Text),
状态栏的宽度( Width)以及对齐方式( Alignment)等。
在 PanelsStatusBar控件的属性编辑器中,四个按钮的作用依次为:插入子面板、删除子面板、向上移动以及向下移动子面板。
例程 4.16:状态栏显示当前的日期和时间
4.5.3 TrackBar,是类似于刻度尺的控件,可以通过鼠标托动或者方向键的控制来改变游标的位臵。
主要属性:
Min,Max属性,分别表示 TrackBar控件所能够表示数值范围的最小值、最大值。
Postion属性,在 TrackBar控件所能够表示的数值范围内,游标在当前的数值所对应的数值。
Frenquency属性,该属性表示刻度的单位间隔。
Orientation属性,表示刻度尺的方向,分别为水平方向以及垂直方向,trHorizontal,trVertical。
4.5.4 ProgressBar,是进度条控件,通常在 windows应用程序当中用于指示任务完成的情况。
主要属性:
Min,Max属性,分别表示 ProgressBar控件所能够表示数值范围的最小值、最大值。
Postion属性,进度条在整个数值范围以内当前所处的位臵。
Step属性,表示进度条的单位步长。
4.5.5 应用实例-例程 4.17:捕捉鼠标在窗口中的坐标
实例功能:能够直观的显示鼠标在窗口中所对应的坐标位臵,鼠标移动时,横、纵坐标也会相应发生改变。
4.6 菜单与工具栏控件
菜单和工具栏是视窗操作系统的界面中必不可少的组成部分,某些常用的功能可以通过菜单或者按钮的方式来实现,从而使一些操作更加方便更加直观化。
4.6.1 MainMenu
在标准的 Windows应用程序中,菜单可以分为两级:第一级为菜单栏,第二级为菜单所包含的菜单选项。
1.菜单编辑器
2.菜单项的属性
3.快捷键以及热键设臵
4.6.2 PopupMenu
PopupMenu为弹出式菜单,该控件的使用方式与
MainMenu类似,首先在窗体上添加 PopupMenu控件,
双击该控件进行弹出菜单项的编辑。
4.6.3 ActionList
ActionList控件主要功能为,它能够提供系统中的很多功能,比如,剪切、复制、粘贴、撤销等,并且能够保证这些操作彼此之间能够保持必要的联系。
1,ActionList编辑器
2,ActionList控件以及行为对象的主要属性
4.6.4 ToolBar
工具栏控件能够为窗口中的操作提供方便快件的方式,在使用 ToolBar控件时,需要搭配使用
ToolButton控件。
1.工具栏 ToolBar控件的主要属性
2.工具栏按钮 ToolButton的主要属性
3.在 ToobBar中添加按钮
4.6.5 CoolBar
CoolBar控件是一个能够容纳若干条形区域的子工具栏,可以将其他类型的控件放臵在这些相对独立的子工具栏中。当 CoolBar控件的 FixedSize属性为真时,可以将任何控件放臵于 CoolBar控件中。
1,CoolBar控件的子面板编辑器
2,CoolBar控件以及子面板 CoolBand的主要属性
3,CoolBar的使用例程 4.18:创建一个 CoolBar工具栏
4.6.6 应用实例-例程 4.19:使用 Action行为对象
该实例的功能为:在程序中直接调用由系统所提供的一些标准行为对象,例如,编辑操作、对齐方式、
字体属性、查找,而不需要编写额外的代码
4.7 对话框控件
对话框是用户与应用程序之间进行交互的一种工具,
使用对话框可以在界面中进行信息的提示以及接收用户输入的数据。对话框控件位于 Dialogs控件页。
4.7.1 OpenDialog
作用,为以打开对话框的方式选择某一个文件,在程序运行过程中只有执行了 Execute方法后,才能调用并且显示打开对话框,OpenDialog控件的
Filename属性用于保存所选定的文件的路径以及名称。
1,OpenDialog的主要属性
2,OpenDialog的主要方法
4.7.2 SaveDialog
作用,为提供一个另存为对话框,该控件所具有的属性、方法与 OpenDialog相似。如果执行了另存为对话框的 Execute方法,并且在对话框完成了保存操作之后,会将所选择的驱动器、文件夹、输入的文件名称赋予 FileName属性。
4.7.3 PrintDialog
PrintDialog控件为打印对话框,当执行 Exectute
方法后会显示一个? 打印? 对话框
4.7.4 ShowMessage过程和 MessageBox函数
除了使用对话框控件与用户交互外,Delphi还提供了调用 ShowMessage过程和 MessageBox函数与用户进行简单的消息传递。
1,ShowMessage过程
2,MessageBox函数
4.7.5 应用实例-例程 4.20:简易 jpg图片浏览器
该实例能够完成对图像进行简易管理的功能,包括:
打开图片、另存图片以及分别以三种不同的模式浏览图片。
4.8 其他控件
Image:显示图形文件控件,位于 Additional控件页;
Timer:定时器控件,通过设定触发时间,自动刷新系统,位于 System页。
4.8.1 Image
用于在窗体的一块矩形区域中显示图形文件。
1,Image控件的主要属性
2,Picture对象的主要方法
4.8.2 Timer
Timer控件是一个非可视化的控件,在程序运行过程中处于不可见状态。其作用为根据一个给定的时间间隔参数,能够定时地对系统进行刷新的操作。
1,Timer控件的主要属性
2,Timer控件的 OnTimer事件
4.8.3 应用实例-例程 4.21:数显时钟
该实例能够在窗体中以图片方式动态显示当前时间,
窗体标题栏显示日期第五章 程序的调试和异常处理第五章 程序的调试和异常处理
5.1 程序错误的类型
5.2 程序调试方法
5.3 异常处理
5.1 程序错误的类型
5.1.1 设计期错误
设计期错误发生在使用 Delphi进行可视化设计的时候。
如在程序中使用了不合法的赋值或定义,就会产生该类错误。 Delphi能够对程序中的值及变量进行合法的跟踪。
如果发现了不合法值,Delphi会显示一个警告信息,提示用户错误的位臵及错误类型。
5.1.2 编译错误
编译错误的产生是 Delphi将源程序编译成单元目标文件
DCU时所产生的错误。在编译错误中最常见的就是程序语法错误,如源程序中出现了未经定义的非法字符,语句的结尾缺少? ;? 等。当出现语法错误时,Delphhi自动装入错误的文件,并将光标定位在代码编辑器中的错误处,
同时在代码编辑器的状态栏显示出错信息,包括出错的语句行号以及错误类型等信息。
5.1.3 运行错误
运行错误是指在编译通过后,运行程序时产生的错误。
1.数组越界错误
2.I/O访问错误
5.1.4 逻辑错误
逻辑错误是程序代码逻辑关系上存在的错误,也是时常出现的错误类型。这类错误不影响程序的正常编译和运行,
更不会出现错误的提示或警告对话框,但程序运行的结果与编程者的期望不同。
逻辑错误是程序调试过程中较难发现的错误类型,对于一些较大规模的程序,在经过严密的测试发布后,仍然存在未被发现的逻辑错误缺陷。
5.2 程序调试方法
5.2.1 设臵编译和调试环境
1.包含调试信息
2.允许完整模式调试
5.2.2 使用断点
1.设臵断点
2.查找断点
3.删除断点
4.断点的屏蔽与激活
5.设臵断点属性
5.2.3 单步 /跟踪调试
通过单步或跟踪调试,能逐过程(函数)或逐条语句运行程序,以便发现程序中的运行错误和逻辑错误。
5.2.4 查看变量
有时为了直观地分析、比较变量或表达式在不同运行时期的值,需要同时查看多个变量,Delphi中提供了监视窗口
( Watch List)。程序调试时可以把需跟踪的变量或表达式加入到监视窗口。
5.3 异常处理
5.3.1 try … except语句
try … except语句有两部分组成,try语句块和 except
语句块。 try语句块指明需要进一步保护的语句,except
语句块包含对异常进行处理的语句,其中,关键字 on后面的 <异常对象类型 >指明了需要处理的异常对象的类型,
关键字 do后面的语句给出了处理的方法。
try … except语句的执行过程是这样的:正常情况下,
应用程序按顺序执行 try语句块内的语句,然后跳过
except部分代码继续执行;如果在执行 try内代码时出现异常,程序直接进入 except语句块进行异常处理。
5.3.2 try … finally语句
try … finally语句也由两个部分组成,try语句块和
finally语句块。通常在 try语句块前执行申请或创建系统资源的功能; try语句块包含了使用系统资源的语句;
finally语句块部分包含了资源的释放,如文件关闭、释放对象等操作。
在 try … finally结构中,首先顺序执行 try语句块中的各语句,如果没有产生异常,则将执行 finally语句块中的资源释放语句;如果在 try语句块中产生异常,则停止执行 try语句块内剩余的语句,直接跳转执行 finally语句块内的语句以释放资源。也就是说,无论异常是否发生,
finally语句块内的语句都将被执行。
第六章 数据库程序开发
6.1 数据库基本概念
6.2 建立数据库应用程序
6.3 数据库控件
6.4 开发 Microsoft Access数据库应用程序
6.1 数据库基本概念
6.1.1 数据库系统
6.1.2 关系型数据库
6.1.3 客户 /服务器模式数据库
6.1.1 数据库系统数据库系统主要由数据库、数据库管理系统和数据库应用程序组成。
数据库( Database,DB)是按照一定方式组织、存储和管理数据的数据集合。
数据库管理系统( DataBase Manage System,DBMS:)是用于描述、管理和维护数据库的程序系统,是数据库系统的核心组成部分。
数据库应用程序,首先是一个为特定用户需求而开发的计算机应用软件;其次,应用程序操纵的主要内容来源于由 DBMS存储的数据。
6.1.2 关系型数据库数据库系统有三种类型:
层次数据库系统
网状数据库系统
关系数据库系统在关系型数据库系统中,如下概念是重要的:
数据表( Table):一个表就是一组相关的数据按行列排列组织在一起,
就如一张二维表格,它是构成数据库的最直接单元。
数据集( DataSet):严格来说,数据集并不是关系型数据库系统中的概念,而是指通过对一个或多个数据表的访问从数据库中获得的数据集合。
字段( Field):在数据表中,每一列成为一个字段。
记录( Record):在数据表中,每一行称为一条记录。
主键( Primary Key,PK):在数据表中,主键是唯一标识每一条记录的字段。
索引( Index):一个表可以按照某种特定的顺序进行保存或排列,这种特定的顺序称为表的索引。
6.1.3 客户 /服务器模式数据库客户 /服务器( Client/Server,CS)模式是当前数据库应用的主流。
服务器是指远程数据库服务器,其作用是对数据库进行统一的管理和控制,并且为客户提供了一个通用的逻辑界面:结构化查询语言
( Structured Query Language,SQL),所以也将数据库服务器称为
SQL服务器。客户机是将用户的需求送交到服务器,由服务器处理后返回数据给用户。
本章对数据库应用程序的开发,主要是针对文件型数据库 。
6.2 建立数据库应用程序
6.2.1 示例数据库程序
6.2.2 使用 Database Desktop创建数据库
6.2.3 BDE管理器
6.2.4 ODBC数据源设臵
6.2.1 示例数据库程序例程 6.1:使用示例数据库的数据库应用程序该程序设计界面如下图 6.1所示。
运行 Delphi新建一个 Application,在窗体上添加一个 Table控件(位于
BDE控件页)用于访问数据集,一个 DataSource控件(位于 Data
Access控件页)作为数据集和数据关联控件的中间接口,并在 Data
Controls控件页中找到 DBGrid,DBNavigator,DBEdit,DBMemo和
DBImage控件,分别添加到窗体上,用于显示数据库中的特定字段内容。
按下表设臵控件的属性:
所属控件页 控件 属性 属性取值
BDE Table
Name Table1
DatabaseName DBDEMOS
TableName Clients.dbf
Data Access DataSource
Name DataSource1
DataSet Table1
Data Controls
DBGrid
Name DBGrid1
DataSource DataSource1
DBNavigator1
Name DBNavigator1
DataSource DataSource1
DBEdit
Name DBEdit1
DataSource DataSource1
DataField LAST_NAME
DBMemo
Name DBMemo1
DataSource DataSource1
DataField ADDRESS_1
DBImage
Name DBImage1
DataSource DataSource1
DataField IMAGE
属性设置表完成以上控件的属性设臵后,最后将 Table1的 Active属性臵为 True,
运行该程序。出现如下界面:
6.2.2 使用 Database Desktop创建数据库建立数据库应用程序,前提是数据库已构建好。 Delphi集成了一个数据库工具- Database Desktop(数据库桌面管理程序),用于数据库的创建,适用于单机环境的小型数据库应用程序开发。
在 Delphi集成开发环境下,执行? Tools- Database Desktop”命令可以启动 Database Desktop。如图
6.2.3 BDE管理器用数据库桌面管理程序创建的数据库是不能直接在 Delphi中使用的。
如果要使用它,必须为它提供数据库引擎。 BDE Administrator( BDE管理器)就是数据库引擎的配臵工具,它对数据库的定义采用别名的概念。
所谓别名就是为数据库指定一个特定的名称,然后定义它的数据库驱动程序参数。
BDE( Borland Database Enginer)是 Borland开发的 Delphi数据库引擎,
负责处理数据库操作的核心。下图显示了 BDE的数据库管理结构图。
Delphi数据库应用程序
BDE
IDAPI
本地数据库
SQL ODBC
远程数据库FoxPro,Access等
Oracle,Sybase,DB2,Informix等
BDE数据库管理结构图在开始菜单的 Delphi程序组选择 BDE Administrator命令,可打开 BDE管理器。它分成左右两部分,左边为显示对象的树形结构,右边是显示左侧选中对象的属性和设臵。左侧面板上,
又分为两个页面,Database页和 Configuration页,在
Databases页中,可以看到 6.2.1节中应用的 DBDEMOS示例数据库别名。
New Database Alias对话框
6.2.4 ODBC数据源设臵
1.创建 ODBC数据源
2.使用 ODBC数据源
6.3 数据库控件
6.3.1 BDE控件
6.3.2 Data Access控件
6.3.3 Data Control控件
6.3.4 ADO控件
6.3.1 BDE控件
BDE控件用于关联和操纵数据集,常用的有 Table和 Query控件。
本教材的数据库程序开发着重于 ADO( Active Data Objects)方式的数据存储技术,BDE组中的 Table和 Query控件的介绍仅以常用属性为主。
1,Table控件
Table控件是 Delphi开发数据库应用程序中最常用、最重要的控件之一。
Table控件的部分关键属性
Active属性:指明了一个数据集是否处于打开状态,其值臵为 True时,则打开数据集,该属性既可以在设计时指定,也可以在程序中设臵。
DatabaseName属性:表明应用程序所操作的数据库名,数据库名来源于
BDE Administrator中的数据库别名或 ODBC数据源名。
TableName属性:说明当前 Table控件所连接的实际数据表。
ReadOnly属性:用于控制用户对数据表的读、写权限。
2,Query控件
Query控件是建立在 SQL(结构化查询语言)基础上,
专门用于对数据库中的数据进行查询的控件。
Query控件与 Table控件相比没有太大的区别,主要差别在于获得数据的方式上不同。
6.3.2 Data Access控件
Data Access控件(数据访问控件)起到了一个数据提供者的作用,这些数据是以数据集( DataSet)方式提供的。在该组控件中,DataSource用于向本地提供数据集,ClientDataSet用于向远程提供数据。
下面主要介绍 DataSource控件。
DataSource控件的重要属性如下:
AutoEdit属性:决定了当与一个数据源控件相连的数据控制控件获得焦点时,此数据源控件是否自动的调用数据集控件的 Edit方法,允许用户通过数据控制控件编辑数据集中的数据。
DataSet属性:用来指明一个与当前数据源控件相联系的已存数据集控件的名字。
Enable属性:决定了与此数据源控件相连的数据控制控件是否显示数据,默认为 True。
DataSource控件的主要方法如下:
Create:创建一个 DataSource控件。
Destory:撤销一个 DataSource控件。
Edit:决定是否对于数据源相连的数据集控件调用 Edit方法。
IsLinkedTo:检查数据源控件是否链接着一个特定的数据集控件。
DataSource控件的常用事件:
OnDataChange:当与 DataSource相连的数据集中的记录指针位臵变化时,触发这个事件,常用这个事件保持多个控件的同步。
OnUpdateData:在数据集控件中的记录更新时触发此事件。
6.3.3 Data Controls控件
Data Controls控件(数据控制控件),也称为数据显示控件。在该组控件页上包含了 15个数据控制控件。可以发现,该组控件中的外观样式与 Standard控件页中的控件有些相似,如 DBEdit与 Edit、
DBListBox与 ListBox等。不同之处在于 Data Controls组控件能与数据表中的数据绑定,用于显示数据信息,当数据表中的数据改变时,
显示的内容也会随之发生变化,而无需人为地去实现。
数据访问控件( Data Access)是不可见的,因此必须有可见的数据控制控件( Data Controls)为用户提供数据的显示,每个数据控制控件都对应了一种数据显示方式。
最基本的属性:
DataSource属性:指定了 Data Controls控件的数据源,通过这个数据源,Data Controls控件才能访问数据表。
DataField属性:与数据表中的某个字段关联,作为控件的操作对象。
下面对常用的 Data Controls组控件做一介绍。
1,DBGrid控件
2,DBNavigator控件
3,DBText控件
4,DBEdit控件
5,DBMemo控件
6,DBImage控件
7,DBListBox控件
8,DBComboBox控件
6.3.4 ADO控件
ADO( ActiveX Data Objects)是微软提供对各个数据格式的高层接口( high-level interface),该接口已经成为访问数据库的新标准。
使用这种接口的数据库又称为 OLE DB数据库。
下面将具体介绍 ADO组各控件。
1,ADOConnection控件
2,ADOTable控件
3,ADOQuery控件
6.4 开发 Microsoft Access数据库应用程序本节将以一个数据库应用程序实例来深入介绍数据库相关控件的属性、
方法和事件的使用,并了解一般数据库应用程序的建立过程和对数据集的操纵
(增加、删除、修改、检索等)方法。
6.4.1 数据库分析与建立
6.4.2 SQL语言
6.4.3 连接 MS Access数据库
6.4.4 数据操作与应用程序的实现
6.4.1 数据库分析与建立字段名 数据类型 字段长度 字段说明
id 自动编号 (主键)
UserName 文本 10 用户名
Password 文本 10 密码
manager表结构
6.4.2 SQL语言
SQL包括了所有对数据库的操作,主要是由 4个部分组成,分别是:
数据定义:定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引 4部分。
数据操纵:其中包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和更新三种操作。
数据控制:对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务控制语句等。
嵌入式 SQL语言的使用规定:规定 SQL语句在宿主语言的程序中使用的规则 。
在本章节中,使用 Query或 ADOQuery控件时,已经接触到了 SQL语句,? 学生学籍管理? 系统使用了大量的 SQL语句操纵数据表,这里对 SQL的数据操纵,如数据查询,数据更新等作一介绍 。
1.数据查询无条件查询
SELECT语句中无 WHERE条件和 ORDER BY排序字句,如:
SELECT Snum,sName,Sex FROM info
条件查询
SELECT * FROM info WHERE ClassName =?W0318? AND Sex =?女’
排序查询
SELECT sName,Sex FROM info WHERE ClassName =?W0318? ORDER BY EnrollDate DESC
排序查询
ELECT info.Snum,info.sName,info.Sex,ClassDep.ClassName
FROM info,ClassDep
WHERE info.ClassName = ClassDep.ClassName
2.数据更新
数据插入插入的语句格式是:
INSERT INTO表名 (列名 1[,列名 2] …) VALUES( 列值 1[,列值 2] …)
数据删除语句格式为:
DELETE FROM表名[ WHERE 条件表达式]
数据修改
修改语句是按 SET子数据删除语句格式如下:
UPDATE 表名 SET 列名 =列改变值[ WHERE 条件表达式]
6.4.3 连接 MS Access数据库先创建 MS Access数据库的 ODBC数据源,然后使用 BDE管理器创建别名,最后用 Table或 Query控件连接数据库及数据表,实现对数据的操作;
使用 ADOConnection控件的 ConnectionString属性连接数据库,将
ADOTable或 ADOQuery控件关联 ADOConnection,并设臵 ADOTable或
ADOQuery控件的相关属性,关联到具体的数据表或查询获得欲操作的数据集。
6.4.4 数据操作与应用程序的实现
1.用户身份认证代码略
2.学生学籍管理窗体代码略第七章 项目实例 1-系部图书管理系统
7.1 项目意义
7.2 系统功能分析与设计
7.3 数据库分析与设计
7.4 项目的实现
7.5 项目实例小结
7.1 项目意义高校实行院系两级管理后,系部通过各种渠道收集有大量的书籍,包括教学参考书、教材、习题集等,图书内容专业性较强。随着专业图书的不断增多,系部往往成立资料室加以管理,供系部教师参考和借阅,加强图书资料的管理迫在眉睫。开发?系部图书管理系统?可实现对图书资料的基本管理。
7.2 系统功能分析与设计
“系部图书管理系统?应具备对图书的编目、借阅、查询、统计,
以及读者(教师)信息的管理等功能,具体如下,
对管理人员的身份认证,只有合法用户才能使用该系统;
对系部教师的信息管理,包括信息的增、删、修改、查询等;
图书资料的编目
根据专业划分图书类型,对图书类型信息的管理;
图书流通,包括图书借阅和还回,查询某一教师借阅状况;
图书状态查询,查询条件以多种方式组合,显示图书借阅状态;
图书借阅统计,统计各类型图书借阅情况。
按系统功能分析,划分如下的功能模块系部图书管理系统管理用户身份认证教师信息管理图书编目图书类别管理图书流通图书状态查询借阅统计
7.3 数据库分析与设计从系统功能要求来看,系统中的数据信息大致可以分为读者(教师)
数据、图书书目数据和流通数据,更为详细的数据信息如下:
管理员数据,包含的数据项有管理员的用户名和密码;
教师信息数据,应包含教师的工号、姓名、性别、所属教研室等数据项;
图书书目数据,反映了图书的基本信息,包括图书的书名、条形码、著者、
图书类别、出版社、出版时间、价格,isbn等;
图书类别数据,反映了图书的内容。系部图书专业性强,可对图书划分细类,
数据项包括类型代码和类型名称;
图书流通数据,主要反映图书的借阅状况,由此可对图书和读者(教师)作分类的查询统计。包含的数据项有借阅的教师、所借的图书以及借阅日期等。
根据系统的简易程度以及数据量的大小,本实例项目采用 Microsoft
Access 2000为数据库,数据库命名为? bkbro.mdb”。按系统功能分析出的数据信息,构建数据表,表结构见表 7.1—表 7.5。
字段名称 字段类型 大小 说明
mid 自动编号 本表的主键
username 文本 10 用户名
password 文本 10 密码(设为掩码)
表 7.1,manager”表-管理员表表 7.2,tinfo”表-教师信息表字段名称 字段类型 大小 说明
tid 文本 5 教师工号(设为主键)
tname 文本 8 教师姓名
tsex 文本 2 性别
sname 文本 20 所属教研室名称表 7.3,bookinfo”表-图书书目信息表字段名称 字段类型 大小 说明
booktm 文本 7 图书条码号(主键)
bookname 文本 50 书名
btype 文本 3 图书类别代码
bauthor 文本 20 著者
bpublisher 文本 30 出版社
bpubdate 日期 /时间 中日期 出版时间
bprice 货币 常规数字 价格(设小数位数 2位)
isbn 文本 10 ISBN
bz 备注 用于对图书的其他说明表 7.4,booktype”表-图书类别表字段名称 字段类型 大小 说明
typeid 文本 3 图书类别代码(主键)
typename 文本 20 类别名称表 7.5,borinfo”表-图书流通信息表字段名称 字段类型 大小 说明
id 自动编号 本表主键
teacherid 文本 5 教师工号
bktm 文本 7 图书条码
bordate 日期 /时间 中日期 借阅日期
7.4 项目的实现
7.4.1 系统主窗体
7.4.2 用户登录功能
7.4.3 教师信息管理功能
7.4.4 图书编目功能
7.4.5 图书类别管理功能
7.4.6 图书流通功能
7.4.7 图书查询功能
7.4.8 图书借阅统计功能
7.4.1 系统主窗体
1.建立菜单
2.创建工具栏
3.建立菜单和工具按钮的 Action
4,Action事件代码
7.4.2 用户登录功能
1.系统登录验证
2.退出系统
3.实现回车替代 Tab键跳转控件焦点
4.修改程序的启动窗体
7.4.3 教师信息管理功能
1,建立窗体,添加控件、设臵属性
2,窗体加载事件
3,单击修改、新增记录单选按钮事件
4,单击网格表头,数据排序
5,将修改记录加载到编辑区
6,保存记录
7,删除记录
8,退出教师信息管理窗体
7.4.4 图书编目功能
1.窗体加载事件
2.选择图书类别名,获取类别号
3.保存书目数据
4.删除书目数据
7.4.5 图书类别管理功能
1.窗体加载事件
2.编辑的记录加载到编辑区
3.修改、新增记录的保存
4.删除记录
7.4.6 图书流通功能
1.窗体界面和控件设臵
2.窗体初始化
3.借?、还?按钮单击事件
4.输入教师工号,显示借阅信息
5.输入图书条码,执行借阅或还回操作
6.退出图书流通界面
7.4.7 图书查询功能
1.窗体界面和控件设臵
2.窗体初始化
3.获取图书类型代码
4.图书状态查询,显示查询结果
5.退出查询界面
7.4.8 图书借阅统计功能
1.窗体界面和控件设臵
2.窗体初始化
3.获取图书类型代码
4.借阅统计,显示统计结果
5.退出借阅统计
7.5 项目实例小结
“系部图书管理系统?是一个完整的、有一定实用性的小型数据库应用程序。在项目中应用到了 MDI多文档界面和 ADO数据访问技术。通过本项目实例的学习,读者应该掌握信息管理系统的分析、
设计和实现方法。如将该实例的功能进一步完善,采用 SQL Server
2000等大型数据库系统,则更具应用价值。
第八章 项目实例 2-小区物业管理系统
8.1 项目意义
8.2 系统功能分析与设计
8.3 数据库分析与设计
8.4 项目的实现
8.5 项目实例小结
8.1 项目意义本项目实例从小区管理最基本的内容出发,解决物业管理中各种数据信息的录入和查询,实现了如楼盘信息、住户信息、报修信息、物业管理费缴费登记等功能,可基本满足一般应用需求。
8.2 系统功能分析与设计
本项目所要达到的功能分析如下:
对用户的身份认证,只有合法用户才能使用该系统,且用户有不同的权限,最高级的系统用户能增、删普通用户以及对普通用户权限的分配;
用户可修改系统管理员分配给自身的初始密码;
小区楼盘信息管理,包括楼盘信息的查询、修改、删除、新增等;
小区住户信息管理,根据门牌号查询住户信息,修改、增加、删除用户信息等;
车辆场管理,进入小区停车场发放停车牌,离开小区时收取停车费用,
并可统计在一定日期内停车场的收费记录;
物业收费管理,小区住户以月为周期交纳物业管理费,包括水费、电费、
燃气费等,并能以月为单位统计收费情况;
住户报修信息管理,查询某个时间段内报修项目以及维修情况;
住户投诉信息管理,投诉信息的添加、编辑、查询等。
系统功能模块小区物业管理系统用户登录系统用户管理楼盘信息管理住户信息管理停车场管理物业收费管理报修信息管理住户投诉信息管理发放停车牌

收费收费统计
8.3 数据库分析与设计
用户信息数据:用户登录系统需身份认证,故用户信息包含用户名和密码数据项;
用户权限数据:用户权限的设定有两种方法,一种是用不同的数值表示用户的权限大小,
如用? 0”表示系统用户,? 1”表示第一级别普通用户,? 2”表示第二级别的普通用户,以此类推,即用户权限以级别划分,同一级用户的权限相同。采用这种方式设定权限,那么权限数据,即不同的数值,附加在用户信息数据中即可;第二种方式是单独构建用户权限数据,
数据项包括用户名和允许操作的菜单项代码。由此可见,采用这种方式的用户权限没有固定级别,权限的不同在于所允许操作的菜单不同。本项目实例采用第二种方式设定用户权限。
菜单项数据:罗列系统中的菜单项目,为用户权限的设定作基础。数据项包括菜单项代码和菜单名称;
小区楼盘信息数据,反映了楼盘的基本特征,数据项门牌号、业主姓名、房型、建筑面积、
土地号、产权证号以及楼盘出售或出租情况;
住户信息数据:包括门牌号、业主姓名、常住人口、房型、联系电话等数据项。
停车场收费数据:包括停车牌号、入场时间、离场时间和收费金额等数据;
物业收费数据:包括缴费的住户门牌号、各类收费项目、收费时间等数据;
报修信息数据:包括报修人、报修日期、报修内容、维修人以及是否维修等数据;
住户投诉信息数据:包括投诉人、联系电话、投诉日期、投诉内容、解决投诉的负责人数据。
根据系统功能模块和数据库分析,创建的如下数据库文件(见表 8.1—表 8.9)
表 8.1,t_user.db”-管理员表字段名称 字段类型 大小 说明
id + 本表的主键,自动编号
Name A 15 用户名
PassWd A 20 密码表 8.2,t_qxb.db”-用户权限表字段名称 字段类型 大小 说明
Name A 20 用户名,主键
Cdx A 3 所允许操作的菜单项编号表 8.3,t_cdx.db”-菜单结构表表 8.4,t_lpb.db”-楼盘信息表字段名称 字段类型 大小 说明
Cdx A 3 菜单项编号,定义为主键
Cdm A 20 菜单名称字段名称 字段类型 大小 说明
id + 主键,自动编号
mph A 15 门牌号
Hz A 15 业主姓名
Hx A 30 房型
Cz L 是否出租,逻辑型
Cs L 是否出售,逻辑型
Cqh A 30 产权证号
Mj N 建筑面积
Tdh A 30 土地号表 8.5,t_zhb.db”-住户信息表表 8.6,t_tcb.db”-停车场数据表字段名称 字段类型 大小 说明
mph A 15 门牌号,定义为主键
Hz A 15 户主姓名
Hx A 30 房型
Czr S 常住人口
Dh A 20 联系电话
Bz A 100 备注字段名称 字段类型 大小 说明
id + 自动编号,主键
bh A 3 停车牌号
Je N 收费金额
Rcsj A 20 车辆入场时间
Lcsj A 20 离场时间
Zt A 1 车辆状态表 8.7,t_sfb.db”-物业管理收费表字段名称 字段类型 大小 说明
id + 自动编号,定义为主键
bh A 6 收费编号,以年月表示
mph A 15 门牌号
sf N 水费
df N 电费
qf N 燃气费
Wgf N 物业管理费
Qtf N 其他费用
sfsj A 10 收费时间表 8.8,t_bxb.db”-报修信息表字段名称 字段类型 大小 说明
id + 自动编号,主键
Name A 10 报修人姓名
Bz A 100 报修内容
rq A 8 报修日期
Wxr A 10 维修人
Wxf L 维修否,逻辑型字段表 8.9,t_tsb.db”-投诉信息表字段名称 字段类型 大小 说明
id + 自动编号,主键
Name A 15 投诉人姓名
Phone A 11 投诉人联系电话
Bz A 100 投诉内容
Rq A 8 投诉日期
Fzr A 15 负责人
8.4 项目的实现
8.4.1 设臵 BDE,连接数据库
8.4.2 系统主窗体
8.4.3 用户登录功能
8.4.4 系统用户管理功能
8.4.5 用户密码更改功能
8.4.6 楼盘信息管理功能
8.4.7 住户信息管理功能
8.4.8 停车场管理功能
8.4.9 物业收费信息管理功能
8.4.10 报修项目管理功能
8.4.11 投诉信息管理功能
8.5 项目实例小结
“小区物业管理系统?是一个简化的小型数据库应用程序,如要真正运用到实际,还需根据具体情况调整和完善,实际项目中还应有更多的功能和更复杂的数据库结构。程序中用到了多权限用户的管理,
这在项目中有着广泛的实用意义,通过本实例的学习,读者应掌握用户权限管理的技巧。
第九章 项目实例 3- Delphi控制 Excel
9.1 项目意义
9.2 项目目标分析
9.3 建立数据库和数据表
9.4 项目的实现
9.5 项目实例小结
9.1 项目意义数据报表是企事业单位上报和下达的重要信息载体,随着信息化建设的不断推进,在实际的工作中得到了前所未有的应用。因此,数据报表已经成为管理信息系统中重要的一项功能,并且,由于数据的多样性和统计信息的增加,数据报表的系统实现变得越来越复杂。
Delphi是一个高效的可视化数据库管理信息系统开发工具,.尽管 Delphi
开发环境中提供了报表控件,如以前版本提供的 Quick Report控件、
Delphi 7提供的 Rave控件组,但在制作复杂报表时显得不够理想,比如中文输入、数据格式的控制等,且不能让用户对生成的报表进行改动,
程序控制很难实现。 Excel作为现代办公常用的电子表格制作工具,以它的易操作性和实用性,得到了各行业办公人员的青睐。
本实训项目将以高等院校?教务信息管理系统?中一个输出?课程设计评分表?的功能模块为例,说明如何使用 Delphi控制 Excel输出格式化的报表。
9.2 项目目标分析项目所要到达的目标是,以?教务信息管理系统?的数据信息为基础,
由用户选择班级,自动生成该班某一门课的?课程设计评分表?,并输出至 Excel。程序运行界面如图 9.1所示。
图9.
1
程序运行界面生成的 Excel数据报表的格式如图 9.2所示
9.3 建立数据库和数据表
9.3.1 建立 SQL Server 2000数据库
9.3.2 创建数据表
9.4 项目的实现
9.4.1 建立窗体与控件设臵
9.4.2 生成 Excel报表
9.5 项目实例小结使用 OLE技术可以灵活地操纵 Excel,输出符合需求的报表,项目实例完整的演示了控制 Excel格式输出的过程。在完成本项目时,格式的编辑花费了大量的时间,由此而来的是格式化输出的代码也增加了,同时也降低了输出报表的效率。
报表往往有固定的格式,而对于固定内容无需在 Delphi中用代码实现。程序对
Excel的控制输出,仅仅是可变的部分。如图 9.2中,表格的表头、表格的边框线、页边距、行高、列宽、字体样式等等,都是不变的,变化的是表格的标题和学生的信息。
在实际应用中,可在 Excel中编辑报表,并将固定内容保存为模板。然后通过
Delphi编程打开模板文件,对模板文件写入需要的标题和学生信息,这样可以简化工作量,提高报表生成效率。
第十章 项目实例 4- DVD租赁管理系统
10.1 项目意义
10.2 系统功能分析与功能模块
10.3 数据库分析与设计
10.4 项目的实现
10.5 项目实例小结
10.1 项目意义本实训项目将开发一套? DVD租赁管理系统?,初步实现 DVD光盘管理、会员管理以及租赁业务、查询统计等功能。
10.2 系统功能分析与功能模块
会员是以?年?为单位入会的,入会时需提供真实的个人信息,
且每年需交付会员费,A类会员 100元 /年,B类会员 /60元 /年;
会员登记入会后,发放会员卡,A类会员编号以字母? A”开头,B
类会员编号以字母? B”开头,编号长度为 6位,租借光盘时需出示会员卡。
在交付了会费的有效期内,A类会员累计可租借 4部影碟,B类会员累计租借 2部影碟,租借价格为 1.5元 /部 ·天;
非会员用户以支付押金的方式租借光盘,押金为 50元
非会员用户支付押金后,发放一张 5位长度、顺序编号的租借卡,
租借光盘时需出示租借卡。仅当归还所有租借的光盘后,收回租借卡,退还押金;
非会员用户租借光盘的价格为 2元 /部 ·天,且每次最多租借 1部电影;
DVD
租赁管理系统系统管理租赁管理查询统计会员信息管理光盘信息管理光盘店内编号管理会费、押金收支情况租借业务归还业务用户租赁情况光盘租赁情况押金、会费缴付功能模块
10.3 数据库分析与设计从系统功能模块可以看出,系统中的数据信息包括:
会员信息:包括会员的姓名、性别、地址、单位、联系电话、会员类别、有效期等基本数据信息。由于会员的姓名可能重复,还需包含一个区别于其他会员的唯一信息,如会员编号。当会员租借光盘后,还需记录该会员已借数量。
光盘信息:是以种类来记录数据信息的,包括光盘号、名称、价格、所属类别、出版单位、发行日期、导演、主演、进货数量等基本信息,当有租赁时,
还需记录库存量。
店内编号信息:光盘数据信息记录了光盘本身的信息,对于同一种光盘,其光盘号是相同的。对外租赁时,需有唯一信息表明租借的光盘是同种光盘中的哪一张,故还需对每张光盘赋予一个店内的编号,以便流通。
租赁信息:会员租借光盘后,需记录租借情况,包括会员编号、光盘店内编号、租借日期、归还日期等信息。租赁信息也可用于租借情况查询。
收入信息:主要包括收入的日期、类别(租金、押金、会费等)以及金额。
表 10.1 MemberInfo(会员信息)表数据表结构如下字段名称 字段类型 大小 说明
Mem_ID 文本 6 会员编号(主键)
Men_Name 文本 8 姓名
Sex 文本 2 性别
Address 文本 50 家庭地址
Telephone 文本 20 联系电话
Mem_Class 文本 1 会员类别
Deadline 日期 /时间 短日期 有效期
Borrow_Num 数字 长整型 已借光盘数表 10.2 CD_Info(光盘信息 ) 表字段名称 字段类型 大小 说明
CD_ID 文本 10 光盘号(主键)
CD_NameCn 文本 50 中文片名
CD_NameEn 文本 100 英文片名
Price 货币 定价(小数位数 2位)
Num_CD 数字 整型 所含光盘数
Show_Time 数字 整型 片长
Publisher 文本 50 出版单位
Publish_Date 日期 /时间 发行时间
Director 文本 50 导演
Role_Leading 文本 50 主演
Intro 备注 简介
Photo 文本 14 图片文件名( CD_ID+后缀名)
Num_Buy 数字 整型 引进数量
Num_Store 数字 整型 库存量
Times_Borrow 数字 整型 租借次数
CD_Key 文本 50 关键字表 10.3 CD_Store(光盘 _店内编号 )
字段名称 字段类型 大小 说明
CD_ID 文本 10 光盘号
Store_ID 文本 10 店内编号(主键)
表 10.4 BorrowInfo(租赁信息 )表字段名称 字段类型 大小 说明
Store_ID 文本 10 店内编号(主键)
User_ID 文本 6 会员编号
Borrow_Date 日期 /时间 (常规日期) 借出日期
Return_Date 日期 /时间 (常规日期) 归还日期
Income 货币 租金(小数位数 2位)
Yes_No 文本 1 是否归还(值为 1表示已归还,0表示出借中,未归还)
表 10.5 Income(收入信息)表字段名称 字段类型 大小 说明
id 自动编号 (主键)
Date_Time 日期 /时间 短日期 日期
Class_In 文本 4 类别:会费、押金、租金
User_ID 文本 6 缴付人
Money_In 货币 收入
Money_Out 货币 退还押金
10.4 项目的实现
10.4.1 会员信息管理
10.4.2 光盘信息管理
10.4.3 光盘店内编号管理
10.4.4 会费、押金的缴付
10.4.5 租借 /归还模块
10.4.6 查询统计模块
10.5 项目实例小结系统中,会员和光盘信息的管理几乎没有复杂的算法,且操纵的数据表仅限于 MemberInfo和 CD_Info。项目实例开发难度较高的集中在租借 /归还和查询统计模块,因为牵涉到多表的关联查询,且需多次判断条件。对于这部分内容的开发,可先构思程序的流程图,分析各种可能的情况,然后才着手代码的编写,这样能避免程序开发的无序,避免判断条件的遗漏,起到事半功倍的效果。
注:本书中所有实例的程序代码略