1.窗体组件
在Delphi中,窗体组件是一个容器组件,所有其他组件都要放到该组件中。
1.1窗体的属性
窗体的主要属性:
- Align
设置窗体在屏幕上的排列位置。其取值中,alClient - 表示使窗体占整个屏幕。
- AutoScroll
当内容不能完全显示时,是否出现滚动条。
- AlphaBlend
设置窗体是否透明显示。
- AlphaBlendValue
设置窗体的透明度,0-完全透明,255-完全不透明。
- BorderIcons
设置标题栏的系统按钮,可以定义显示系统菜单、最大化、最小化、帮助按钮。
- BorderStyle
设置窗体边框和标题栏的显示风格。该属性的取值会影响 BorderIcons属性的设置。
- FormStyle
设置窗体的风格,其中:fsMDIChild / fsMDIForm 用于定义MDI窗体。
- Visible
设置窗体的可见性。
- Icon
设置窗体的标题栏图标。
- WindowState
设置窗体在屏幕上的显示,可以是正常、最小化、最大化。
窗体的属性可以在 Object Inspector 中设置,也可以在运行时动态调整。
示例:通过按钮来控制窗体的属性。界面设计如下图:
滚动条组件属性设置:
组件 | 属性 | 值 |
透明度滚动条 | min | max | 150 | 255 |
垂直滚动条 | min | max | 200 | 600 |
水平滚动条 | min | max | 300 | 800 |
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
// 色彩
if Form1.Color = clYellow then
Form1.Color := clBlue
else
Form1.Color := clYellow;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// 标题
if length(Edit1.Text) > 0 then
Form1.Caption := Edit1.Text
else
ShowMessage('请设置窗口标题!');
end;
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
// 透明度
Form1.AlphaBlend := true;
Form1.AlphaBlendValue := ScrollBar1.Position;
end;
procedure TForm1.ScrollBar2Change(Sender: TObject);
begin
// 宽度
Form1.Width := ScrollBar2.Position;
end;
procedure TForm1.ScrollBar3Change(Sender: TObject);
begin
// 高度
Form1.Height := ScrollBar3.Position;
end;
1.2窗体的方法
窗体的常用方法:
- Close
关闭窗体。
- Hide
隐藏窗体
- Release
释放窗体,与 Free() 方法类似,该方法要等到窗体的所有事件或窗体中各组件的事件全部执行完毕才会释放窗体。
1.3 窗体的事件
常用的窗体事件:
- OnActivate
当应用程序窗体成为当前活动窗体时发生。对于MDI子窗体,只有在各个子窗体之间切换时,才会触发子窗体的该事件,如果从一个非MDI窗体切换到MDI窗体时,只触发MDI父窗体的该事件。
- OnCanResize
当窗体的大小发生改变时触发。
- OnClose
当窗体被关闭时触发。
- OnCloseQuery
当窗口关闭时触发,该事件包含一个CanClose参数,用于表示是否关闭窗口,默认值为True,将该参数设置为False可以阻止关闭窗体。
- OnCreate
在窗体创建时触发。一般在该事件中完成各种初始化工作,需要注意:在该事件中不要引用窗体中的组件,因为窗体还没有创建完成。
- OnDestroy
当窗体被关闭时触发,如果调用了窗体的Destroy、Free或Release方法,窗体及子窗体将被释放。
- OnPaint
当Windows系统要求重新绘制窗体时触发。
- OnResize
当用户或者程序调整窗口的尺寸时发生。
- OnShow
当窗体被显示时发生。
- OnKeyDown
键盘按下时触发。
- OnKeyPress
当窗体获得键盘输入焦点,且用户敲击键盘时触发。
- OnKeyUp
当放开键盘时触发。
- OnClick
鼠标单击时触发。
- OnDblClick
鼠标双击时触发。
- OnDrag|Drop
当鼠标在窗体中拖放时触发。
- OnDragOver
当鼠标在窗体中拖过时触发。
- OnMouseDown
鼠标按下时触发。
- OnMouseMove
鼠标在窗体中移动时触发。
- OnMouseUp
鼠标被释放时触发。
示例:检测鼠标和键盘操作,并在关闭窗体时询问是否关闭。界面设计如下:
图1:
图2:
示例代码如下:
procedure TForm1.FormClick(Sender: TObject);
begin
// 单击
Label1.Caption := '您单击了鼠标 ...';
end;
procedure TForm1.FormDblClick(Sender: TObject);
begin
// 双击
Label1.Caption := '您双击了鼠标 ...';
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
// 按键
Label1.Caption := '您按下了键:' + key;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
ret: Word;
begin
ret := MessageDlg('确实要关闭吗?', mtConfirmation, [mbOk, mbCancel], 0);
if ret = mrCancel then
CanClose := false
else
CanClose := true;
end;