Transcript Document

《Delphi程序设计》工学结合特色精品课程
Keep on walking
——杨丽敬
第__三_模块
本模块题目:可视化编程、窗体与组件
主要教学内容和课时分配(请注明:* 重点 # 难点 ):
1.可视化程序设计
1课时
2.窗体组件
*
1课时
3.容器类组件
*
1课时
4.文本显示与编辑组件
*
1课时
5.按钮组件
*
1课时
6.复选框和单选按钮
#
1课时
7.列表框和组合列表框
#
1课时
8.组件布局
1课时
教学目的要求:
掌握窗体与常用组件的重要属性、方法和通用事件;
掌握Delphi组件设计用户程序界面的方法;
使用Delphi的集成开发环境进行可视化程序设计;
能够创建窗体生成窗体应用程序;
熟悉可以在窗体中拖放的各种组件。
教学方法和教学手段:
教学方法运用了多媒体课件讲授、开发进度讨论、代码编写示教、系统分析指导等。教学手段采用板书、多媒体、模型、示例等教学工具。
讨论、思考题、作业:
实训题目1:
设计一个简单的窗体,自动产生两个不大于100的随即整数(用random、round函数),要求分别输入加减乘除的运算结果,程序判断运算结果是否正确,并
给出提示。 1课时
实训题目2:
设计一个包含“确定”和“取消”按钮的退出应用程序的对话框窗体。 1课时
实训题目3:
设计一个窗体,在单选扭的单击事件中将选出的文字内容显示在标签中。 1课时
实训题目4:
设计只能输入18位身份证号码的编辑框,并将编辑框中输入的数字赋给自定义变量id。1课时
备注:
Chap3 可视化程序设计与基本组件
Delphi中的类
窗体
容器类组件
文本显示与编辑组件
按钮
选项按钮
列表组件
组件的布局
Timer组件
组件与TComponet类
组件的分类
功能
组件
数据输入与处理
Edit、Memo、Maskedit、Richedit、Dbedit、Dbmemo、DbRichedit
按钮输入和选择
选项
button、checkbox、radiobutton、bitbtn、speed button、 Dbcheckbox、 dbradiobutton、tabset、
toolbar、coolbar、mainmenu、popupmenu
列表
Combobox、treeview、listview、checklistview等
分组
Groupbox、radiogroup、panel、scrollbox等
反馈信息
Lable、statubar、progressbar
表格
Stringgrid、 dbgride 、grawgrid等
图形
Image、shape、bevel、imagelist、animate、paintbox
常用对话框
Opendialog、savedialog 、fontdialog、 openpicturedialog、savepicturedialog、 colordialog、
finddialog、replacedialog、printdialog、printersetupdialog
返回
窗体(一)
窗体也是一个组件,也具有属性。
窗体的主要属性
name、caption:名称和标题
left、top:窗体的位置
height、width:窗体的高度和宽度
Color、font:窗体客户区的背景颜色与窗体的字体
visible、 enabled:窗体组件的可视性和有效性
windowsState:窗体运行时的初始状态
position、borderStyle:窗体运行时的位置和边框类型(详见参考书)
窗体(二)
窗体的主要事件
OnCreate(分配资源设置窗体的标题、位置、是否最大化等初值)和OnDestroy(释放资源)
OnActivate(窗体被激活)OnDeactivate (窗体失去焦点)
OnCloseQuery(是否关闭窗体)和OnClose (枚举类型的参数action决定它关闭from的操作,
多用于MDI的子窗体)值为:
canone:form不关闭,无任何操作;
cafree:释放form所占的内存;
cahide:隐藏form;
caminimize:最小化form
4. Onkeydown (在窗体上按下任意键触发)与onkeyup(释放时)
OnCanResize和OnResize(组件改变大小时触发)
OnShow和OnHide(组件隐藏时触发)
小结:
窗体事件有多种,常见的如上所述,其它可慢慢积累。
建立窗体的顺序:见2.3.1演示窗体创建和获得焦点事件例子
OnCreate
Onshow
OnActivate
其它事件
结论:每个组件激发的事件是有顺序性的。
返回
实验五、窗体练习
试验目的:进一步熟悉可视化编程的步骤
实验内容:
如何改变窗体上几个组件获得焦点的次序;
修改窗体的简单属性观察效果,例:窗体的图标(*.ico);
分别实验窗体上的五个事件(create\closequery\close\keydown\keypress);
嵌入窗口的创建;
创建启动画面。(两种方式)
消息框函数
1.格式1
MessageDlg(‘提示信息串',消息框类型,按钮类型,0);
例:
MessageDlg( '继续吗?', mtwarning, [mbyes,mbno], 0);
①信息串可以是任意字符。
②消息框类型决定窗口的标题和图标,有5种
MtWarning、mtError、mtinformation、mtconfirmation、mtcustom
③按钮类型有16种
按钮类型要加方括号,且多个按钮用逗号隔开:如 [mbok, mbcancel]。但以下类型不用加方括号:
mbyesnocancel, mbokcancel, mbAbortRetryIgnor。
④函数返回值为:所按的按钮文本字符前加 mr。 即:
mryes, mrno, mrok, mrcancel, mrAbort, mrRetry, mrIgnore等。
2.格式2
MessageDlgPos(‘提示信息串',消息框类型,按钮类型,0, x, y );
x, y 表示信息框出现的位置,为屏幕像素值。
如:MessageDlgpos( '继续吗?', mtwarning, [mbyes,mbno], 0, 200, 200 );
MessageBox函数
MessageBox函数是Windows API函数,在DELPHI6中能够直接使用。
1.格式1:
MessageBox( hWnd, Text, Caption, style );
如:messagebox(form1.handle , ' 退出本系统吗?', 'hello', mb_yesno+mb_iconquestion);
注:handle是指句柄
(1)Style参数通常由以下二部分组合:
l 按钮类型常量
MB_ABORTRETRYIGNORE 、 MB_OK 、 MB_OKCANCEL、MB_RETRYCANCEL、
MB_YESNO、MB_YESNOCANCEL; retry重试
abort 放弃 、取消、终止
l 图标类型常量{icon}
MB_ICONEXCLAMATION(或MB_ICONWARNING):显示感叹号
MB_ICONINFORMATION(或 MB_ICONASTERISK):显示小写字母i
MB_ICONQUESTION: 显示问号?
MB_ICONSTOP(或MB_ICONERROR 或 MB_ICONHAND):显示错误标志X
注:函数返回值(详见帮助)
Value 数值 Meaning
IDOK 1 OK button was selected.
IDCANCEL 2 Cancel button was selected.
IDABORT 3 Abort button was selected.
IDRETRY 4 Retry button was selected.
IDIGNORE 5 Ignore button was selected.
IDYES 6 Yes button was selected.
IDNO 7 No button was selected.
格式2
application.MessageBox( Text, Caption, style );
如:
application.MessageBox('This is a sample!','HELLO',MB_OK+MB_ICONEXCLAMATION);
GroupBox
容器类组件
组框,一个带有标题的组件。
Panel:以多种三维效果显现出来的矩形区域
返回
文本显示和编辑组件
Label标签与Edit单行编辑框
MaskEdit格式编辑框
Memo、RichEdit与SpinEdit
返回
文本显示与编辑
Label见3.2.1使用Label组件例子
只能显示文本,不能编辑。其主要属性有:
Caption(标题)、autosize(自动调整大小)、alignment(文本水平对齐)、Layout(
文本垂直对齐)、WordWrap(换行)、transparent(透明)
Edit:编辑单行文本见1.4.1转换大小写例子
主要属性:autoselect(获得焦点修改替换)、enabled(是否可用)、BorderStyle(边框风格)、passwordchar(
以遮掩形式显示如* )、readonly(只读不能修改,但可以复制)、Text(显示内容的值)、TabOrder(焦
点获取的顺序)、Charcase(大小写)
常用事件:onChange
此事件可区分modified属性是否变化
3.运行起来的属性
Seltext sellength等
如果把一个Lable组件的FocusControl
属性设置为同一个表单上的Edit组件,
label中Caption包含有&字符,如&File,
F下面有下花线。你一按ALT+F,焦点
就到label相应的Edit了。
可在keypress事件用以下语句获得焦点:
If key=#13 then edit1.setfocus;
如果内容修改可在onexit事件中加入:
If edit1.modified then
Begin
Edit.selectall;
Edit1.CopyToClipboard;
Edit2.PasteFromClipboard;
End;
返回
*MaskEdit(additional页)
MaskEdit:定制编辑框的输入格式其主要属性有
EditMask:是用来控制用户输入数据格式的屏蔽字符串。
屏蔽分为三部分,用分号分隔,如“!99/99/00;1;_”。第一部分是屏蔽的主要部分,决定数据的格式;第二
部分决定是否将屏蔽中的字符作为数据的一部分,它将影响Text属性中的值;第三部分指出屏蔽中用来代表未
输入数据的字符。
Text、EditText
当屏蔽字符串第二部分为0时,Text表示用户输入的字符串,EditText表示带格式的字符串。当
屏蔽字符串第二部分为1时,Text和EditText属性的值是相同的,都是带格式的字符串(保留合
法字符的选项)。
注意:EditText是运行时属性,在“ObjectInspector”中看不到。
Memo、RichEdit与*SpinEdit
Memo:处理多行文本
主要属性:Lines(设置多行文字)、WantReturns(ctrl+Enter的不同)、
WantTabs(ctrl+Tab的不同)、ScrollBars(水平或者垂直滚动条)见2.6.2记事本
例子gettextlen 及lines的各种方法(同后面items)
Rich Edit:多行RTF(rich text format) 文本编辑框
主要属性:SelStart(第一个字符编号为0)、SelLength(长度)、DefAttributes(缺省)
、SelAttributes(选定)、Paragraph
主要事件:OnSelectionChange
*SpinEdit:渐变编辑框(sample页)
主要属性:Value、MaxValue、MinValue
主要事件:OnChange。
返回
SelText:表示编辑控件文本的所选部分;
SelStart:指定第一个被选字符的位置;
SelLength:指定被选字符数。
而SelAttributes是一个TTextAttributes对象,包括字体名、颜色、大小、字形,利用它可以
获得或设置当前选择文本的字体格式。要改变当前所选文本的单个属性,可以读取
SelAttributes,并设置其中一个属性。要改变所有属性,可把SelAttributes设为具有要求
配置格式的TTextAttributes对象。如果没有所选文本,
SelAttributes就表示光标所在位置的格式。而如果再插入新的文本,它的字体格式将匹配
SelAttributes。
缺省字符格式DefAttributes
实验六、界面组件练习一
试验目的:基本组件的练习
试验内容:
完成图3.10选择界面的效果
Combobox编辑框的新输入的值加入到下拉列表中,并使新值与原来的值不重复
。
实训:设计只能输入18位身份证号的编辑框,并把输入的数字赋给自己定义变
量id;
总结那些组件有items属性
按钮
Button:一种有标签的灰色组件
主要属性:cancel、default都会以taborder的数为准
主要事件:OnClick
BitBtn:按钮表面可显示位图文件,按钮文本颜色也可改变,其主要属性有:
Kind(常见按钮)
Glyph(选用文字)
Layout(图片与文字的布局)
SpeedButton:一种可成组工作的按钮,其主要属性有:
Down(默认为false,并且groupindex要设置才生效 )
Flat
GroupIndex(值为0表示不和其它组件协同工作)
见3.3.2按钮例子
选项按钮
CheckBox
复选框,是一个旁边带有文字说明的方框,有选中和未选中两种状态,其主要属性为Checked
、allowgrayed、state
RadioButton
单选按钮,一组互斥的选择,其主要属性为Checked。
RadioGroup
单选按钮组,一个GroupBox与一组RadioButton的组合,其主要属性有:
columns、items、itemindex见3.3.3单选框和复选框例子
返回
Items属性
Items属性的类型是Tstrings数组
Items类常用的属性有:
增加项add
插入项insert
删除项delete
统计项数count
清除项clear
列表组件
ListBox:列表框,一个内含若干选项的显示框。
主要属性:items、itemindex(用
ListBox 1. items [ListBox 1. itemindex]表示选中项的字符串)、columns、multiSselect(是否允
许多选)、Selected(是否被选中结果是布尔型的如: Selected [i]为true,表示第i-1个选项被选中)
、sorted(指示 ListBox 中的项是否按字母顺序排序。 )EXtendselect
主要方法:clear(清除所有选项)
ComboBox:组合框,是Edit和ListBox的结合体。
主要属性:dropdowncount、maxlength(仅对style的几种有效)、style、text(表示当前项的值)
主要方法:clear 注意与ListBox的区别
主要事件:与listbox类似,还有ondropdown
CheckListBox:是ListBox的一个扩展
主要属性:checked、state见example3-3
返回
组件的布局
布局工具
选择多个组件(按下shift再选择)
对齐组件工具Edit|size、align
调整组件大小
Parent属性:父控件(包容器)见例窗体的嵌入
Owner属性:指组件的所有者,他负责组件的组件的创建和释放。比如窗体上的组件的所有者就是
窗体,而窗体的所有者是Application
Owner是拥有该控件的类,最后负责删除该控件 Parent该控件的父控件,该控件放在Parent控件
上。 例如:一个Label的Owner一般是Form,但 Parent可能是一个Panel.
共同点:运行阶段的属性,只能通过代码设置
实验七、界面组件练习二
实验目的:
熟练掌握简单组件
实验内容:
参照project_xsda.dpr界面添加组件
Delphi易混淆的几个概念
Self和sender
sender 在事件处理程序中,至少包含一个参数sender,它代表触发事件处理程序的组件,有
了该参数就可以使多个组件共用相同的事件处理程序。
Self只能用于方法中,不能用于过程中。它所编程序范围是在哪一个类中。Delphi大多是在窗
体范围内编程,self即指窗体,即代表“.”号前的组件名。
Sender--意义:指本对象。Sender在什么对象相关代码里,那么Sender就是什么。
Self--意义:指本类,也就是Self被引用的类。比如若在类TMyClass内引用了Self,那么
Self=TMyClass.
Splitter分隔条
主要属性:align、beveled(是否出现凹陷的直线)、MinSize(组件旁边组
件的最小值)
主要事件
1)OnCanResize:splitter组件被拖动而试图改变其他组件大
小时触发
2)OnMove:splitter被拖动且改变了相应组件的大小后触发见
例3-4
Bevel组件实现分隔
返回
Timer定时器
Timer定时器是一个非可视化组件,能够定时地触发OnTimer事件,完成模拟时钟、系统延时等工作。
主要属性
Enabled:当值为true时,打开定时器;否则关闭定时器。默认值为true。
Interval:控制OnTimer事件触发的时间间隔,单位是毫秒,类型是Integer。将Interval设置为0,
相当于关闭定时器。默认值为1000(1秒)。
OnTimer事件
当Timer打开时,每经过Interval属性指定的时间,Timer就会触发OnTimer事件,执行其中的程序。
见3.5计时器例子
对于组件的属性和方法也是需要在学习中慢慢积累的!
希望大家能一周学习一个实例会收获不小奥!
返回
感谢聆听!
Thanks for your time!