您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 《数据库应用技术――Delphi应用系统开发》-第四章
第4章创建应用程序界面本章学习要点l学习窗体组件的作用及其设计l学会为窗体编制事件处理方法程序l掌握菜单的设计方法l掌握弹出式菜单的设计方法l学习有数据源和无数据源窗体的设计方法应用程序要展示给用户的主要界面形式是窗体,用户要通过程序员提供的窗体来进行操作,或者获取所希望的信息。因此,为计算机信息系统设计美观和友好的应用程序界面,是一项非常重要的内容。窗体是可视化编程中最基本的组件,任何一个可视化编程工具都提供了这一组件。在设计完管理信息系统的数据库之后,就应该为用户设计合适的应用程序窗体了,提供程序与用户交流的一个窗口,可以说,没有窗体,应用程序的框架就很难建立起来。窗体是Delphi基本的构造模块,Delphi所有的可视化程序设计工作都是在窗体上进行的。在程序运行之后,这些窗体实际上就是显示出来的最主要的人机界面。无论是需要进行信息查看,还是需要对数据库系统中的数据进行添加、修改、删除等编辑操作,信息系统的使用者对数据库中数据所进行的任何操作均在窗体中进行。4.1窗体与组件在Windows环境中,人机交互主要是在一些窗体和对话框中进行的。在Delphi中,窗体指的就是窗口和对话框,进行可视化程序设计一般就是从窗体开始并在窗体中完成的。窗体与组件的关系非常密切。窗体就像一个可以放置东西的桌面,可以根据任务的需要在窗体上放置各种各样的组件。从程序设计的角度来看,一个窗体对应一个存放源程序的单元文件。其中窗体展示的是程序运行时的操作界面,而单元文件定义了窗体中所有组件的对象(包括属性、事件和方法)以及对它们的操作。从视觉的角度来看,窗体可以包含很多组件的对象。但这并不是说窗体类包含了组件类型或者说窗体是组件的父类。事实上窗体和组件都是从TComponent类继承下来的,它们都有公共的TObject祖先类。窗体类是从TComponent类派生的TForm类,所以可以将窗体看成一个特殊的组件,如Panel组件。Delphi中的所有组件都被封装在可视化组件库VCL中,集成开发环境中的组件面板就是VCL的实现。在窗体中进行可视化程序设计时要涉及到VCL组件面板中的组件和在该窗体对应的单元文件上编写代码,这种关系可通过第2章的图2-1来表示:在组件面板上选择需要的组件放在窗体Form上;在对象查看器中设置该组件对象的属性;窗体的单元文件会自动生成窗体中的组件对象的信息以及在单元文件中编写程序处理代码。4.2窗体基本控件及其应用除窗体之外,还有种类繁多、性能各异的其它组件,它们都是Delphi应用程序设计和实现的基本单元。学习Delphi程序设计,首先要学会常用组件的使用方法。在窗体中可以添加各种对象,进行窗体的界面设计。向窗体中添加对象的方法是,首先单击相应组件板的控件图标,接着在窗体的适当位置按下鼠标左键并拖动鼠标,即可画出相应的对象。在Delphi中,组件是可视化编程的基础,程序员用它来设计用户界面,并且给予应用程序一些非可视化功能。对于两种不同类型的Delphi开发者——应用程序开发者(ApplicationDeveloper)和可视化组件编写者,组件有不同的含义。对于应用程序开发者来说,组件就是从组件面板上得到的一个实实在在的事物,一般被放在窗口上。应用程序开发者可以修改其属性并且建立事件的处理过程,从而得到组件的外观和内在的作用。这个过程的完成,是应用程序开发者工作的核心和主要工作内容。对于组件编写者来说,组件只是对象PASCAL语言中的对象,这些对象可以封装系统提供的行为元素(包括Windows的标准组件),一个组件的代码构成了该组件的全部行为。由于Delphi提供了丰富且功能强大的组件,程序员就可以集中精力去创建应用程序,而不必从头开始去创建GUI、数据库功能和程序之间的通信。程序员更注重的是程序整体的规划和设计,而不再是怎样编写一句句的重复和冗长的代码。一切都是这么简单,大体的框架总是已经搭好了,紧接着的任务就是根据不同的需要把它们组装起来。如图4-1所示的是Delphi的组件面板。图4-1Delphi的组件面板4.2.1标签和编辑框在开发基于对话框应用程序的时候,标签和编辑框组件是利用相当广泛的组件。标签和编辑框的使用是任何一个程序员必须掌握的知识,下面将介绍标签和编辑框的使用方法1.Label标签标签是Delphi中最简单的组件,用于显示字符串,通常显示的是文字说明信息。在Windows程序设计过程中,标签(Label)是常用的组件之一,它是从TCustomLabel继承下来的,而TCustomLabel又是从TGraphicControl继承下来的。由于Label是一个典型的非窗口组件,它没有窗口句柄,也不会有输入焦点,但可以把它与标注的组件关联,以后,当用户按下这个标签的加速字符时(按鼠标无效),输入焦点将自动移到关联的组件上。也就是在标签中设置热键,在Caption属性值中输入含有“&”的字符串,当用户使用“Alt+关键字母”时,将自动选中它所指向的对象。方法是设置Label部件的FocusControl属性,选择与它关联对象的对象名。标签的属性很多,下面介绍一些常用属性。Alinment属性:设置标签上的文字在水平方向上的对齐方式,可以设为taLeftJustify(居左)、taRighJustify(居右)和bcCenter(居中)。AutoSie属性:设置标签是否自动随文本的变化而改变大小。如果这个属性设为True,标签的尺寸随着文字的尺寸和字体自动调整。如果设为False,标签的尺寸不变,如果输入的文字太大将被剪裁。FocusControl属性:设置按下热键时,获得焦点的控件名,用于指定关联的组件。TLabel的这种高级用法通常用在“Open”、“Save”等对话框中。Layout属性:设置标签上的文字在垂直方向上的对齐方式,可以设为tlTop(靠上)、tlCenter(居中)和tlBotton(靠下)3个值。ShowAccelChar属性:决定是否将&作为热键字符的标记。如果这个属性设为True,加速字符以字母加下划线的形式显示,如果设为False,将不显示加速字符,FocusControl属性也无效。Transparent属性:一般情况下,标签显示在组件的旁边,但有时候需要把标签加在组件上。例如,要在一个地图上标注某个地名,这时候可以把Transparent属性设为True,这样,标签就是透明的,不会盖住地图上的内容。2.编辑框在应用程序的界面上,往往需要用户输入一些文字,或者以一定的格式将文本显示给用户时,可通过编辑框组件来实现。编辑框是个相当灵活的输入工具,可以输入单行文本,也可以输入多行文本,还具有根据控件的大小自动换行以及添加基本格式的功能。在Delphi中,编辑组件包括以下一些组件:Edit组件,它可以显示和编辑单独的一行文本,Edit组件位于组件面板的【Standard】页中;Memo组件,它可以显示、编辑多行文本,Memo组件也位于组件面板的【Standard】页中;MaskEdit组件,该组件可以显示、编辑具有指定格式的文本,如6位数字的邮政编码、固定格式的电话号码等,这个组件位于【Additional】页上;RichEdit组件,这个组件可以显示、编辑具有丰富文本格式(RichTextFormat)的文件,如.rtf文件等,它位于【Win32】页上。下面首先介绍Edit组件。它的作用是让用户输入单行文字,用户在组件中输入字符时,Text属性总是保持为最新内容,并将触发OnChange事件。这里介绍的是TCustomEdit的属性、事件和方法(TEdit没有自己的属性、事件和方法)。AutoSelect属性:设置当Edit组件获得输入焦点时,是否自动选中编辑框中的所有文本。如果这个属性设为True,当输入焦点移进编辑框时,编辑框的文字自动加亮(表示被全部选择),此时按下任意一个键,编辑框原有的文字将被刚键入的字符代替。AutoSize属性:确定编辑框的高度是否随文本的高度的改变而改变。如果这个属性设为True,编辑框的高度自动适应输入文字的字体的高度(编辑框的BorderStyle属性为bsSingle时才有效)。BorderStyle属性:设置编辑框的边框类型,默认是bsSingle,表示边框是单细线。如果设为bsNone,表示没有边框。这个属性与Ctrl3D属性配合使用,可以产生不同的视觉效果。HideSelection属性:如果这个属性设为True,当输入焦点从编辑框移走时,编辑框内原先选择的内容不再保持选择状态。MaxLength属性:设置可输入文字的长度,设为0表示无限制。即使MaxLength属性设得很小,编辑框中原有的内容也不会被裁断。Modified属性:如果自上次Modified属性被设为False以来编辑框的文字发生了变化,这个属性将返回True。Passwordchar属性:默认为#0,表示用户键入什么字符编辑框显示什么字符,如果这个属性设为其他字符,用户键入的字符将转换成设定的符号,如果编辑框用于键入口令时,最好把Passwordchar属性设为*,这样别人就看不到所键入的字符。SLMIS系统用户登录口令文本框的Passwordchar属性设为了*。ReadOnly属性:如果这个属性设为True,表示编辑框是只读的,用户不能修改编辑框的内容。不过这个属性往往给人错觉,因为即使把ReadOnly属性设为True,仍然可以在编辑框中移动光标,好像能够编辑一样。因此,建议把编辑框的Enable属性设为False。编辑框的方法在实际的编程过程中经常用到,表4-1所示编辑框的常用方法。表4-1编辑框的常用方法方法说明Clear清空编辑框中的文本内容ClearSelection删除编辑框中被选中的文本内容GetTextLength返回编辑框中的文本字符串的长度ClearUndo把Undo缓冲区中的内容清掉,这样就不能撤消刚刚所做的修改CopyToClipboard把编辑框中选择的内容复制到剪贴板中CutToClipboard把编辑框中选择的内容剪切到剪贴板中GetSelTextBuf把编辑框中选择的内容复制到第一个参数指定的缓冲区中,并返回复制的字符数PasteFormClipboard把剪贴板中的内容粘贴到编辑框中SelectAll选择编辑框中的全部内容SetSelTextBuf用Buffer参数指定的内容替换编辑框中选择的内容Undo撤消用户刚刚在编辑框中所做的修改下面介绍编辑框组件的一些常用事件。OnChange事件:当编辑框中的内容发生改变时,将触发这个事件。虽然在Edit组件中输入字符会被触发该事件,但是要在编辑框中实现过滤字符的功能,最好处理编辑框的OnKeyPress事件。可以利用这一事件在输入的时候做一些其他的事,如改变标签的显示字符。OnDblClick事件:当编辑框被双击时触发此事件。OnKeyPress事件:当用户在键盘上按下单个字符时触发这个事件。此事件经常用来过滤用户输入的字符。SLMIS系统有许多文本框都将非数字字符过滤掉了,程序如下:procedureTdfmbasehousenew.Edit1KeyPress(Sender:TObject;varKey:Char);beginifnot(keyin['0'..'9',#8])thenkey:=#0;//过滤非数字字符,只允许输入0—9这10个数字以及键盘上的退格键“←”end;掩码编辑框(MaskEdit组件),与编辑框组件大部分的属性和方法都是类似的,主要区别在于它的数据输入有格式要求,常用来定制想要的数据格式。MaskEdit组件最重要的属性是EditMask,如图4-2所示是设置输入查询条件区、栋文本框EditMask属性时的界面。屏蔽字符串用分号隔成了三部分。第一部分是屏蔽本身,它确定了字符串的格式;第二部分指明了屏蔽字符是否作为数据的一部分,其中0表示屏蔽字符不作为数据的
本文标题:《数据库应用技术――Delphi应用系统开发》-第四章
链接地址:https://www.777doc.com/doc-3589850 .html