编辑型组件
3.5.1 Edit 组件
1. Edit 组件的常用属性
文本框组件(Edit 组件)也是 Windows 程序中常用的组件,它主要用于输入单行文字。 表 3-7 给出了文本框组件的一些常用属性。
表 3-7 Edit 组件的常用属性
属 性 |
说 明 |
PasswordChar |
这个属性在一些文本框类组件如 MaskEdit、DBEdit 中都有。默认时该属性为#0,即 没有掩码。用户可以自己设置一个掩码,如“*”,之后用户在文本框中输入的字符 都将以“*”字符显示,而隐藏真实的字符 |
AutoSize |
确定文本框是否随字体变化而自动变动尺寸,默认为 True |
Text |
用于显示和保存文本框中的字符串 |
MaxLength |
确定文本框最多可以输入的字符数,默认为 0,表示可以输入任意多的字符 |
ReadOnly |
确定程序运行时,用户是否可以改变文本框中的内容。若为 True,表示不可以编辑 |
AutoSelect |
确定当文本框获得输入焦点时,文本框中的文字是否自动被选中 |
2. Edit 组件的常用事件
Edit 组件常用的几个事件为 OnChange 事件、OnKeyPress 事件和 OnEnter 事件(见 表 3-8),下面对它们做简单的介绍。
表 3-8 Edit 组件的常用事件
事 件 |
说 明 |
OnChange |
当文本框中的内容发生变化时,触发该事件,它是最常用也是最有用的事件之一 |
OnKeyPress |
当在文本框中按下一个按键时,触发该事件 |
OnEnter |
当文本框获得输入焦点时,触发该事件 |
使用 OnEnter 事件,可以在文本框获得输入焦点时,给出提示或触发其他事件。
使用 OnKeyPress 事件,可以限制在文本框中输入的字符的种类。下面的例子限制了文 本框中只能输入数字,而不能输入其他的字符。若按下非数字按键,将发出蜂鸣声。
Procedure TForml.Edit1keyPress(Sender:Tobject;var Key:Char); Begin
If not (key in ['0'..'9',#8]) then
Begin
Key:=#0; MessageBeep(-1);
End; End;
在上边的例程中,Key 为按下的字符,使用集合运算符 in 来判断输入的字符是否为数 字(0~9)或者是删除键#8(注意不要连删除键也屏蔽)。如果输入的不是数字,则使用语句 “Key:#0”将其屏蔽,#0 为空,表示没有输入。
使用 OnChange 事件,可以在文本框中的内容发生某种变化时,触发其他事件,如使 按钮生效或失效,让输入焦点转移到某个控件上。下面的例子在文本框 Edit1 中的内容为 “123456”时,使 Button1 生效,同时将输入焦点转移到 Button1 上。
Procedure TForml.Edit1Change(Sender:Tobject); Begin
If Edit1.Text='123456' then
Begin Button1.Enabled:=True; Self.FoucusControl(Button1);
End; End;
3.5.2 MaskEdit 组件
MaskEdit 组件(也称掩码编辑框)在【Additional】选项卡中,它是一种特殊的文本框, 它的主要属性是 EditMask。使用它可以设计许多复杂的输入格式。在选用 MaskEdit 之后, 需要为它设计一个输入格式。方法如下:
首先在窗体上选中 MaskEdit,在对象查看器(Object Inspector)中找到 MaskEdit 属性并 双击它,弹出【Input Mask Editor】对话框,如图 3.6 所示。
图 3.6 【Input Mask Editor】对话框
在【Input Mask Editor】对话框中选择想要的模式。如选择【Date】时,【Input Mask】 为“!90:90:90:;1;_”,在程序运行时在 MaskEdit 组件中将出现“_ -_ -_”的格式, 这样在输入数据时,只要输入数字而不必输入“-”,这就是掩码输入。
对话框左上角的【Input Mask】文本框用于输入掩码格式。掩码格式可以分为 3 个部分, 每个部分之间用分号“:”分开,如“!90:90:90:;1;_”,下面解释各输入格式符的 意义。
(1) 输入格式的第一部分是掩码本身,也就是数据输入格式。 在这一部分用一些特殊的格式符来表示应输入的字符类型及格式,如“!10A9:C>11<”。
MaskEdit 常用输入格式符见表 3-9。
表 3-9 MaskEdit 输入格式符
格 式 符 |
意 义 |
1 和 L |
1 表示该位置只可能是一个字母,可以用光标键跳过它,L 表示该位置必须是一个字母 |
a 和 A |
a 表示该位置只可能是一个字母或数字字符,A 表示该位置必须有一个字母或数字字符 |
c 和 C |
c 表示该位置只可能是一个字母,C 表示该位置必须有一个字母 |
9 和 0 |
9 表示该位置只可能是一个数字,0 表示该位置必须有一个数字 |
< 和 > |
“<”格式符表示随后的字母均以小写的形式显示,直到遇到一个“>”格式字符或“<>” 格式符。“>”格式符则与“<”正好相反 |
<> |
表示不做大小写转换,以输入时的形式为准 |
(续)
格 式 符 |
意 义 |
\ |
表示该格式符之后的那个掩码格式符将作为数据中的普通字符对待。如果想在数据中放进 一个掩码格式符,应该在这个格式符前放一个“\”符号。如“\A” |
# |
表示该位置可能是一个数字或正符号 |
! |
如有“!”表示数据前的空格将不被保存在数据中,没有“!”则数据后的空格不被保存。 “!”格式符只能放在掩码格式符的第一个字符处 |
;和/ |
标准的分隔符,可作为数据的一部分。其中“/”在显示时为“-”而非“/” |
(2) 在输入格式中的第二部分只有 0 和 1 两种选择。如为 1,则掩码中非用户输入数据
和标准分隔符等其他各种字符会作为数据的一部分保存;为 0 则不保存。 (3) 输入格式的第三部分用于表示数据中的空位用哪个字符代替显示。 例如,要输入一个汽车牌号 CA-300019。该数据前两位为字母且大写,第三位为一个
系统分隔符,后 6 位为数字。可以这样设计掩码格式:
!>LL/000000;1;_
其中,掩码的第二部分取为 1,表示系统分隔符“-”也将作为数据保存。第三部分的“_”
表示在掩码编辑框中为空时,用“_”来表示空位。也可以用空格来标识空位。 又如一个邮编 PO-100083,其中 PO 表示邮政,是每个邮政编码中都有的前缀,可以这
样设计掩码格式:
!PO/000000;1;_
注意:在掩码设计对话框的右侧是【Sample Masks】列表,其中有系统预设的常用的掩码格 式,如电话号码(Phone)、日期(Date)等。可以从中选择一个,然后进行必要的调整。 掩码设计对话框左下侧是一个【Test Input】栏,可以在其中输入字符,以检测输入 格式是否令人满意。
3.5.3 Memo 组件
Memo 组件是在 TMemo 类中定义的,与 TEdit 有着共同的祖先类 TCustomEdit。所以 Memo 组件与 Edit 组件有着很多共同的特性,不同的是,Edit 组件处理的是单行文本,而 Memo 处理的是多行文本。Memo 组件的常用属性见表 3-10。
表 3-10 Memo 组件的常用属性
属 性 |
属 性 类 型 |
说 明 |
CaretPos |
Tpoint |
光标在 Memo 中的位置(行和列) |
Lines |
TStrings |
是一个字符串数组,表示 Memo 中以行为单位的文本。是 Memo 中最 重要的属性 |
Modified |
Boolean |
确定文本是否被改动 |
ScrollBars |
枚举型 |
决定 Memo 是否具有滚动条和滚动条的类型 |
WordWrap |
Boolean |
设置文本是否可以换行 |
(续)
属 性 |
属 性 类 型 |
说 明 |
WantReturns |
Boolean |
设置 Memo 编辑时是否能插入回车符 |
WantTabs |
Boolean |
设置 Memo 编辑时是否能插入 Tab |
这里做几点说明:
(1) CaretPos 属性记录光标在 Memo 中的位置,如 Memo1.CaretPos.y 表示光标所在的 行号。
(2) Lines 属性实际上就是代表 Memo 组件中的文本,如 Memo1.Lines[0]代表第一行, Memo1.Lines[5]代表第六行,以此类推……这就是 Memo 组件最重要的属性。在 Object Inspector(对象查看器)中单击 Lines 属性右边的按钮,就会进入【String List Editor】编辑 框,在其中可以直接输入多行文本。
Memo.Lines.Add('增加一个新行。'); //在 Memo 最后一行添加一个新行的文本 Memo.Lines.Delete(5); //删除第六行 Memo.Lines.Insert(3,''); //在第四行插入一个新行的文本 Memo.Lines.Move(2,4); //将第三行移至第五行
(3) ScrollBars 属性的取值主要有以下几个常量:ssNone(无滚动条)、ssHorizontal(只有 水平滚动条)、ssVertical(只有垂直滚动条)和 ssBoth(同时具有水平和垂直滚动条)。如果没有 水平滚动条而文本长度又超过 Memo 组件所能显示的长度,则 Memo 组件自动将超出文本 折回到下一行显示。
Memo 组件的主要方法是 Lines 属性的 Add 方法、Clear 方法、LoadFromFile 方法、
SaveToFile 方法、Insert 方法、Delete 方法。
3.5.4 RichEdit 组件
RichEdit 组件在 Win32 标签页中。RichEdit 组件和 Memo 组件非常相似,但是 RichEdit 组件功能更强大,能够对文字进行格式化,如设置字体、颜色等,可以插入 OLE 文档,支 持鼠标拖放,还可以对文本进行搜索和打印。一般用 RichEdit 组件制作文本编辑器,但它 本身并没有提供完整的用户界面,如打开、保存、剪切、复制、搜索等操作,需要通过编 程配合其他组件完成。将 RichEdit 组件中的内容保存到文件或把文本文件内容载入组件中, 可使用 Lines 属性及 SaveToFile 和 LoadFromFile 方法完成。访问被选中的文本可以通过运 用 SelText、SelStart、SelLength 属性完成。读者可以使用 RichEdit 组件自己设计一个简单 的文本编辑器。
【例 3.3】 按钮类组件与 Memo 组件的使用。
1) 新建应用程序
启动 Delphi,从【Fi1e】菜单中选取【New Application】命令,开始一个新的应用文件。 此时,应用程序将有一个默认的窗体“Form1”。
2) 设置窗体属性
把窗体的 Height 属性设置为 304,Width 属性设置为 300。
3) 向窗体中添加组件
向窗体中添加 1 个 GroupBox 组件:GroupBox1,3 个按钮组件:Button1、Button2、
Button3,1 个 RadioGroup 组件:RadioGroup1,1 个 ColorDialog 组件:ColorDialog1,1 个
FontDialog 组件:FontDialog1 和 1 个 Memo 组件:Memo1。
4) 设置组件属性 窗体中的组件属性见表 3-11。
表 3-11 组件属性
组 件 |
名 称 |
属 性 |
属 性 值 |
属 性 |
属 性 值 |
GroupBox |
GroupBox1 |
Caption |
改变文本 |
|
|
Button |
Button1 |
Caption |
颜色… |
|
|
Button2 |
Caption |
字体… |
|
|
|
Button3 |
Caption |
内容 |
|
|
|
RadioGroup |
RadioGroup1 |
Caption |
对齐 |
Items |
左对齐 居中 右对齐 |
ColorDialog |
ColorDialog1 |
|
|
|
|
FontDialog |
FontDialog1 |
|
|
|
|
Memo |
Memo1 |
Lines |
睡觉 大地公公睡觉,静悄悄。 月亮婆婆睡觉,眯眯笑。 老爷爷睡觉,胡子翘。 小娃娃睡觉,呼噜呼噜,像只大花猫 |
添加组件并设置属性后窗体布局如图 3.7 所示。
5) 编写事件响应代码
编写 Button1、Button2、Button3、RadioGroup1 的 OnClick 事件的响应代码:
procedure TForm1.Button1Click(Sender: TObject); //设置颜色
begin
with ColorDialog1 do begin Color:=Memo1.Color; if Execute then Memo1.Color:=Color; end;
end;
procedure TForm1.Button2Click(Sender: TObject); //设置字体
begin
with FontDialog1 do begin Font:=Memo1.Font;
if Execute then Memo1.Font:=Font; end;
end;
procedure TForm1.Button3Click(Sender: TObject); //修正内容
begin
Memo1.Lines.Text:='布娃娃要睡觉' chr(13) chr(13) //chr(13)为回车符
'布娃娃,' chr(13) '要睡觉。' chr(13)
'小棉被,' chr(13) '盖盖好,' chr(13)
'伸出脚丫' chr(13) '乘风凉,' chr(13)
'阿嚏一声,' chr(13) '吓走小花猫。';
end;
procedure TForm1.RadioGroup1Click(Sender: TObject); //对齐设置
begin
case RadioGroup1.ItemIndex of
0:Memo1.Alignment:=taLeftJustify;
1:Memo1.Alignment:=taCenter;
2:Memo1.Alignment:=taRightJustify;
end;
end;
6) 保存程序 将单元文件保存为“Unit3_3.pas”,将项目文件保存为“Project3_3.dpr”。
7) 编译运行程序 单击工具栏上的【Run】按钮即可运行程序。运行后:
(1) 单击【颜色】按钮,在【颜色】对话框中选择黑色,文本背景色由白色变为黑色。
(2) 单击【字体】按钮,在【字体】对话框中选择 10 号大小、白色,文本字符由 8 号 字变为 10 号字,由黑色变为白色。
(3) 单击【内容】按钮,文本内容变为“布娃娃要睡觉”。
(4) 单击【居中】单选按钮,文本排列由左对齐变为居中。其效果如图 3.8 所示。
图 3.7 例 3.3 的界面 图 3.8 例 3.3 的运行效果