为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

delphi可视化编程讲稿

2017-09-02 50页 doc 368KB 24阅读

用户头像

is_842972

暂无简介

举报
delphi可视化编程讲稿delphi可视化编程讲稿 Delphi的窗体与组件 Delphi的窗体与组件 DELPHI的窗体与组件 ................................................................................................................................... 1DELPHI的窗体与组件 1.6 窗体介绍 ...........................................................
delphi可视化编程讲稿
delphi可视化编程讲稿 Delphi的窗体与组件 Delphi的窗体与组件 DELPHI的窗体与组件 ................................................................................................................................... 1DELPHI的窗体与组件 1.6 窗体介绍 ....................................................................................................................................... 4 1.6.1 窗体的属性 ............................................................................................................................... 4 1.6.2 窗体的事件 ............................................................................................................................... 7 1.6.3 窗体的方法 ............................................................................................................................... 8 1.6.4 创建新窗体 ............................................................................................................................... 8 3.3 使用焦点............................................................................................................................................. 14 3.1 与输入输出有关的控件 .................................................................................................................... 14 3.1.1 Label控件 .................................................................................................................................... 15 3.1.2 Edit控件 ...................................................................................................................................... 15 3.1.3 Memo控件 .................................................................................................................................. 17 3.1.4 MaskEdit控件 .............................................................................................................................. 18 3.2 使用对话框函数与对话框过程 .......................................................................................................... 20 3.2.1 ShowMessage与ShowMessageFmt过程 ..................................................................................... 20 3.2.2 MessageDlg与MessageDlgPos函数 ........................................................................................... 20 3.2.3 CreateMessageDialog函数 ........................................................................................................... 22 3.2.4 InputBox与InputQuery函数 ....................................................................................................... 22 3.4 用于分组的控件 ................................................................................................................................. 23 3.4.1 Panel控件 .................................................................................................................................... 23 3.4.2 GroupBox控件 ............................................................................................................................ 24 3.5 按钮类控件 ......................................................................................................................................... 24 3.5.1 button控件 ................................................................................................................................... 24 3.5.2 BitBtn 按钮组件 .......................................................................................................................... 26 3.5.3 复选框组件(CheckBox)(参看word段落设置) ...................................................................... 27 3.5.4 单选按钮组件(RadioButton)(参看word排序) ............................................................ 27 3.5.5 单选分组框组件(RadioGroup) ............................................................................................... 28 3.5.6 SpeedButton加速按钮组件 ....................................................................................................... 29 3.6 列表类组件的使用 ............................................................................................................................. 29 3.6.1 TListBox组件 .............................................................................................................................. 29 3.6.2 TComboBox组件 ...................................................................................................................... 30 3.7 TTIMER时钟组件的使用 ................................................................................................................... 32 3.7.1 设计一个电子表 ....................................................................................................................... 32 3.7.2 设计一个计时器 ....................................................................................................................... 32 3.7.3 设计一个流动字幕板 ................................................................................................................ 32 9.1 菜单 .................................................................................................................................................... 33 9.1.1主菜单 ......................................................................................................................................... 35 9.1.2 弹出式菜单 ................................................................................................................................. 38 1 9.2 工具栏 ................................................................................................................................................ 38 9.3 TPAGECONTROL组件的使用 ................................................................................................................ 40 1.TPageControl组件的常用属性 .......................................................................................................... 40 TtabSheet的属性 .................................................................................................................................. 40 2.TPageControl组件的常用事件 .......................................................................................................... 41 10.1 公共对话框 ....................................................................................................................................... 41 10.1.1 打开对话框组件(OpenDialog) ............................................................................................. 41 10.1.2 保存对话框组件(SaveDialog) .............................................................................................. 42 10.1.3 字体对话框组件(FontDialog) ............................................................................................... 42 10.1.4 颜色对话框组件(ColorDialog) .................................................................................................. 43 10.1.5 打印对话框组件(PrintDialog) .............................................................................................. 44 10.1.6 打印机设置对话框组件(PrinterSetupDialog) ....................................................................... 45 10.1.7 查找对话框组件(FindDialog) ............................................................................................... 45 10.1.8 替换对话框组件(ReplaceDialog) ......................................................................................... 45 10.3 文件相关控件 ................................................................................................................................... 46 10.3.1 win3.1的文件相关控件 ............................................................................................................. 46 10.3.2 win3.2及sample的文件相关控件 ............................................................................................. 46 2 从本章开始,将介绍Delphi 编程的一些基本方法。通过这一部分的学习,可以了解开发Windows 环境下应用程序的一些关键技术,并可以方便、快捷地开发一般的应用程序。 为了简化编程工作,Delphi 提供了许多功能强大的函数和类。其中很重要的一部分就是组件类。本章将重点介绍常见组件及其编程应用。 现在深入普及的Windows操作系统中,方便快捷的人机交互界面主要是通过窗体和对话框实现的。在Delphi中,这些窗体和对话框就是程序设计阶段的窗体,Delphi的可视化设计工作就是在窗体中进行的。 组件所对应的类为TComponent,所有的组件都是由这个类派生来的。 通常,窗体中会有文字输入、滚动条、复选框、单选框、按钮等一系列组件,通过这些直观易懂的组件,可以方便的实现多种多样的功能。在Delphi中,这些运行期间出现在窗体和对话框中的组件称为可视组件,对应TControl子类。 在窗体中,不仅可以放置组件,还可以放置一些运行期间非可视的组件,对应其它的TComponent子类。这些不可视组件集中地实现了一些特殊的功能。比如,时钟控制等功能。 组件(可视组件)可分为两类:窗体组件和图形组件。 窗体组件对应TWinControl 子类,是基于系统窗体的可视组件,具有窗体句柄,可作为输入焦点并含有其它组件,例如TEdit组件。 图形组件对应TGraphicControl 子类,没有窗体句柄,不可作为输入焦点,也不能含有其它组件,例如Label 组件。 图形组件比窗体组件使用的资源少,尤其在组件数量比较多的情况下最好使用图形组件。组件组的关系如图所示。 窗体和组件的关系非常密切。从直观的角度来讲,窗体就像一个容器,其中包容了可视组件和非可视组件。从程序代码的角度来看,一个窗体对应一个源程序文件,其中定义了窗体中所有组件的对象。 窗体和组件之间除了具有上述的不同点之外,还具有一些相同点。例如,从面向对象编程的角 3 度来看,所有组件都是TComponent 类派生类的一个对象。窗体类(TForm)也是从TComponent 类派生的,所以可以将窗体看成一个特殊的组件。 有些组件也具有窗体的“容器”属性,也就是在这些组件中可以放置其它组件,通常这些组件称为容器组件。例如在Tpanel组件中可以放置TEdit 组件,Tpanel 组件就是一个容器组件。 Delphi 中的所有组件是在可视组件库(Visual Component Library,缩写为VCL)中封装的。可视组件库是Delphi 中非常重要的一部分,不仅封装了所有组件对应的类,还封装了一些通用的类。所有的这些类都是由一个基类派生出来的,也就是TObject 类。了解可视组件库对于学习组件、使用Delphi 很有帮助。 1.6 窗体介绍 窗体是编写Delphi程序的工作底稿区,凡是与用户进行交互的程序都得使用窗体来设计用户界面。在程序运行时,窗体实际上就是标准的应用程序主窗口、对话框及多文档界面的主窗口。 根据不同的窗体类型,Windows环境中的应用程序可以分为下面的三类: ? 单文档界面(SDI)应用程序这种应用程序同时只能打开一个文档。例如Windows 系统附件中的“画图”程序,只能同时编辑一个图像文件。 ? 多文档界面(MDI)应用程序一般这种应用程序具有一个父窗体和多个子窗体,可以同时打开多个文档,分别在多个子窗体中显示。例如常用的图像处理软件PhotoShop 等,可以同时编辑多个图像。 ? 对话框应用程序这种应用程序的主界面基于一个对话框类型的窗体。例如Windows系统附件中的“磁盘扫描”程序。 此外,有些应用程序在运行期间可以总是显示在桌面的最前端,例如在Windows中按下系统热键Ctrl+Alt+Del,激活的关闭程序窗体会一直显示在其它应用程序的窗体之上,除非退出该程序。 窗体由标题栏、工作区和边界组成。 1.6.1 窗体的属性 对于在程序设计时首先遇到的窗体这一组件,让我们先来了解一下的它的属性。窗体的属性是与其外观密切相关的。 对于组件的属性除必要进行设定的外,一般使用它的默认值。 1(窗体的位置与大小 窗体的位置与大小是由属性Left、Top、Width、Height、ClientWidth、ClientHeight、Position、Align来确定的。 一般来说前四个属性可以定义控件在它们所在的容器组件中的物理位置和大小,在Delphi中的可见组件都有这四个属性,而不可见组件没有这些属性。 , 窗体的高度:Heigth属性 , 窗体的宽度:Width属性 4 , 窗体的左上角相对于父容器(屏幕)的坐标:Top属性和Left属性 , Align属性用来设定窗体相对与父容器(屏幕)的对齐方式,该属性为枚举类型,取值如下 取值 含义 alBotton 窗体位于屏幕的下方,宽度为整个屏幕宽(Width属性失效),高度为Heigth属性值 alClient 窗体占据屏幕的中部,Width与Height属性失效 alLeft 窗体位于屏幕的左方,宽度为Width属性值,高度为整个屏幕(Heigth属性失效) alNone Width与Height属性有效,以及其他属性有效 alRight 窗体位于屏幕的右方,宽度为Width属性值,高度为整个屏幕(Heigth属性失效) alTop 窗体位于屏幕的上方,宽度为整个屏幕宽(Width属性失效),高度为Heigth属性值 , Position属性:在应用程序运行阶段,确定窗口在屏幕上的位置。只有当Align属性为alNone 时才有效,属性为枚举类型,取值如下: 取值 含义 poDesigned 窗体运行时显示的位置和大小与设计相同 poDefault 窗体每次显示时,与上次比较,往右下角移动了一些位置;窗体的高度和宽度 由Windows 决定 poDefaultPosOnly 窗体以设计期间的大小显示,窗体显示的位置较上次向右下角移动了一些。如 果窗体以设计时的大小不可以在屏幕上完全显示,就移动到屏幕的左上角显示。 poDefaultSizeOnly 窗体以设计期间的位置显示,窗体的大小由Windows 决定 poScreenCenter 窗口尺寸由窗体的Height和Width属性参数确定,但是窗口位于屏幕的中央 poDesktopCenter 窗体以设计期间的大小显示;窗体显示的位置总在屏幕的中间。 2. 窗体的名称与标题 Caption属性确定了窗体的标题,当窗体最小化后,Caption属性值为图标的文本说明。 不要与Name属性混淆,Name属性是该组件对象的变量名。当工程中有多个窗体时,其名称不能相同。 通常,对于多文档界面(MDI)应用程序,当主框架窗体中的子窗体最大化显示的时候,用程序的标题栏中显示的内容为“<应用程序名>-<打开的文档名>”;当子窗体非最大化窗体显示的时候,主框架窗体中只显示应用程序的名称,子窗体有自己的标题栏,其中显示该窗体打开的文件名。所以,当窗体的显示方式发生了改变后,应该立即改变标题栏中的内容。 3.窗体的外观与风格 与窗体的外观与样式有关的属性有:BorderIcons、BorderStyle、FormStyle、WindowStyle、HorzScrollBar和 VertScrollBar属性等。 , 属性FormStyle可以分别实现各种类型的应用程序,取值如下: 取值 含义 fsMormal 普通的窗体 5 fsMDIChild MDI(多文档窗体)的子窗体 fsMDIForm MDI(多文档窗体)的主窗体 fsStayOnTop 位于桌面顶层的窗体 , 定制窗体的标题栏:BorderIcon属性,该属性为集合类型,取值如下: 取值 含义 biSystemMenu 在窗体的标题栏中显示系统菜单 biMinimize 在窗体的标题栏中显示最小化按钮 biMaximize 在窗体的标题栏中显示最大化按钮 biHelp 在窗体的标题栏中显示帮助按钮, 只有窗体的BorderStyle 属性设置为 bsDialog或者窗体属性BorderIcons 中不包括biMinimize 和biMaximize 时,biHelp 设置才有效。 , 确定窗体的边界类型:BorderStyle属性,该属性为枚举类型,取值如下 取值 含义 bsDialog 标准对话框边框,边框不能移动 bsSingle 单线框,边框不能移动 bsNone 窗体没有边框,也没有标题栏,边界的大小不可以改变, 边框不能移动。 bsSizeable 标准可移动边框 bsToolWindow 小标题单线框, 另外,对于这种风格的窗体,属性BorderIcons 中设置 的biMinimize 和biMaximize 并不起作用。 bsSizeToolWin 小标题可移动单线框. 对于这种风格的窗体,属性BorderIcons 中设置 的biMinimize 和biMaximze 也不起作用。 注意:窗体属性BorderIcons的设置与属性BorderStyle的设置可能会发生互斥,例如属性BorderIcons的biMinimize和biMaximize会与属性BorderStyle的bsDialog冲突,属性BorderIcons的biHelp会与属性BorderStyle的bsSizeable冲突。 , 设置窗体的显示状态:WindowStyle属性,该属性为枚举类型,取值如下 取值 含义 wsNormal 窗体运行时显示的位置和大小与设计相同 wsMinimal 窗体运行时,最小化 wsMaximized 窗体运行时,最大化 4(Font 属性 属性Font 用来设置窗体中文字的字体、颜色和字号等。 如果将窗体中组件的属性ParentFont 设置为True,那么该组件的字体设置就与其父级窗体的字体设置完全一样了。所以在程序设计的时候,为了保持整个系统风格的统一,应该使工程中的窗体风格尽量一致,可以先设置窗体的Font 属性,然后将窗体中所有组件的ParentFont 属性设置为True 就可以了。一般不要单个地对窗体中的组件进行Font 属性的设置。 6 5(Icon 属性 属性Icon 用来指定标题栏中显示的图标。 单击对象编辑器Icon 属性右边的省略号按钮,在弹出的Picture Editor 对话框中点击Load... 按钮,就可以装入一个制作好的图标。 使用Delphi 自带的工具Image Editor 可以方便地制作图标。通过菜单Tools/ Image Editor可 运行Image Editor 编辑制作图标。 如果需要动态地改变窗体Form1 中的图标,可以调用下面的过程: Form1.Icon.LoadFromFile('Icon1.ICO'); 其中Icon1.ICO是要在窗体Form1标题栏中显示的图标文件名。 1.6.2 窗体的事件 窗体的事件很多,常用事件: 1(Create事件和Destroy事件 , 当创建窗体时,就产生Create事件; , 当释放窗体所占用的空间时,就会产生Destroy事件。 这两个事件过程的基本语法形式为: procedure TForm1.FormCreate(Sender: TObject); procedure TForm1.FormDestroy(Sender: TObject); 应用: 通常整个程序的初始化工作放在主窗体的Create事件中进行处理,如读入将要用到的图形资源 等,而这些资源的释放则放在主窗体的Destroy事件中进行处理。例如: procedure TForm1.FormCreate(Sender: TObject); begin form1.Caption:='欢迎使用~'; form1.Color:=clred; form1.Font.Color:=clblue; form1.Font.Name:='隶书'; form1.Font.Size:=20; form1.Font.Style:=[fsbold,fsunderline,fsitalic]; button1.Caption:='请按键'; button1.Left:=130; button1.Top:=500; button1.Height:=50; button1.Width:=100; end; 当创建窗体,并且Visible属性设置为True时,下列事件按顺序出现:Create、Show、Paint、 7 Activate。参见表1-14 2(Show和Hide事件 Show事件和Hide事件分别在窗体显示与隐藏时被触发。 , 当窗体的Visible属性设置为True时,窗体被显示,同时触发Show事件; , 当窗体的Visible属性设置为False时,窗体被隐藏,同时触发Hide事件。 这两个事件过程的基本语法形式为: procedure TForm1.FormShow(Sender: TObject); procedure TForm1.FormHide(Sender: TObject); 3( Activate和Deactivate事件 , 当激活窗体时,就产生Activate事件; , 当窗体不再激活时,就会产生Deactivate事件。 这两个事件过程的基本语法形式为: procedure TForm1.FormActivate(Sender: TObject); procedure TForm1.FormDeactivate(Sender: TObject); 4(关闭窗体close和closequery事件参见表1-15 5(改变窗体大小时Resize事件和paint 事件 在调整窗体的大小时,就会出现Resize事件。该事件过程的基本语法形式为: procedure TForm1.FormResize(Sender: TObject); 1.6.3 窗体的方法 参见常见方法列表:p25 Show Showmodal 窗口可以分为模态显示和非模态显示两种显示形态。 采用模态显示时用 ShowModal 方法打开窗口。打开模态窗口之后,同一程序其他窗口的操作被禁止,直到把模态窗口关闭,其它应用程序的窗口可以被操作。 非模态显示的窗口用 Show 方法打开。非模态窗口打开后可以不关闭,然后再去打开其他窗口。 1.6.4 创建新窗体 一个对象的生命周期是从它被创建那一刻开始。 创建窗体: 窗体是一个对象,要想在程序中操作它,必须先调用其create函数创建它。 要注意程序设计状态与程序运行状态的区别。设计好的窗体在运行时,都应该首先创建出来。 主窗体: 当应用程序运行时,首先显示出来的窗体一般称之为主窗体。主窗体一般由应用程序自动创建。但一个应用程序,一般不会只有主窗体,其他窗体有两种不同的创建方式。 包括:静态创建(自动创建)和动态创建(手动创建)。 8 1、 静态创建新窗体 , 打开已有工程文件 , 新建窗体 , 建立主窗体与该窗体的联系。 , 引用单元unit2。在进行编译时系统会自动提示并添加代码。也可手工在主窗体单元中 添加对单元2的引用代码。 Uses unit2 , 保存并运行。 2、 设置工程主窗体和自动创建与手动创建窗体的方法 9 3、 动态创建新窗体 静态创建的窗体在运行时将全部装入内存。当窗体很多时,会引起系统资源紧张。通过动态创建的方法,在需要调用某个窗体时,临时创建,使用完后立即释放。 , 修改工程选项。选择菜单“project|options”,系统打开“project options”对话框,在forms 选项卡中,所有窗提出现在自动创建列表框中,选择不需自动创建的窗体,移到 “Availableforms”列表框中。 , 修改程序代码。 Form2:=tform2.create(nil); Form2.show; , 动态创建的窗体在运行结束后,一般应手动释放,以释放其所占用的内存空间。释放 窗体的方法一般有两种的destroy,free。一般用free,两者在用法上稍有不同,请查资 料了解。 Form2.destroy; Form2.free; Free: Destroys an object and frees its associated memory, if necessary. Release: Use Release to destroy the form and free its associated memory. Release returns immediately to the caller. It does not wait for the form to be freed before returning. To free a form, call its Release method, which destroys the form and releases the memory allocated for it after all its event handlers and those of the components it contains are through executing. 注意:比较两个工程文件的不同。 练习: 1. 设计一个不含系统菜单的窗体,添加一个按钮实现窗体的关闭。 2. 设计一个不能改变大小的窗体。 3. 设计一个透明窗体。 提示:首先设置窗体的TransParentColor -> True; 然后设置窗体的Color与TransParentColorValue为相同值 4. 新建一个工程,创建三个窗体form1,form2,form3,将form1设为主窗体,在form1放置 button1,button2两按钮,选择button1,以无模式显示Form2,选择button2,以有模式显示 Form3。 5. 新建一个工程,创建三个窗体form1,form2,form3,将form1设为主窗体,在form1放置 button1,button2两按钮,form2由应用程序自动创建,选择button1,以无模式显示Form2,form3 手动创建,选择button2,先创建form3,并以有模式显示Form3。 10 DELPHI常见属性及说明 属性 说明 ALIGN 设置组件对齐(同其父容器)方式 BORDERSTYLE 设置组件边框形状 CAPTION 设置组件标题 CTL3D 设置组件边框是否为3D模式,若BORDERSTYLE设置为BSNONE则此 属性无效 COLOR 设定组件背景颜色 CURSOR 设定鼠标经过组件时光标所显示的形状 ENABLED 设定组件是否能使用,当设为FALSE时组件会呈灰色 FONT 设定组件内文字的字型、字体大小、颜色等 HEIGHT 设定组件高度 HELPCONTENT 用来为帮助说明文件中的索引值建立关联 LEFT 设定组件与父组件左边框间的距离 POPUPMENU 设定鼠标右键(弹出式)快捷菜单 TABORDER 设定组件在按下TAB键后焦点(FOCUS)移动的顺序 TABSTOP 若设为FALSE,则按TAB键后焦点并不会在此组件上停留 TOP 设定组件与父组件上边框间的距离 VISIBLE 设定组件是否可见,此属性只在执行时起作用 WIDTH 设定组件显示宽度 DELPHI常见事件及说明 事件 说明 ONCHANGE 当组件有所改变时触发的事件 ONCLICK 当在此组件上按下鼠标左键时触发的事件 ONDBLCLICK 当在此组件上双击鼠标左键时触发的事件 ONENTER 当焦点进入此组件时触发的事件 ONEXIT 当切换到其它组件使该组件失去焦点时触发的事件,但当切换到另一窗体或 另一应用程序时此事件不会触发 ONKEYDOWN 当在拥有焦点的组件上按下某个键时触发的事件,按键包括所有的英文、数 字键、方向键、功能键等 ONKEYPRESS 当在拥有焦点的组件上按下某个键时触发的事件,但按键只包括所有的英 文、数字键、TAB、BACKSPACE、ENTER、ESC ONKEYUP 当使用者放开键盘上的按键时触发的事件,按键看ONKEYDOWN 11 ONMOUSEDOWN 当鼠标键在某个组件按下时触发的事件(其参数包括哪个鼠标键被按下、是 否有特殊键(CTRL、ALT、SHIFT)被按下以及鼠标当前的坐标) ONMOUSEMOVE 当鼠标在组件内移动时触发的事件 ONMOUSEUP 当鼠标键在组件上方放开时所触发的事件 ONPAINT 在组件需要被重画时触发的事件,此时可进行自定义画法 窗体组件(FORM)常见属性 属性 说明 ACTIVE 指示此窗体是否拥有FOCUS ACTIVECONTROL 指示窗体中目前拥有FOCUS的组件 ACTIVEMDICHILD 指示主窗体中目前拥有FOCUS的子窗体 ACTIVEOLECONTROL 用于取得或设定此窗体上的OLE控制,以响应FOCUS改变 BORDERICONS 指定哪些ICON显示在窗体的TITLE BAR上 BORDERSYTLE 用以指定窗体BORDER外观及行为 CANVAS 提供使用者可在窗体上CLIENT内自行显示的画板,一般在ONPAINT事 件中使用 CLIENTHANDLE 提供可存取系统内部使用的MDI CLIENT WINDOW HANDLE CLIENTHEIGHT 窗体客户区高度 CLIENTRECT 窗体客户区所对应的矩形 CLIENTWIDTH 窗体客户区宽度 DEFAULTMONITOR 指定此窗体所显示的预设的显示器,用于多显示器环境下 DESIGNER 此窗体的设计界面,一般不用用户设定 DropTARGET 用以指定窗体是否为目前DRAG AND Drop动作的目标 FLOATING 用以指示此窗体是否正在停泊在另一个视窗内 FORMSTATE 用于指示此窗体所处状态 FORMSTYLE 用于指示窗体的样式 HELPFILE 用于指定HELP文件 ICON 指定窗体最小化时所显示的ICON KEYPREVIEW 指定此窗体是否需在目前的ACTIVE组件之前取得键盘输入 MDICHILDCOUNT 用于取得子窗体数目 MDICHILDREN 用于取得子窗体(数组) MENU 用于指定窗体主菜单 MODALRESULT 当窗体作用为MODAL对话框时,作为对话框的效果 MONITOR 用于指示窗体所显示的显示器 OLDCreateORDER 指定ONCreate和ONDESTROY事件何时发生 12 OLEFORMOBJECT 对包含在此窗体内的OLE对象指定OLEFORM界面 PARENT 设定此窗体的PARENT PARENTBIDIMODE 指定是否此窗体使用PARENT的BIDIMODE PIXELSPERINCH 表示此窗体设计时系统上字形的比例 POSITION 表示此窗体的大小及位置 PRINTSCALE 表示此窗体打印的比例 SCALED 用于指定窗体的大小是否依据PIXELSPERINTCH属性来指定 TILEMODE 用于指定TILE方法被调用时子窗体如何排列 VISIBLE 用于设定此窗体是否被显示 WINDOWMENU 如果窗体是一个MDI PARENT窗体,用于指定视窗的菜单 WINDOWSTATE 用于指定窗体如何显示于屏幕中 窗体组件(FORM)常见事件及说明 事件 说明 ONPAINT 当窗体必须重画时发生 ONHELP 当窗体收到HELP请求时发生 ONDRAGDrop 当一个对象拉进此窗体并丢下时发生 ONDRAGOVER 当一个对象拉进此窗体时发生 ONCONSTRAINEDRESIZE 在ONCANRESIZE事件发生后发生 ONCANRESIZE 当企图改变窗体尺寸时确认是否改变 ONRESIZE 当窗体尺寸改变时发生 ONSTARTDOCK 当对象开始停泊时发生 ONENDDOCK 当对象停泊结束时发生 ONUNDOCK 当窗体解除停泊时发生 ONDOCKDrop 当其它窗体停泊到此组件时发生 ONDOCKOVER 当其它窗体向此组件停泊接近时发生 ONGETSITEINFO 当有关停泊消息传回此窗体时发生 ONCreate 当窗体创建时发生 ONCLOSE 当窗体即将关闭时发生 ONCLOSEQUERY 在窗体即将关闭时确认是否真的关闭窗体 ONDESTROY 当窗体释放时发生 ONSHOW 当窗体显示时发生 ONHIDE 当窗体隐藏时发生 ONACTIVATE 当窗体获得FOCUS时发生 ONDEACTIVATE 当窗体失去FOCUS时发生 13 3.3 使用焦点 焦点focus就是光标,当对象具有焦点时,才能响应用户的操作,焦点就是对象接受用户操作(鼠标或键盘)的能力。 与焦点相关的属性: 主要有visible enabled,当他们都为true时,对象才能够获得焦点。 有些控件不具有焦点。,,哪些组件没有焦点呢, 获得焦点的方法: , 程序设计时,通过代码设定 ,调用组件的 setfocus方法 , 程序运行中:用户操作时 (1) 鼠标单击对象(visible enabled都为true) (2) 按键或+在当前窗体的各对象之间巡回移动焦点 (3) 按热键选择对象。 获得焦点的顺序: TabOrder属性决定控件的接收焦点的顺序。从0开始。 TabStop属性决定焦点是否能停在该控件上。False跳过该控件。 3.1 与输入输出有关的控件 Label(标签)一般放在对象的旁边,用来标记这些对象,从而对用户的操作进行提示,也可以用来显示信息。可以在标签中设置热键,也即在Caption属性值段中输入含有“&”的字串,当用户使用“Alt+关键字母”时,将自动选中它所指向的对象。方法是设置Label部件的 FocusControl属性,在值段中,选用与它关联对象的对象名称。 打开字体菜单,看一个具体的实例. Edit、MaskEdit、Memo部件都是用作接收、显示用户输入文本的。它们具有一些相同的属性。ReadOnly在运行时间内控制对象是否可以进行Windows的操作,当此值为False时,他们接受用户的输入。MaxLength可以设置输入文本的长度限制。用PasswordChar属性可以按照显示隐蔽密码的方法显示用户输入文本,例如,它的值为“*”,运行时,输入将用“*”来显示,从而提供了一种安全。当一个字段被加上高亮度显示时,按键操作会将这一字段删除,替换成当前的键盘输入。这种设置为操作提供了方便,您不必每次先删除原来的文本;但也可能会导致误删文本。将AutoSelect属性设置成False,这种替代功能就被取消了。 MaskEdit是格式文本输入对象。它的EditMask属性为它提供了过滤文本的格式。点击这一属性的省略按钮,会弹出过滤编辑对话框,除了Delphi提供的几种屏蔽格式,也可以自己编写。 Memo是备注框,与以上对象不同的是,它可以接收多行文本输入。将ScrollBars设置成ssVertical,可以为它加上一个垂直的滚行条。Align属性调整该对象在窗口中的对齐情况,有alNone(无对齐指定)、alBottom(底部对齐)、alClient(全窗口显示)等可以选择;而Alignment属性则决定了文本在框中的对齐显示格式。Lines属性访问的文本被存储在一个TStrings对象中,按动它 14 的省略按钮,可以通过对话框向它增加文本,也可以用程序对这一属性进行操作,以达到修改或增加备注文本的目的。 3.1.1 Label控件 Label控件在标准(Standard)页标签上,主要用于输出文本。 1( 常用属性 Caption 即标题属性,这是TLabel组件最重要的属性,用来设置该组件中显示的文本。 AutoSize 布尔型,用来决定标签是否自动随文本的长短而改变大小。 WordWrap 布尔型,用于设定组件文本宽于组件宽度时是否自动换行 Alignment 枚举型,用来决定标签中显示的文本的对齐方式 。 Enabled 布尔型,用来决定该组件是否能即响应用户的操作。 Visible 布尔型,用来决定在程序运行时组件是否可见 Font 该属性用来设置标签组件中显示的文本字体,是一个对象属性 。 ShowAccelChar 布尔型,用来确定标签的Caption是否出现表示热键的下划线。 Transparent 布尔型,用来确定标签是否为透明的。 2( 标签的应用 例1:利用标签设计并控制文本的投影效果。 包括静态设置属性,动态改变属性。 课堂练习:设计如图所示界面,要求.三个label都采用折行显示方式,对齐方式采用上下、左右均采用居中对齐,且当按热键A,B,C时编辑框1,2,3可分别获得焦点 3.1.2 Edit控件 1( TEdit组件的常用属性 Text 代表显示在编辑框中的文本。 ReadOnly 该属性用来决定编辑框中显示的文本是否可以修改。 PasswordChar 用来决定用户输入的字符是原样显示还是以密码方式显示。 CharCase 用来控制编辑框中文本的大小写。 AutoSelect 用来决定当编辑框获得焦点时,是否自动选定显示的文本。 BorderStyle 用来决定编辑框组件是否有边框及边框的样式。 CanUndo 用来指出对编辑框中显示内容的改变是否能够撤消。只读属性 HideSelection 用来决定当编辑框失去焦点时,选中的文本是否还是以选中的方式 提供视觉提示。 MaxLength 用来决定编辑框中最多能够输入或显示的字符个数。 Modified 运行属性,用来指示编辑框内容是否发生了改变。 SelStart 运行属性,用来设置或指示选中文本的第一个字符的位置,文本框 的第一个字符位置为0。 SelText 运行属性,用来设置或指示选中的文本。 15 SelLength 运行属性,用来设置或指示选中文本的长度。 例如:如果edit1.text为’abcdef’ 下列程序运行后,edit1选中的文本是什么呢? … edit1.SetFocus; edit1.SelStart:=1; edit1.SelLength:=3; … 2( TEdit组件的常用方法 SetFocus 该方法用于为编辑框设置焦点,无参数。 Clear 该方法用来清除编辑框中的所有文本,无参数。 ClearSelection 该方法用来清除编辑框中选中的文本,无参数。 SelectAll 该方法用来选中编辑框中的所有文本。 Undo 该方法用来撤消在编辑框中最近所做的编辑操作。 ClearUndo 该方法用来清除“撤消”缓冲区,从而不能对以前的操作做撤消操 作,该方法无参数。 CopyToClipboard 该方法用来把选中的文本复制到剪贴板上,相当于复制操作。 CutToClipboard 该方法用来把选中的文本移动到剪贴板上,相当于剪切操作。 PasteFromClipboard 该方法用来把剪切板上的文本粘贴到插入点处,相当于粘贴操作。 3( TEdit组件的常用事件 OnChange 当编辑框输入的text属性值发生改变时将触发该事件。 OnKeyPress 当用户按下键盘上的ASCII字符键时触发该事件。 OnKeyDown 当用户按下键盘上的任何键时都会触发该事件。 OnKeyUp 当用户按下任何一个键后再松开时将触发该事件。 参见p54例题2 练习: 1. 新建一个工程,窗体上一个文本框edit1,两个按钮,caption分别为“剪切”,“恢复”,运行后要求在edit1中输入文本,点“剪切”,把edit1中的内容剪切掉,点“恢复”,把edit1中的内容恢复出来。 2. 新建一个工程,窗体上文本框edit1,使用户输入字母一律转换为大写显示(焦点在最右端),保存。 3. 新建一个工程,实现功能限制:在edit1中只能输入10个字母,超过的在edit2中显示。保存。 4. 按照要求编写程序:新建一个工程,在窗体中添加两个文本框,名称分别为“Edit1”、“Edit2”,默认显示内容为空。请设置适当的控件属性,并编写适当的事件过程,使得程序运行时,如果在Edit1中每输入一个字符,则显示一个“*”,同时在Edit2中显示输入的内容。程序中不得使用任何变量。程序编写完毕后,运行,查看结果。 5. 新建一个工程,实现功能单击edit1框时,edit1中的内容被全选。保存。 6. 按照要求编写程序:新建一个DELPHI工程,在窗体中添加一个文本框,名称为“Edit1”。编写适当的事件过程,使得程序运行时,如果单击窗体,则可以使文本框移动到窗体左上角;如果在文本框中输入信息,则可以使文本框移动到窗体右上角。程序中不得使用任何变量,只允许通过 16 修改属性的方式移动文本框。程序编写完毕后,运行,查看结果。 7. 编写程序,实现功能,当输入数字时,正常显示,其他都不显示。 3.1.3 Memo控件 1( TMemo组件的常用属性 属性 说明 Caretpos 用来得到光标的位置.其中x表示所在列,y表示所在行,从0开始计数。 ScrollBars 用来设置备注框是否出现滚动条以及滚动条的种类。 Lines 按行处理文本。Tstrings类型,字符串数组,序号从0开始。 WordWrap 用来决定当输入的文本到达右边界时是否插入软回车,换到下一行输入。 WantReturns为布尔型,它确定在该组件中用户输入的回车键是作为文本的内容还是进入 窗体中。若WantReturns为True,则用户输入的回车键作为文本的部分; 若WantReturns为False,则用户输入回车键时,激活窗体中的其它在 WantReturns为False时,要在备注中输入回车,使用Ctrl+Enter。 WantTabs属性:该属性为布尔型,它确定在该组件中是否可使用Tab键。当WantTabs 为True可使用。若WantTabs为True,则用户不能使用Tab键来选定窗体 上的下一组件。也就是说从其它组件中,用户可以使用Tab键进入该组件, 但在该组件中使用Tab键不能进入其它的组件。 Modified 运行属性,用来指示memo内容是否发生了改变。 TEXT 用于取得组件中文本(字符串) 2( TMemo组件的常用方法 Add 该方法用来向字符串列表的尾部添加一个字符串。其语法格式如下: function Add(const S: string): Integer; virtual; Clear 该方法用来清空字符串列表。其语法格式如下: procedure Clear; virtual; abstract; Delete 该方法用来从字符串列表中删除一个指定的字符串。其语法格式如下: procedure Delete(Index: Integer); virtual; abstract; Insert 用来向字符串列表中插入一个字符串。其语法格式如下:procedure Insert(Index: Integer; const S: string); virtual; abstract; Move 该方法用来在字符串列表中移动字符串的位置。其语法格式如下: procedure Move(CurIndex, NewIndex: Integer); virtual; LoadFromFile 该方法的作用是用指定的文件填充字符串列表。其语法格式如下: procedure LoadFromFile(const FileName: string); virtual; SaveToFile 该方法用来把字符串列表中的数据写到某文件中去。其语法格式如下: procedure SaveToFile(const FileName: string); virtual; APPEND MEMO.LINES.APPEND() 在末追加一行文本 例: memo1.Lines.Add('ssss');//在最后增加一行 memo1.Lines.delete(5);//删除第六行 17 memo1.Lines.insert(3,'ssss');//在第4行插入新行 memo1.Lines.move(2,4);//移动第3行到第5行 参见p57例题 3 3.1.4 MaskEdit控件 1( TMaskEdit组件的常用属性 EditMask 该字符用于控制输入数据的格式。掩码字符串的组成:三部分组成,每一部 分由‘;’分隔。 , 主要部分确定数据格式,特殊字符及其意义参见p65表3-13。 , 第二部分决定掩码中的字符串是否作为数据的一部分。两个取值‘0’表 示不作为,‘1’表示作为。 , 第三部分,指出掩码中的代表未输入数据的字符。 EditText 该属性代表TMaskEdit组件输入的格式化文本。 掩码编辑框(MaskEdit)是一种特殊的编辑框。使用它可以设计出许多复杂的输入格式。在选用MaskEdit之后,需要为它设计一个输入格式。 方法如下: 首先在窗体上将MaskEdit选中,在对象查看器(Object Inspector)中找到EditMask属性,双击它,弹出一个如下图所示的对话框。 对话框左上角的Input Mask编辑框用于输入掩码格式。 掩码格式可以分为三部分,每个部分之间用分号“;”分开, 第一部分;第二部分;第三部分 如“!90:90:90;1;_ ”。下面解释各输入格式符的意义: 1. 输入格式的第一部分是掩码本身,也就是数据输入格式。在这一部分用一些特殊的格式符来表示应输入的字符类型及格式,如!l0A9:C>ll<这样一串输入格式掩码。 常用的MaskEdit输入格式符有: 格式符 意义 18 l表示该位置只可能是一个字母,可以用光标键跳过它,但是不能是其它类型的字符。Ll和L 该位置必须是一个字符。 a和A a表示该位置只可能是一个字母或数字字符。A表示该位置必须是一个字母或数字字符。 c和C c表示该位置只可能是一个字母,C表示该位置必须有一个字母。 9和0 9表示该位置只可能是一个数字,0表示该位置必须有一个数字。 <格式符表示随后的字母均以小写的形式显示,直到遇到一个>格式字符或<>格式符。>〈和〉 格式符则和<正好相反。 〈〉 表示不作大小写转换,以输入时的形式为准。 表示该格式符之后的那个掩码格式符将作为数据中的普通字符对待。当用户想在数据中\ 放进一个掩码格式符时,应该在这个格式符前放一个\符号。如\A,\\等等。 # 表示该位置可能是一个数字或正负号。 如有!表示数据前的空格将不被保存在数据中,没有!则数据后的空格不被保存。!格式符只! 能放在掩码格式符的第一个字符处。 ;和/ 标准的分隔符,可作为数据的一部分。其中/在显示时为‘,’而非/。 2. 在输入格式中的第二部分只有0和1两种选择。如为1,则掩码中的非用户输入数据和标准分隔符等其它各种字符会作为数据的一部分保存;为0则不保存。 3. 输入格式的第三部分用于表示数据中的空位用那个字符代替显示。 在有了上述知识后,现在来设计一个例子。 !\(9999\)999999;1;_ “! ”将前面的空格去掉。 “\( ”区号的左括号。因为括号是特殊字符,所以在前面加“\”。 “9999”,区号的4个号码,当然若改成“0000”,则用户一定要输入区号。 “\)”区号的右括号。 “999999”,电话的6个号码。 “;”第一部分和第二部分的分隔。 “1”将输入后的区号括号作为数据的一部分。若“0”,则括号不作为数据一部分,即得到的数据是区号和电话号码直接相连(没有括号)。 “;”第二部分和第三部分的分隔。 “_”等待用户输入时显示的字符。 最后控件的显示结果为:(____)______ 例如要输入一个汽车牌号如CA,300019 。该数据前两位为字母且为大写,第三位为一个系统分隔符号,后,位为数字。可以这样设计掩码格式: !>LL/000000;1;_ 掩码的第二部分取为,表示系统分隔符‘,’也将作为数据保存。第三部分的“_”表示在掩码编辑框中为空时,用“_”来表示空位。我们也可以用空格来标识空位。 又如一个邮编如PO-100083,其中PO表示邮政,是每个邮政编码中都有的前缀,可以这样设计掩码格式: 19 !PO/000000;1;_ 在掩码设计对话框的右侧是Sample Masks,这里有系统预设的常用的掩码格式,如电话号码(Phone)、日期(Date)等。我们可以选择一个,然后进行必要的调整。对话框左下部是一个Test Input栏,我们可以在这里输入字符,以输入格式是否令人满意。 又例如:时间可以为 !90:00;1;_ ;IP地址可以为 !000\.000\.000\.000;1;_ 例如:!0000年09月09日;1;_ text值:2006年03月01日 !0000年09月09日;0;_ text值:20060301 EditText值:2006年03月01日 参见p59例4 3.2 使用对话框函数与对话框过程 3.2.1 ShowMessage与ShowMessageFmt过程 1.ShowMessage过程 Delphi提供了一个用于显示消息的标准过程,定义如下: procedure ShowMessage(const Msg: string); ShowMessage过程的参数是一个字符串常量。ShowMessage过程的作用是显示一个最简单的对话框,对话框以应用程序的执行文件名作为标题,对话框右上侧是一个关闭按钮,在对话框中显示了字符串常量,也就是用户要显示的信息内容,可以使用回车符(,13)使文本换行。在对话框下部是一个OK按钮,单击按钮关闭对话框返回应用程序。 2. ShowMessageFmt过程 Delphi 提供了另一个用于显示消息的标准过程,定义如下: procedure ShowMessageFmt(const Msg: string; Params: array of const); ShowMessageFmt过程的参数是一个格式字符串和一个数组,与Format函数相似,可以将用户显示的信息按一定格式显示在对话框中。参见P62例题5 3.2.2 MessageDlg与MessageDlgPos函数 MessageDlg函数用于在程序运行过程中显示一个包含一个字符串的位图和按钮等信息的对话框,用户只有对这个对话框进行准确响应后,才能关闭对话框,语法如下: Function MessageDlg (const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint):word; procedure TForm1.BitBtn1Click(Sender: TObject); var x:integer; begin x:=MessageDlg ('请选择', mtconfirmation, mbokcancel, 1); end; 该函数可以显示一个对话框提示用户,返回值为Word类型的数据。MessageDlg函数的参数有四个: 20 第一个参数 Msg用于在对话框中显示相关提示信息, 第二个参数DlgType用于指定对话框的类型,取值及含义 Value Meaning mtWarning A message box containing a yellow exclamation point symbol. mtError A message box containing a red stop sign. mtInformation A message box containing a blue "i". mtConfirmation A message box containing a green question mark. mtCustom A message box containing no bitmap. The caption of the message box is the name of the application's executable file. 第三个参数是按钮组 有关的参数 type TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp); TMsgDlgButtons = set of TMsgDlgBtn; const mbYesNoCancel = [mbYes, mbNo, mbCancel]; mbYesAllNoAllCancel = [mbYes, mbYesToAll, mbNo, mbNoToAll, mbCancel]; mbOKCancel = [mbOK, mbCancel]; mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore]; mbAbortIgnore = [mbAbort, mbIgnore]; Value Meaning mbYes A button with 'Yes' on its face. mbNo A button the text 'No' on its face. mbOK A button the text 'OK' on its face. mbCancel A button with the text 'Cancel' on its face. mbAbort A button with the text 'Abort' on its face mbRetry A button with the text 'Retry' on its face mbIgnore A button the text 'Ignore' on its face mbAll A button with the text 'All' on its face mbNoToAll A button with the text 'No to All' on its face mbYesToAll A button with the text 'Yes to All' on its face mbHelp A button with the text'Help' on its face In addition, the Dialogs unit defines the following constants for commonly used TMsgDlgButtons values: Constant Meaning mbYesNoCancel mbYes, mbNo, and mbCancel mbYesNoAllCancel mbYes, mbYesToAll, mbNo, mbNoToAll, and mbCancel 21 mbOKCancel mbOK and mbCancel mbAbortRetryIgnore mbAbort, mbRetry, and mbIgnore mbAbortIgnore mbAbort, mbIgnore 第四个参数是当用户单击help按钮时显示的帮助主题 例如: if MessageDlg(′您要继续执行吗,′,mtConfirmation,[mbYes,mbNo],0)=mrNo then close; MessageDlgPos函数定义: function MessageDlgPos(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Word; 3.2.3 CreateMessageDialog函数 function CreateMessageDialog(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons): TForm; 仅产生一个信息框窗体,需要时可采用窗体的showmodal方法显示。 3.2.4 InputBox与InputQuery函数 InputBox对话框既能让用户对按钮做选择,又能让用户通过键盘输入文字。在Dialogs单元文件中有如下定义: function InputBox(const ACaption, APrompt, ADefault: string): string; InputBox对话框的函数说明显示有3个参数和1个返回值。参数Acaption是对话框的标题;参数Aprompt是对话框的提示文字;参数Adefault是代表默认字符串。InputBox对话框上有两个按钮,“OK”按钮和“Cancel”按钮。在用户按“OK”按钮后,系统会将用户输入的字符串返回给程序,相反,如果用户按的是“Cancel”按钮,系统会将默认字符串返回给程序。这个对话框经常用来输入用户名称或者用户密码。 该函数用于在程序运行过程中显示一个包含字符串和按钮信息的输入对话框,用户对这个对话框进行准确响应后,才能关闭该对话框, 例如: procedure TForm1.BitBtn1Click(Sender: TObject); var x:integer; begin x:=strtoint(inputbox('请输入:','年龄 ','15')); showmessage(inttostr(x)); 22 end; function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean; 与inputbox函数相似,函数返回值是布尔值,当用户按确认按钮时,返回true,否则返回false. 前面两个参数与inputbox相同,后面一个变量,初始值是默认值,当用户单击确认按钮时,输入的文本保存在该变量中。 procedure TForm1.BitBtn1Click(Sender: TObject); var y:string; begin y:='45'; InputQuery('请输入', '年龄',y); showmessage(y); end; 参见p64例题6。 3.4 用于分组的控件 3.4.1 Panel控件 面板组件在标准(Standard)页标签上。该组件用来在窗体上放置一面板,在面板上可以放置其它的组件。(用于作容器) 面板组件的属性 BevelInner 确定面板组件的内部斜面。 BevelInner属性确定内部斜面如何 出现;BevelOuter属性确定外部斜面BevelOuter 确定面板组件的外部斜面。 如何出现。使用这三个属性就可以改BevelWidth 确定面板的内部斜面和外部 变面板的外观。 斜面的宽度(单为像素)。 BorderWidth BorderWidth属性用来确定面板边界的宽度(单位象素)。默认 值为0,即没有边界。 BorderStyle BorderStyle属性确定面板边界的类型:bsNone,表示无边界; 23 bsSingle表示单线边界。 Ctrl3D Ctrl3D属性确定面板是否为立体的 Cursor Cursor属性用来确定当鼠标指针移动到面板上时,鼠标指针的形状。 面板组件的事件 与面板组件有关的主要事件有单击事件(OnClick)与双击事件(OnDblClick)、OnEnter、OnExit、OnStartDrag、OnEndDrag等事件。 参见p68,69例题7,8 3.4.2 GroupBox控件 分组框组件在标准页标签上。(用于作容器) 。在该组件中成组的该组件为标准的Windows分组框,使用它可以将窗体上的相关的组件成组 最常见组件为单选按钮。 其使用方法为在窗体上放置一分组框,然后将要出现在该组件中的组件放置其中。 Caption: 属性的值用来表明该组件的用途。 若在该组件中放置另一窗口类的组件,则该组件就称为父组件。 参见p70例题9。 3.5 按钮类控件 按钮类控件主要包括:基本按钮button、位图按钮bitbtn、复选框checkbox、选项按钮radiobutton 3.5.1 button控件 在标准页标签上。 1( 按钮组件的属性 , Cancel属性 该属性为布尔型,它确定该组件是否为取消按钮。若Cancel属性为True,则无论何时用户按Esc键时,该组件的OnClick事件处理程序就被执行。虽然窗体中可以设计多个取消按钮,但只执行可见的Tab键次序中第一个按钮的OnClick事件处理程序。 , Default属性 该属性为布尔型,它确定该组件是否为默认按钮。若Default属性为True,则无论何时用户按回车键时,该组件的OnClick事件处理程序就被执行。唯一的例外是若用户在按回车键,选定了其 24 它的按l钮,则执行该按钮的OnClick事件处理程序。虽然窗体中可以设计多个默认按钮,但只执行Tab键次序中第一个按钮的OnClick事件处理程序。 当一按钮成为焦点(激活时),它就成为临时的默认按钮。但当焦点移动到其它非按钮的组件上时,Default属性值为True的按钮就成为默认的按钮。 , ModalResult属性 该属性只为运行的属性。窗体的ModalResult属性用来终止modal窗体。ModalResult的默认值为0,设置为非零值就可以设置窗体的modal状态。当用户选择关闭modal窗体时,按钮单击设置ModalResult关闭窗体,赋给ModalResult的值成为ShowModal函数的返回值。 属性 数据类型 说明 Name String 按钮的名称,编写程序代码时使用它 Caption String 按钮的标题,就是按钮上显示的文字。可以为按钮指定 快捷键 Cancel Boolean 缺省值为False,当取值为True时,无论何时按下Esc键, 按钮中Taborder值最小的按钮会产生Onclick事件 Default Boolean 当属性值为True时,按下Enter键,当前按钮产生Onclick 事件,缺省值为True Hint String 按钮的提示文本保存在这里,当鼠标光标停留时,显示 提示文本 Showhint Boolean 确定是否显示提示文本,缺省值为False 具有ModalResult属性的按钮也是只读的,使用ModalResult属性可来关闭modal窗体。如建立一个具有两个按钮的对话框:确定及取消按钮,确定按钮的ModalResult属性设置为mrOK,取消按钮设置为mrCancel。当用户选择其中一个按钮时,则终止对话框的modal状态。因此使用ModalResult属性就可以在不编写事件处理程序的情况下关闭对话框。 2( 按钮组件的事件 与按钮组件有关的主要事件有单击事件(OnClick)、双击事件(OnDblClick)、OnEnter、OnExit、OnStartDrag、OnEndDrag等事件。 ONCLICK的激发: , 用户使用鼠标单击按钮 , 当按钮获得焦点时,按ENTER键或空格键。 练习: 1. 在名称为Form1的窗体上建立二个名称分别为Cmd1、Cmd2,标题为"按钮一"、"按钮二"的命 25 令按钮。要求程序运行后,如果单击"按钮一",则把"按钮二"移到"按钮一"上,使两个按钮重合。 注意: 在程序中不得使用任何变量(必须通过属性设置来移动控件)。 2. 在名称为Form1的窗体上建立一个文本框,二个名称分别为button1、button2按钮 在button1的onclick事件中添加代码 edit1.text:=’default’; 在button2的onclick事件中添加代码 edit1.text:=’cancel’; 要求当程序运行时,焦点在编辑框上,当按回车键时,执行button1的onclick事件,按esc键时,执行button2的onclick事件 3. 建立如图所示两窗体 Form2是主窗体,当点击退出程序按钮时,窗体yes显示,当按yes按钮时,关闭整个程序,当按no按钮时,自动关闭当前窗体,回到第一个窗体。要求yes,no按钮不写任何代码. 3.5.2 BitBtn 按钮组件 位图按钮组件位于组件面板的Additional标签页,与Button组件所不同的是多了一个位图符号在按钮上,该组件用于创建一个其上带有位图的按钮,其中大部分属性和事件与Button一致,这里仅介绍它所独有的属性。 常用属性与事件: Kind属性 Glyph属性 NumGlyphs属性 Layout属性 OnClick事件 , MARGIN: 用以设定按钮边与图像边之间的距离(以象素为单位) , NUMGLYPHS: 用以设定按钮图像的数目 , SPACING:用以设定图像与文本之间的距离(以象素为单位) , Glyph属性:为按钮指定一个位图文件,显示在按钮的表面。 , Kind属性:决定位图按钮的种类。位图按钮使用最多的属性就是Kind。 type TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bkIgnore, bkAll); 参见p73例题10 26 3.5.3 复选框组件(CheckBox)(参看word段落设置) 复选框组件在标准页标签上。 1(复选框组件的属性 , ALIGNMENT 设定复选框标题位置 , AllowGrayed属性 该属性为布尔型,它确定复选框是否可具有两个或三个状态。默认值为False,就是单击复选框可以选定及不选定该组件;AllowGrayed属性的值为True,单击复选框可以选定、不选定或变灰该组件。 , Checked属性 该属性确定了一个选项是否被选定。该选项为一布尔型,当为True时,复选框中出现复选标记,表示选项选定;当为False时,没有复选标记时,表示选项没有选定。若State属性的值为cbGrayed(复选框变灰)或cbUnChecked(复选框未选定),则Checked属性的值为False。 , State属性 State属性确定复选框可能有的各种状态。 type TCheckBoxState = (cbUnchecked, cbChecked, cbGrayed); property State: TCheckBoxState; Value Meaning cbUnchecked The check box has no check mark, indicating that the user has not selected the option. cbChecked The check box has a check mark in it, indicating that the user has selected the option. cbGrayed The check box has a check mark in it, but it is grayed. 2(复选框组件的事件 与复选框组件有关的主要事件有单击事件(OnClick)与双击事件(OnDblClick)、OnEnter、OnExit、OnStartDrag、OnEndDrag等事件。 参见p74例11 练习:建一个工程,放置多个checkbox,并放一个按扭,点击按钮能统计有多少个checkbox被选,用showmessage将数字显示出来,保存。 3.5.4 单选按钮组件(RadioButton)(参看word表格排序) 单选按钮组件在标准页标签上。(提供互斥选项,因此通常用于成组实现,可用GROUPBOX或RADIOGROUP实现) 27 1.单选按钮组件的属性 , Caption属性:用来设置单选按钮的提示文字。 , Alignment属性:用来决定单选按钮的标题文字出现的位置。 , Checked属性:该属性用于标记单选按钮的状态。它确定了一个选项是否被选定。该选项 为一布尔型,其值为True时,单选按钮中出现黑圆(表示选项选定);其值为False时, 单选按钮中未出现黑圆(表示选项未选定)。 2.单选按钮组件的事件 与单选按钮组件有关的主要事件有单击事件(OnClick)与双击事件(OnDblClick)、OnEnter、OnExit、OnStartDrag、OnEndDrag等事件。 参见p76例12 p78例13 1) 课堂练习:编写程序,要求:输入半径,利用选项按纽,选择运算:面积、计算周长等。 2) 按照要求编写程序:新建一个DELPHI工程,在窗体中添加一个文本框,名称为“txtResult”, 默认显示的内容为空;添加一组单选按钮,单选按钮名称分别为“Op1”、“Op2”,显示内容分别 为“飞机”、“火车”;再添加一组单选按钮,单选按钮名称分别为“Op3”、“Op4”,显示内容分 别为“广州”、“上海”;添加一个按钮,名称为“btnShow”,按钮上显示“显示”。在适当的事 件过程中编写代码,使得程序运行时,当点击按钮的时候,程序完成以下功能:根据选中的单选 按钮,在文本框中显示“坐什么去哪里”。运行程序,查看结果。 3.5.5 单选分组框组件(RadioGroup) 单选分组框组件在标准页标签上。 该组件为包含单选按钮的分组框,单选分组框简单地将单选按钮成组。 1. 单选分组框组件的属性 , CAPTION 指示单选组合名称 , Items属性 当在Items属性中输入一行字符串时,一单选按钮就添加到该组件中。Items属性中的每一行字符串使一单选按钮出现在单选分组框中,其字符串就是单选按钮的标题。 , ItemIndex属性 其值确定当前选定的单选按钮。编号从0开始。默认值是-1,表示未选中。 , Columns属性 设置Columns属性的值,可使单选按钮以单列或多列的方式显示。 当用户选定单选分组框中的一单选按钮时,先前选定的单选按钮就自动变为不选定。 28 参见p79例14 练习: 将上面的习题2用单选分组框组件来实现 3.5.6 SpeedButton加速按钮组件 加速按钮组件位于组件面板的Additional标签页,常常被放在Panel组件上,它可以实现按钮类组件的相应功能。另外可以将多个SpeedButton放置在一个窗口类组件上,例如Panel(面板)、GroupBox(组框),是进行工具栏快速设计的理想组件。它和Bitbtn组件非常相似,也可以显示图像和文本,但通常只显示图像,它的特殊属性如下。 , ALLOWALLUP 用以设定是否包含此快速钮的组中是否能同时保持UP状态 , DOWN 用以设定此快速钮是否已被选取 , FLAT 用以设定此快速钮是否显示3D边的效果 , GROUPINDEX 用以设定快速钮的分组,同一组同一个编号 , TRANSPARENT 用以设定快速钮是否透明 3.6 列表类组件的使用 ListBox和ComboBox都用来显示列表项目,所不同的是ComboBox占用较少的空间。常见的Windows操作系统中,显示可用磁盘驱动器时,用的就是ComboBox。ListBox则提供了一个项目列表以供选择,如Windows打开文件操作时显示文件列表的就是 ListBox。 3.6.1 TListBox组件 (1)TListBox组件的常用属性 , Items属性:用来存放列表框中的列表项,属于TStrings类。 , ItemIndex属性:用来设置或返回选中的列表项的序号,第一个列表项的序号值为0。 , TOPINDEX 指示列表框顶端项目的索引值 , ITEMHEIGHT 设定列表框项目的高度 当style 为lbstandard时,ITEMHEIGHT的只与item的 font相关,程序员不能改变。 , Integralheight (true 自动调整列表框的高度,列表框中的最后一行可完整显示) (false 不自动调整列表框的高度,列表框中的最后一行可能不被完整显示) , Columns属性:用来设置在列表框中显示列表项的列数。 Columns=0 显示一列,当列表框空间不够时,自动加垂直滚动条 Columns<>0当列表框空间足够时,一般会显示相应的列数,当不够时,则自动增加水平滚动条, 显示多列。 , Count属性:运行属性,用来返回列表框中列表项的数目。 29 , Selected属性:用来测试某个列表项是否被选中。 , MultiSelect属性:用来设置能否在列表框中选择多个列表项,即是否允许多选。 , ExtendedSelect属性:只有在MultiSelect属性值为True时才起作用,用来决定列表框是否 允许扩展多选。 , SelCount属性:在MultiSelect属性值为True时,用来返回选中的列表项的个数。 , Sorted属性:用来设置列表框中的列表项是否按字母顺序排序。 , STYLE:指示列表框显示模式(lbStandard, lbOwnerDrawFixed, lbOwnerDrawVariable) , CANVAS: 提供自定义显示列表框项目内容的画板,用于ONDRAWITEM事件 (2)TListBox组件的常用方法 , Clear方法:作用是清除列表框中的所有列表项,无参数。 , ClearSelection方法:作用是清除列表框中所有被选中的选项。 , SelectAll方法:用来选中列表框中的所有文本。 , MoveSelection方法:用来把列表框中的所有选中的列表项移动到另一个列表框中。 , CopySelection方法:用来把列表框中的所有选中的列表项复制到另一个列表框中。 (3)TListBox组件的常用事件 TListBox组件响应的主要事件有:OnClick、ONDBLCLICK、OnKeyDown、OnKeyPress、OnKeyUp等。参见p82例15,84例16 1) 新建一个工程,左右两边各放置一个列表框ListBox的控件List1和List2,在List1中竖排显示 内容“第一题、第二题、第三题、第四题、第五题”这五项。在两个列表框中间竖排四个命令按 钮,标题分别为“,”、“,”、“,,”、“,,”。实现程序功能: 1点击“,”将List1中所选中的项添加到List2中,并将List1中的项删除。 2点击“,”将List2中所选中的项添加到List1中,并将List2中的项删除。 3点击“,,”将Lixt1中所有的选项添加到List2中,并将List1中的项清空。 4点击“,,”将List2中所有的选项添加到List1中,并将List2中的项清空。 最后保存。 2) 按照要求编写程序:新建一个DELPHI工程,在窗体中添加一个按钮,名称为“Button1”,按钮 上显示“添加项目”;添加两个列表框,名称分别为“List1”和“List2”。在适当的事件过程中 编写代码,使得程序运行时,当点击按钮的时候,程序通过inputbox函数让用户输入文本,然 后放在第一个列表框中;当用户双击第一个列表框中的项目的时候,指定的项目移动到第二个列 表框中,反之亦然。程序编写完毕后,运行,查看效果。保存程序. 3.6.2 TComboBox组件 1.特有属性 , DropDownCount属性:该属性用来设置组合框的列表框中所能显示的列表项的最大数目,默认 情况下,列表框中可以显示8个列表项,当超过8个列表框时将显示出垂直滚动条。 , Style属性:该属性用来设置或返回组合框的风格。 30 Style属性值 说明 CsDropDown 组合框的编辑框中可以输入,同时下拉式列表框是一组具有等高度的字 符串 CsDropDownList 组合框的编辑框为只读的,而且编辑框中的内容只能在从列表框中选择 CsSimple 只有一个编辑框显示,可以在编辑框中输入字符串,也可以通过上、下 箭头键改变编辑框中的内容 CsOwnerDrawFixed 组合框由一个只读编辑框和条目高度相等的列表框组成,条目的高度由 属性ItemHeight 确定 CsOwnerDrawVariable 在组合框由一个只读编辑框和列表框组成,条目的高度可以不同 , Droppeddown: 用于判定组合框是否处于下拉菜单的状态 2(下拉列表框 参见p87 例17 3(简单组合框 参见p88 例18 4(下拉组合框 参见p90 例19 1)编写程序,演示列表框和组合框2个组件的基本操作。在窗体上建立一个列表框,一个命令按钮。程序运行后,在列表框中选择所需要的项目(可多选),单击“添加”按钮,可把所选择的项目添加到组合框的下拉选单中。 2)新建一个工程,窗体上放置ComboBox和编辑框组件,实现窗体创建时,读取系统的汉字字型,在ComboBox列表框中显示。当用户点击ComboBox中的列表项时,编辑框的字体会随之变化。保存。ComboBox1.Items := Screen.Fonts; 31 3.7 TTimer时钟组件的使用 (1)TTimer组件的属性 , Enabled属性:该属性用来设置程序运行时定时器是否正在运行。 , Interval属性:该属性用来设置定时器两次OnTimer事件发生的时间间隔,以毫秒为单位。 (2)TTimer组件的事件 OnTimer事件:在Enabled属性值为True时,该事件每隔一定时间间隔自动触发,触发的时间间隔由Interval属性指定。 3.7.1 设计一个电子表 参见p91 例20 3.7.2 设计一个计时器 参见p93 例21 3.7.3 设计一个流动字幕板 参见p96 例22 参考资料: 常用的键盘事件 1(OnKeyDown 事件 当按下键盘上的任一个键,如字母键、数字键、功能键(F1-F12)、Ctrl 键、Shift 键或 Alt 键等,都将产生一个OnKeyDown 事件。 下面的一段代码说明了OnKeyDown 事件的用法:当打印的时候在窗体中按下Esc 键后, 取消打印作业。 procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState); begin if (Key=VK_ESCAPE) and Printer.Printing then begin Printer.Abort; // 中止打印 MessageDlg('Stop Print~', mtInformation, [mbOK],0); end; end; 2(OnKeyPress 事件 当按下键盘上的一个字符键,如字母键、数字键等会产生一个OnKeyPress 事件,但是 单独按下功能键(F1-F12)、Ctrl 键、Shift 键或Alt 键等,不会产生OnKeyPress 事件。 下面的一段显示按下的键的代码说明了OnKeyPress 事件的用法: procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); 32 begin MessageDlg ( 'You pressed:'+Key+' key~',mtInformation, [mbOK], 0) end; 3(OnKeyUp 事件 当按下键盘上的任一个键后松开时,都会产生一个OnKeyUp 事件。对于功能键(F1-F12)、 Ctrl 键、Shift 键或Alt 键等,也会产生一个OnKeyUp 事件。 下面的一段代码说明了OnKeyDown 事件和OnKeyUp 事件的用法: var FormColor: TColor; // 用来保存窗体原来的颜色 procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState); // 当键按下时先保存窗体的颜色然后再改变窗体的颜色 begin FormColor := Form1.Color; Form1.Color := clAqua; end; procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); // 当键弹起时恢复窗体的颜色 begin Form1.Color := FormColor; end; 程序运行后,在窗体中按下某个键然后松开,窗体的颜色会随之改变。 9.1 菜单 33 认识windows程序界面 菜单栏、工具栏是window下的应用程序,必不可少的部分。 菜单:命令的集合。包括两种类型:主菜单(下拉式)和快捷菜单(弹出式)。 , 主菜单:在应用程序的标题栏下就是主菜单栏。在主菜单栏中基本上要包括该应用程序中的所 有操作。 组成:主菜单通常由顶层的水平列表项以及分别与各项相连的下拉式菜单所组成,当用户选择 了顶层某个列表项时,就会弹出其相连的菜单——子菜单。下拉式的子菜单由多个菜单项 组成,可以将多个菜单项进行分组,把相关的菜单项作为一组,组与组之间以分隔线隔开。 , 快捷菜单:作用于对象的菜单。?对象就是构成界面的因素,包括窗体和控件。 当用户右击某个对象时,弹出的菜单。主要包含着该对象最常用的操作。 , 菜单项一般可以分成三种情况: , 一种只是菜单项名称,这种菜单项直接导致完成某 种操作; , 另一种是菜单项名称后还有省略号,表示选择它将 要弹出一个对话框,用户需要在对话框中做进一步的 34 工作; , 还有一种就是菜单项名称后有一个右箭头,表示选中它后又会弹出一个菜单,这样就可以 形成多级菜单。 , 一般的菜单项具有下面的一些特征: , 加速键 在菜单项中定义一个加速键,也就是在菜单的说明文字中有一个带有下划线的字符,这样 用户可以用键盘来选择菜单,大大方便用户的使用。对于顶层的菜单,只要同时按下Alt键和 带有下划线的字符键,就会激活该菜单,并弹出其子菜单;当子菜单弹出后,只要按下其中的某个带下划线的字符键,即可选择该菜单项。 , 对于英文菜单,可以选择某个具有代表性的字符定义为加速键,一般是 第一个字母; , 对于中文菜单,可在说明文字之后增加一个括号,括号中添加一个具 有代表性的字符定义为快捷键,一般是该中文对应英文单词中的重要 字母。 , 在同一个子菜单中,每个菜单项的加速键不能一样。 , 如果有些菜单项对应的命令是常用命令,可以考虑在工具栏上创建相 应的加速按钮,同时在该菜单项前添加一个图标,图标应该与相应的 加速按钮具有相同的图形标志。 , 快捷键 对于有些菜单项,还可以定义热键(快捷键),也就是定义由Ctrl、Alt 或Shift 键与某个字符键或功能键的组合,如Ctrl+s 组合键通常用来保存文件;Ctrl+Z 可以取消上一步操作。 , 菜单分组 定义菜单项时,可以将功能相近的一些菜单项放在一起作为一组,同一个子菜单的不同组以分隔条隔开。 , 复选菜单:同组的菜单项可以同时将多个菜单项设置为选中方式。 , 单选菜单:同组的菜单项同时只有一个菜单项可被选中。 , 多级菜单:将菜单项分组的另一种方法就是制作多级菜单。在菜单编 辑器中选中某个菜单项,按下Ctrl +?组合键,就可以方便地添加多级菜单。 , delphi提供了两个菜单组件都在组件选项板的Standard标签页上, MainMenu及PopupMenu。 这两个组件都是不可见组件。可以利用它们来创建窗体的主菜单和弹出式菜单。 9.1.1主菜单 主菜单通常称为菜单栏。其下包含的选项称为菜单项。 1(菜单编辑器 打开菜单编辑器的操作过程为: 35 第1步:在窗体中添加菜单组件MainMenu或PopupMenu。 第2步:选定菜单组件MainMenu或PopupMenu。 第3步:使用下列方式之一打开菜单生成器:三种方法 , 双击选定的组件MainMenu或PopupMenu , 单击对象编辑器中属性Items值右边的省略号按钮 , 将光标移动到菜单组件上右单击,弹出快捷菜单,选择其中的Menu Designer菜单命令 1) 添加及编辑菜单项 , 使用编辑器编辑方法: , 打开菜单编辑器后,就可在其中输入菜单项,输入的菜单项出现在高亮的位置上; , 在菜单栏上输入一个菜单项后,就在该菜单项后加一空的菜单项,并将下一输入的位置自动放在刚输入菜单的下拉菜单的下一项上; , 当在一下拉菜单项输入完成后,就在该菜单项后加一空的菜单项,并且为下一输入位置; , 用鼠标单击菜单的任意位置,该处就称为当前要输入或编辑的位置。在编辑或输入的过程中,输入的菜单项内容也出现在对象编辑器的Caption属性值上; , 创建子菜单。方法二: , 按右键,在快捷菜单中选择,create submenu选项; , 直接按ctrl+向右箭头。 在菜单的结构设计好后,要对菜单项进行编辑,使用对象编辑器可以在不打开菜单生成器的情况下,对菜单项进行编辑。 , 在关闭菜单编辑器后继续编辑菜单,其操作过程为: , 第1步:单击对象观察器的属性页标签。 , 第2步:正常关闭菜单编辑器窗口。 , 这时,对象编辑器仍为激活的窗口,可在Caption属性值上进行编辑。若要编辑其它的菜 单项,在对象选择器上选择其它的菜单项。 2) 菜单项的常用属性 , Name属性:菜单项名称。Name属性用来唯一地标识菜单项。 默认时,Delphi根据菜单项的Caption属性来确定Name属性的值。但最好由设计者将它修改为有实际含义的菜单名,或者可用一种有规则的命名方法。 如设置第一个菜单名为N1,其第一个子菜单名为N11,第二个子菜单名为N12,„;设置第二个菜单名为N2,其第一个子菜单名为N21,第二个子菜单名为N22,„;依此类推。这样对程序的编程、修改和维护会带来极大地方便。Name属性的值只能在设计时修改。 , Caption属性:该属性用来设置或返回菜单项中显示的文字。 , Visible属性:该属性用来确定菜单项是否可见 。 , Enabled属性:该属性用来确定菜单项是否可以使用。 , Checked属性:该属性用来确定菜单项前是否显示选中标记。 36 , ShortCut属性:该属性用来确定菜单项的快捷键。可使用的组合键属性值在下拉列表框中,可以选择使用。设置的ShortCut出现在菜单项的右边。 , Break属性:Break属性可以将一个长的菜单分为数列。 , Hint属性:Hint属性为当OnHint事件(当将鼠标指针移动到菜单项上时,出现的事件)出现时,显示的文本字符串。在OnHint事件处理程序中的代码确定字符串如何显示。最常用的显示方法是像用在状态栏上的面板显示一样。也可显示一帮助框的提示。 2 菜单项改进方法 1) 菜单项分组:在有些子菜单中,如果子菜单项的数目较多,可以设定一些分隔符把它们分组,这在应用程序的菜单中是非常普遍的。在caption中输入‘-’字符,实现分组。 加速键与快捷键 2) , 指定加速键,在菜单项要作为加速键的字母前添加符号“&”。 , 快捷键通过shortcut属性设置。 3) 添加复选标记:Checked属性只在运行时有效,它确定了一个选项是否被选定。 4) 设置单选菜单项 RadioItem属性为一布尔型,确定了出现在菜单项上的单选标志。当RadioItem为True时,则选择该菜单项时,在菜单项的左边出现单选标志(圆点)。 单选菜单像就是一组互相排斥的菜单项,即每次只能选择一组菜单项中的一项,要使一组菜单成为单选菜单项,必须满足以下条件: , 所有菜单项都在同一菜单中; , 所有菜单项的RadioItem属性都设置为True; , 所有菜单项的GroupIndex属性设置为相同的值,且不能与同一菜单中的其他菜单项相同。 5) 使用菜单模板 , 在菜单编辑器窗口中添加菜单模板 在菜单生成器窗口中添加菜单模板的操作过程为: , 第1步:在菜单生成器窗口上右单击,弹出快捷菜单。选择Insert From Template菜单命令(若没有可用的菜单模板,则该菜单命令不可用)。在该对话框的列表框中列出所有可用的菜单模板。 , 第2步:在列表框中选定要插入的菜单模板。 , 选择的模板菜单插入到窗体中当前光标的位置。具体的插入方式为: , 若当前光标在菜单项上,则插入到当前光标之上; , 若光标在菜单栏上,则插入到当前光标的左边。 , 将自己设计的菜单保存为模板 用户自己设计的菜单也可以保存为模板,供以后使用。以使自己设计的应用程序具有一致的外观。将菜单保存为模板的操作过程为: , 第1步:在菜单编辑器窗口上右单击,弹出快捷菜单。选择Save As Template菜单命令。 37 这时出现Save Template对话框。 , 第2步:在Template Descriptions文本框中,输入要保存菜单的简洁描述,然后单击OK 按钮。 , 删除菜单模板:对不再需要的菜单模板可以删除它,其操作过程为: , 第1步:在菜单编辑器窗口上右单击,弹出快捷菜单。选择Delete Template菜单命 令(若没有可用的菜单模板,则该菜单命令不可用)。这时出现Delete Template对话框。 在该对话框的列表框中列出所有的菜单模板。 , 第2步:在列表框中选定要删除的菜单模板,按Del键或单击OK按钮。Delphi将从 模板列表中删除菜单模板并从硬盘中删除它。 , 在运行时设置菜单 使菜单项变灰的操作为设置该菜单项的Enabled属性值为False(Enabled属性与 Visible属性相比,它可保证菜单项是可见的,只不过变灰而已)。 9.1.2 弹出式菜单 编辑方法基本相同,有一点需要注意的是: mainmenu设置完成后即可以运行,但popupmenu还不能运行。为什么呢? popupmenu是作用于对象的,必须与对象建立联系,如何建立联系呢, delphi中的对象大多有popupmenu属性。如果现有对象edit1,建立了与之相关的 popupmenu,name为ppm,要建立两者之间的联系,只需要将edit1的popupmenu属性设 置为ppm即可。 9.2 工具栏 在Windows应用程序中,工具栏是最常见的。它可以将最常用的功能集中在一起,用图标的形式提供快捷的访问方式。在Delphi中也提供了工具栏(ToolBar)组件,在Win32组件页中。可用来管理和安排可视的组件。 使用工具栏组件具有下列优点: 在工具栏组件上按钮的大小和间距自动保持一致;其它的控件也自动保持它们的相对位置和高度;若在一行中按钮显示不下,可以自动折行显示。 设计工具栏采用下列的操作过程: , 第1步:设置图标列表。 在Win32页标签中选择图标列表组件imagelist,将其放到窗体上。双击窗体上的图标列表组件,打开图标列表编辑框在该对话框中添加工具栏按钮要使用的图标。 , 第2步:设置工具栏。 在窗体上添加工具栏组件,并设置其属性。工具栏可以装载工具按钮外,还可以放置其他组件, 38 工具栏按钮是一个容器组件。 ToolBar组件的属性很多,下面介绍一些常用的属性。 ? Align属性 Align属性用来确定该组件与窗体的对齐方式,也就是在窗体中的位置。 ? Autosize属性 该属性为布尔型,当为True时,工具栏的大小随着内容的变化而变化。 ? ButtonHeight属性 该属性为整型,用来确定工具栏上的按钮和其它组件的高度,单位为像素。 ? ButtonWidth属性 该属性为整型,用来确定工具栏上的按钮和其它组件的宽度,单位为像素。 ? Flat属性 该属性为布尔型,当为True时,工具栏上按钮的边框由普通边框变为弹出式边框。平时按钮和工具栏融为一体,当鼠标指针移动到按钮上时,按钮自动从工具栏上浮现出来。 ? Images属性 列出工具栏按钮上出现的图标。每一按钮的ImageIndex属性确定显示指定的图标。若不指定图标,则按钮上不显示图标。与imagelist配合使用。 ? List属性 该属性为布尔型,确定图标与文字的相对位置。当为True时,图标占据按钮的左半部,标题在右半部;否则图标占据按钮的上半部,标题在下半部。 ? ShowCaption属性 该属性为布尔型,当为它True时,工具栏上的所有按钮显示文本(即Caption属性的内容,这时可能改变按钮的大小),否则不显示。 , 第3步:设置工具栏按钮。 在工具栏组件上添加工具栏按钮,并设置其属性。 工具栏按钮(ToolButton)组件是一种特殊的按钮组件,它只配合工具栏组件使用,不能放置在其他窗口组件上。 要在工具栏组件上添加工具按钮,右单击工具栏组件,在弹出的快捷菜单中选择“New Button”菜单命令即可生成一个空白的工具栏按钮,生成的工具栏按钮依次在工具栏组件上排列。 工具栏组件自己生成工具栏按钮,因此随着工具栏组件的移动或隐藏,工具栏按钮也进行相应的移动或隐藏。 ToolButton组件的所有按钮图标都由Imagelist组件来提供。所以ToolBar工具栏组件要与Imagelist组件配合使用,有多少个ToolButton组件就要在Imagelist组件中装入多少个图标。 ? Grouped属性 该属性为布尔型,当为它True并且Style属性的值为tbsCheck时,则同一组中的按钮一次只能选定一个。对按钮分组右单击工具栏组件,在弹出的快捷菜单中选择“New Separator”菜单命令 39 即可。 ? ImageIndex属性 该属性为整型,用来确定出现在工具栏按钮上的图标。若其值为0,则工具栏按钮将显示工具栏组件Images属性所确定的图标列表中的第1个图标。 ? Down属性 该属性为布尔型,当为它True时,工具栏按钮被选定,这时按钮为凹下的。当按钮不选定时,按钮为凸起的。 ? Style属性 确定工具按钮的显示风格。Tbsbutton,tbscheck,tbsdropdown,tbsseparator,tbsdivider , 第4步:编写按钮事件的处理程序。 与工具栏组件有关的主要事件有单击事件(OnClick)与双击事件(OnDblClick)。 , 第5步:运行程序,查看设置后的效果。 9.3 TPageControl组件的使用 1.TPageControl组件的常用属性 , Pages属性:该属性是一个数组属性,它的每一个元素代表TPageControl组件中的一个页面,是TTabSheet类型的。 , PageCount属性:该属性用来返回TPageControl组件中页面的数量。 , ActivePage属性:该属性用来为TPageControl组件设置当前页或返回TPageControl组件的当前页,其类型是TTabSheet。 , ActivePageIndex属性:该属性用来返回TPageControl组件的当前页的索引号,或通过该属性把某索引号的页设为当前页。-1表示没有,取值从0-n-1。 , MultiLine属性:该属性用来决定页标签是否允许多行显示。 , Style: tsTabs Standard tabs tsButtons Button tabs tsFlatButtons Flat button tabs , Images:标签的图标所在的图形列表 , Multiselect:布尔型,表示是否可以多选 , TabIndex: 该页在所有可见选项卡中的索引。 TtabSheet的属性 , ImageIndex:指明图象的索引号 , TabVisible:确定本页是否显示 , PageControl:获得该页所在的页面的组件名称 40 , PageIndex:返回或设置该页索引 2.TPageControl组件的常用事件 , OnChange事件:该事件在选择了一个页标签后发生。 , OnChanging事件:该事件在某页被选中前发生。 10.1 公共对话框 10.1.1 打开对话框组件(OpenDialog) 一、 打开对话框组件的属性 1. DefaultExt属性 若用户在文件名中没有包含后缀,使用DefaultExt属性可以将后缀自动地添加到文件名编辑框的文件名中。若在文件名中指定后缀,则忽略DefaultExt属性。若DefaultExt属性的值为空,则不添加后缀。 2. FileName属性 FileName属性确定当出现打开文件对话框时,出现在文件名编辑框中的文件名。用户可选定这一文件名或指定其它的文件名,在用户指定文件名并选择确定按钮后,用户选定的文件名保存在FileName属性中。 FileName属性可以为在当前目录中不存在的文件,也就是允许用户打开新的文件。而在保存文件对话框中,用户可以保存以前没有保存过的文件。 3. Filter属性 Filter属性允许用户筛选(用筛选字符串)出现在文件名列表中的文件。改变Filter属性的值可以开关筛选功能。 筛选字符串的语法与SQL语句中WHERE子句的语法是类似的。 在Filter Editor对话框中的筛选名中输入的内容显示在打开文件对话框的文件类型下拉列表框中。 4. FilterIndex属性 该属性为整型量,用来确定出现在文件列表下拉列表框中的筛选文件(由Filter属性指定)为第几个。默认值为1,即第一个筛选的文件出现在下拉列表框中。若指定的值大于Filter属性指定的文件筛选数,则使用默认值。 5(InitialDir属性 该属性为字符串型,用来确定出现对话框时的当前目录(InitialDir属性指定的目录)。在出 41 现对话框后,用户可以使用目录树来改变目录。指定的目录应为绝对路径。 若不指定初始的目录,则使用出现对话框时的当前目录,若指定的目录不存在时,也是如此。 6(Options属性 Options属性中包含有出现在打开文件及保存文件对话框中选项集中的所有可能值。 7(Title属性 该属性为字符串型,用来确定出现在对话框标题栏上的文本。 二、 调用打开文件对话框的方法 要调用打开文件对话框,在要使用打开文件对话框的相应事件处理程序中使用Execute方法即可,其语法为: OpenDialog1.Execute; 其中,OpenDialog1为打开文件对话框的Name属性的值。 10.1.2 保存对话框组件(SaveDialog) 一、 保存对话框组件的属性 1(Filter属性 使用Filter属性可以筛选出现在保存文件对话框中的可见文件列表,然后使用文件类型列表组合框确定出现在文件列表中的文件。使用FilterIndex属性可以设置默认的筛选。 2(Options属性 使用Options属性可使用户选择多个文件,从而Files属性中包含所有选定的文件,同时使用Options属性可以定制保存文件对话框的表现与外观。 3(DefaultExt属性 使用DefaultExt属性可以使得文件名的后缀自动添加到文件名编辑框中。 二、 调用保存文件对话框的方法 要调用保存文件对话框,在要使用保存文件对话框的相应事件处理程序中使用Execute方法即可,其语法为: SaveDialog1.Execute; 其中,SaveDialog1为保存文件对话框的Name属性的值。 10.1.3 字体对话框组件(FontDialog) 一、 字体对话框组件的属性 1. Device属性 Device属性指定检索字体的列表。 2(Font属性 Font属性为用户使用字体对话框返回的字体,然后应用程序就可以使用该属性的值。 42 在显示字体对话框前,也可指定默认的字体。指定的字体名选定在字体组合框上。使用对象编辑器可以指定字体的属性或在显示字体对话框前给该属性赋值。 3(MaxFontSize属性 该属性为整型量,它确定字体对话框中对用户来说可用的最大字体的大小。要限制可用的字体大小,Options属性中必须包含有fdLimitSize的值。若fdLimitSize的值为False,则MaxFontSize属性的值是无效的。 默认值为0,即没有限制。 4(MinFontSize属性 该属性为整型量,它确定字体对话框中对用户来说可用的最小字体的大小。要限制可用的字体大小,Options属性中必须包含有fdLimitSize的值。若fdLimitSize的值为False,则MinFontSize属性的值是无效的。 默认值为0,即没有限制。 5(Options属性 Options属性中包含有出现在字体对话框选项集中的所有可能值。 二、 字体对话框的事件 字体对话框组件的事件有OnApply事件。该事件为在字体对话框上出现应用按钮时,用户单击应用按钮出现的事件。 三、 调用字体对话框的方法 要调用字体对话框,在要使用字体对话框的相应事件处理程序中使用Execute方法即可,其语法为: FontDialog1.Execute; 其中,FontDialog1为字体对话框的Name属性的值。 10.1.4 颜色对话框组件(ColorDialog) 一、 颜色对话框组件的属性 1.CustomColors属性 CustomColors属性确定可用在颜色对话框中的定制颜色。每一定制色由如下格式的字符串表示: ColorX=HexValue 最多有16个定制颜色:ColorA到ColorP。 选定颜色后,使用定制颜色的字符串列表来保存在颜色对话框中指定的颜色。 2. Options属性 Options属性默认值为[ ](空集),表示所有的值为False,没有选项在起作用。 43 二、 调用颜色对话框的方法 要调用颜色对话框,在要使用颜色对话框的相应事件处理程序中使用Execute方法即可,其语法为: ColorDialog1.Execute; 其中,ColorDialog1为颜色对话框的Name属性的值。 10.1.5 打印对话框组件(PrintDialog) 一、 打印对话框组件属性 1(Collate属性 该属性为布尔属性,它确定当打印对话框出现时,分页复选框是否选定。无论初始的Collate属性设置如何,用户都可进行选定或不选定的操作。默认的设置为False。 2(Copies属性 该属性为整型量,它确定要打印的作业份数。默认值为0,在设计时指定的值,在打印对话框出现时作为默认值出现在其中。 3(FromPage属性 该属性为整型量,它确定打印作业起始的页号。默认为0。 4(MaxPage 属性 该属性为整型量,它确定当用户指定要打印的页号时,可指定的最大页号。若用户指定的页号大于MaxPage指定的值时,出现警告信息,这时用户必须输入有效的页号或关闭对话框。只有当Options属性的设置中包含poPageNums值时,才能指定页号 5(MinPage属性 该属性为整型量,它确定当用户指定要打印的页号时,可指定的最小页号。若用户指定的页号小于MinPage指定的值时,出现警告信息,这时用户必须输入有效的页号或关闭对话框。只有当Options属性的设置中包含poPageNums值时,才能指定页号 6(Options属性 Options属性默认值为[ ],(空集),即没有选项在起作用。 7(PrintRange属性 PrintRange属性确定打印范围的类型。 8. PrintToFile属性 该属性为布尔型,它确定是否选定打印到文件复选框。若为True,则可选定打印到文件复选框,若为False(默认值),则不能选定。 若在设计,将PrintToFile属性设置为True,则当对话框出现时,打印到文件复选框选定。 44 9. ToPage属性 该属性为整型量,它确定打印作业的结束页码。默认为0,即没有结束页。 二、 调用打印对话框的方法: PrintDialog1.Execute; 其中,PrintDialog1为打印对话框的Name属性的值。 10.1.6 打印机设置对话框组件(PrinterSetupDialog) 打印机设置对话框允许用户在打印前设置打印机。 调用Execute方法可以显示打印机设置对话框。当用户在打印对话框中选择设置按钮时,也可出现该对话框。 要调用打印机设置对话框,在要使用打印机设置对话框的相应事件处理程序中使用Execute方法即可,其语法为: PrinterSetupDialog1.Execute; 其中,PrinterSetupDialog1为打印机设置对话框的Name属性的值。 10.1.7 查找对话框组件(FindDialog) 一、 查找对话框组件的属性 1(FindText属性 该属性为字符串型,它包含要搜索的文本。 在显示查找对话框前指定FindText的值,则查找对话框出现时,FindText的值就出现在查找目标编辑框中。用户可以使用该文本或修改它。 2(Options属性 Options属性集中的值确定查找与替换对话框的表现与外观。 二、 查找对话框组件的事件 查找对话框组件的事有OnFind,当用户选择查找下一个按钮时,就出现OnFind事件。 三、 调用查找对话框的方法 要调用查找对话框,在要使用查找对话框的相应事件处理程序中使用Execute方法即可,其语法为: FindDialog1.Execute; 其中,FindDialog1为查找对话框的Name属性的值。 10.1.8 替换对话框组件(ReplaceDialog) 一、 替换对话框组件的属性 ReplaceText属性:该属性为字符串型,在查找中若FindText的值找到,该属性用来替换由 45 FindText属性指定的字符串。 , 替换对话框组件的事件 替换对话框组件有二个事件OnFind、OnReplace。 当用户选择查找下一个按钮时,就出现OnFind事件。 当用户选择替换对话框中的替换或全部替换按钮时,则OnReplace事件出现。在OnReplace事件处理程序中,可以编写替换查找到文本的代码。代码中可以使用Options中的值来确定如何替换文本。 二、 调用替换对话框的方法 ReplaceDialog1.Execute; 其中,ReplaceDialog1为查找对话框的Name属性的值。 10.3 文件相关控件 主要介绍win3.1,win3.2,sample,dialogs下的有关控件。 10.3.1 win3.1的文件相关控件 一、 filelistbox 文件列表框控件FileListBox显示当前目录中的文件,缺省的设置是显示所有文件。通过改变Mask属性来设置过滤器,可以适用DOS的标准通配方式,选择要显示的文件名。当指定多个过滤器时之间用“;”隔开。 二、 directorylistbox 目录列表框控件DirectoryListBox显示当前驱动器内的目录,并且允许用户在程序执行时切换目录。 三、 drivecombobox 驱动器下拉式列表框控件DriveComboBox显示当前所在的驱动器,并且在执行时允许用户在驱动器之间切换。 四、 filtercombobox 设置过滤器 10.3.2 win3.2及sample的文件相关控件 46
/
本文档为【delphi可视化编程讲稿】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索