公共事件
# Smart 公共事件
# 1. 公用事件
有些事件对所有组件都是通用的,这些事件可以是与键盘有关的事件,也可以是与光标输入有关的事件,还可以是由于组件本身的状态改变(属性)或由于组件发生了某种行为(操作)而触发的事件。其中与键盘和光标相关的事件常常是大多数组件共有的事件,下表列出了 其中的一些事件及说明。
事件 | 适用范围 | 触发条件 |
---|---|---|
OnCanResize | 很多组件 | 发生在组件大小改变时,并允许用户停止操作 |
OnChange | 很多组件 | 发生在对象或其他数据改变时 |
OnClick | 大部分组件 | 发生在用鼠标单击组件时 |
OnDblClick | 很多组件 | 发生在用鼠标双击组件时 |
OnDragDrop | 大部分组件 | 发生在停止拖动组件时 |
OnDragOver | 大部分组件 | 发生在用鼠标拖动组件时 |
OnEnter | 窗口组件 | 发生在组件被激活时,即组件接受焦点时 |
OnKeyDown | 窗口组件 | 发生在按住键不松开时,该箏件向具有输入焦点的组件发送 |
OnKeyPress | 窗口组件 | 发生在按键过程中,该事件向具有输入焦点的组件发送 |
OnKeyUp | 窗口组件 | 发生在松开键时,该事件向具有输入焦点的组件发送 |
OnMouseDown | 大部分组件 | 发生在按下光标时,向光标所在组件发送 |
OnMouseMove | 大部分组件 | 发生在移动光标时,向光标所在组件发送 |
OnMouseUp | 大部分组件 | 发生在释放光标时,向光标所在组件发送 |
OnStartDrag | 大部分组件 | 发生在组件开始被拖动时 |
OnShow | 大部分组件 | 当组件或窗体显示的时候 |
OnCIose | 大部分组件 | 当组件或窗体关闭的时候 |
OnActivate | 大部分组件 | 当组件激活时 |
# 1.1. OnCanResize事件
property OnCanResize: TCanResizeEvent;
当窗体大小改变时触发该事件,利用该功能可控制窗体是否可以改变其大小。
- 应用
当窗体的大小改变到一定的范围时就停止改变。
procedure TMyHandler.BASEFORMCANRESIZE;
//窗体改变时触发事件 ,限制大小
begin
if((NewWidth > 700) or (NewHeight > 500)) or ((NewWidth < 300) or (NewHeight < 200)) then
Resize := False
else
Resize := True;
end;
2
3
4
5
6
7
8
# 1.2. OnChange事件
type TNotifyEvent = procedure (Sender: TObject) of object;
property OnChange: TNotifyEvent;
2
编辑组件中的文本发生改变时触发该事件,编写其事件处理程序可执行特定的功能。利用Modified属性查看是否实际改变,编辑组件的Text属性已经被更新来反映所做的改变。OnChange事件提供了第1次响应用户输入编辑组件的通知。
- 应用
OnChange事件是当文本框里的内容改变时被触发的。可以利用该事件提示用户输入合法数据。
procedure TMyHandler.EDIT1CHANGE;
begin
if FThis.Edit1.Text = '' then exit;
try
StrToFloat(Trim(FThis.Edit1.Text));
except
ShowMessage('请输入数字');
FThis.Edit1.SetFocus;
exit;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
# 1.3. OnClick事件
property OnClick: TNotifyEvent;
当用户用鼠标单击按钮时触发OnClick事件。
- 应用
在设计程序时,如果使用按钮组件,几乎都会用到OnClick事件。当用户单击按钮时,程序会调用按钮的OnClick事件处理过程。
procedure TMyHandler.BUTTON1CLICK;
begin
if paxfunc.YesNoMsg('确定要关闭此程序吗?','提示') then
FThis.Close;
end;
2
3
4
5
# 1.4. OnDblClick事件
type TNotifyEvent = procedure (Sender: TObject) of object;
property OnDblClick: TNotifyEvent;
2
双击组件产生该事件,可用该事件编写响应双击事件的代码。
- 应用
OnDblClick事件足在用户双击面板时被触发。
procedure TMyHandler.PANEL1DBLCLICK;
//双击面板触发该事件
begin
ShowMessage('用户双击了滚动框');
end;
2
3
4
5
# 1.5. OnDragDrop事件*
type TDragDropEvent = procedure(Sender, Source: TObject; X, Y: Integer) of object;
property OnDragDrop: TDragDropEvent;
2
OnDragDrop事件是在用户放下一个正被拖动的对象时被触发,其事件处理程序可指定用户放下一个对象时需要执行的行为。Source参数指定放下的对象,Sender指定放置对象的组件,X和Y是鼠标在组件上的位罝坐标。
# 1.6. OnDragOver事件*
TDragOverEvent = procedure(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean) of object;
property OnDragOver: TDragOverEvent;
2
当用户在组件上拖动对象时触发该事件,使用这个事件可用信号通知组件接受拖动的对象,使用户放下或停靠对象。在该事件处理程序中将Accept参数设置为 False表示拒绝被拖动对象,设置为True表示允许用户在组件上放下或停靠被拖动对象。
在触发这个事件前修改组件的DragCursor属性值可改变光标的形状,表示组件可接受被拖动对象。
Source参数指定拖动对象,Sender指定可能放下或停靠的位置,X和Y是屏幕的像素坐标, State指定拖动对象在组件上移动的方法。
说明:在该事件处理程序内,Accept参数默认为True。但如果未提供该事件处理程序,则组件拒绝被拖动对象,如同Accept参数设置为False。
# 1.7. OnEnter 事件
type TNotifyEvent = procedure (Sender: TObject) of object;
property OnEnter: TNotifyEvent;
2
当组件接受输入焦点时触发该事件。,窗口组件变为激活状态时,可使用其事件处理程序 执行指定的处理。当在窗体之叫转换,或在包含窗体组件的应用程序与另一个Windows应用程 序之阆转换时,该事件不会被触发。当在组件之间转化时,而这些组件分别在不同的容器组件 中,例如在TPanel和TGroupBox组件中时,则在触发组件的这个事件前先触发容器组件的OnEnter 事件。
- 应用
OnEnter事件在编辑框获得焦点时被触发。
procedure TMyHandler.BUTTON1CLICK;
//点击以获得焦点
begin
FThis.Edit1.SetFocus;
end;
procedure TMyHandler.EDIT1ENTER;
//接受输入焦点时触发
begin
ShowMessage('编辑框获得了焦点');
end;
2
3
4
5
6
7
8
9
10
11
# 1.8. OnKeyDown事件
type TKeyEvent = procedure (Sender: TObject; var Key: Word; Shift: TShiftState) of object;
property OnKeyDown: TKeyEvent;
2
当键盘的键被按下时触发该事件,并可与组合键一起使用。
- 应用
当用户按下键盘时显示相应的键值,按下Shift按键时不显示。
procedure TMyHandler.EDIT1KEYDOWN;
//按下字母或数字键盘时触发
begin
FThis.KeyPreview := True;
if (Key <> 16) and (Key <> 18) then
FThis.Edit2.Text := IntToStr(Key);
end;
2
3
4
5
6
7
# 1.9. OnKeyPress事件
type TKeyPressEvent = procedure (Sender: TObject; var Key: Char) of object;
property OnKeyPress: TKeyPressEvent;
2
当用户按下单个字符键时触发该事件,使用其事件处理程序可执行单个字符被按下时的特定操作。在这个事件 处理程序中,Key参数为Char类型,W此该事件注册按键 的ASCII字符。不符合ASCII字符值的键(如Shift或F1) 不触发该事件。组合键(如Shift+A)只触发一个该事件(例如如果Caps Lock键为闭状态,则Shift+A将产生A值)。 如果要响应非ASCII键或组合键,则使用OnKeyDown或 OnKeyUp事件处理程序。
- 应用
OnKeyPress事件是在用户按下一个单字符键时被触发。在程序中,可以利用该事件来防止用户输入非法字符。
procedure TMyHandler.EDIT2KEYPRESS;
//当键盘按下时触发,只允许输入数字
begin
FThis.KeyPreview := True;
if Not (Key in ['0' .. '9', #8]) then
Key := #0;
end;
2
3
4
5
6
7
# 1.10. OnKeyUp事件
property OnKeyUp;
当用户释放己经按下的键时触发该事件,使用其事件处理程序可在按键被释放时执行特定的处理。这个处理程序可响应所有键盘键,包括功能键和与Shift、Alt或Ctrl键的组合键。
- 应用
OnKeyUp事件是在用户释放已经按下的按键时被触发。可以使用该事件來显示单字符键的ASCII码。
procedure TMyHandler.EDIT1KEYUP;
//释放键盘时触发该事件
begin
ShowMessage(IntToStr(ord(Key)));
end;
2
3
4
5
# 1.11. OnMouseDown事件
type TMouseEvent = procedure (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object;
property OnMouseDown: TMouseEvent;
2
使用该事件的处理程序可处理按下鼠标按钮的操作,即响应按下左、石和中鼠标按钮以及转换键和鼠标按钮的组合。转换键为Shift、Ctrl和Alt键。X和Y参数为鼠标指针在Sender参数客户区的像素坐标。
- 应用
OnMouseDown事件在用户按下鼠标按钮时被触发。参数Sender指定触发OnMouseDown 事件的对象,Button表示用户按的鼠标按钮,Shift表示用户按的功能键(Shift、Ctrl或Alt),X、Y参数用于确定鼠标坐标。
procedure TMyHandler.PANEL1MOUSEDOWN;
//按下鼠标按键时触发
begin
if Button = mbLeft then
ShowMessage('用户按了鼠标左键')
else if Button = mbRight then
ShowMessage('用户按了鼠标右键')
else
ShowMessage('用户按了鼠标中键');
end;
2
3
4
5
6
7
8
9
10
# 1.12. OnMouseMove事件
type TMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState; X, Y: Integer) of object;
property OnMouseMove: TMouseMoveEvent;
2
使用该事件处理程序可处理在组件上移动鼠标光标的操作,使用Shift参数,可确定转换键的状态和鼠标按钮。转换键包括Shift、Ctrl和Alt键。X和Y参数为鼠标指针在Sender参数客户区的像素坐标。
- 应用
当鼠标在面板和按钮上移动时触发OnMouseMove事件。
procedure TMyHandler.PANEL1MOUSEMOVE;
//鼠标移动到面板上时,按钮字体变大
begin
FThis.Button1.Font.Size := 12;
end;
procedure TMyHandler.BUTTON1MOUSEMOVE;
//鼠标移动到按钮上时,按钮字体变小
begin
FThis.Button1.Font.Size := 8;
end;
2
3
4
5
6
7
8
9
10
11
# 1.13. OnMouseUp事件
type TMouseEvent = procedure (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,Y: Integer) of object;
property OnMouseUp: TMouseEvent;
2
使用该事件处理程序可处理用户释放鼠标按钮时的操作,即响应按下左、右和中鼠标按钮及转换键和按钮的组合。转换键为Shift、Ctrl和Alt键。X和Y参数为鼠标指针在Sender参数客户区的像素坐标。
- 应用
点击按钮释放时触发OnMouseUp事件。
procedure TMyHandler.BUTTON1MOUSEUP;
//当用户释放鼠标按键时触发该事件
begin
FThis.Button1.Font.Size := 12;
end;
procedure TMyHandler.BUTTON1MOUSELEAVE;
//当鼠标离开按钮时触发该事件
begin
FThis.Button1.Font.Size := 8;
end;
2
3
4
5
6
7
8
9
10
11
# 1.14. OnStartDrag事件*
type TStartDragEvent = procedure (Sender: TObject; var DragObject: TDragObject) of object;
property OnStartDrag: TStartDragEvent;
2
当开始拖动组件或一个对象并且DragKind为dkDrag时触发该事件,其事件处理程序可处理拖动操作,为DragObject参数创建TDragControlObject实例,以指定拖动光标或一个任选的拖动图像列表。Sender参数为将要拖动组件或对象的包容器。拖动结束时,不需要为DragObject调用Free方法。
如果该事件处理程序设置DragObject参数为NULL,则自动创建TDragControlObject对象 并从组件自身开始拖动。
# 1.15. OnShow事件*
property OnShow: TNotifyEvent;
当窗体被显示时触发该事件执行指定的处理。
# 1.16. OnClose事件*
TCloseAction = (caNone, callide, caFree, caMinimize);
TCloseEvent = procedure(Sender: TObject; var Action: TCloseAction) of object;
property OnClose: TCloseEvent;
2
3
OnClose事件发生在窗体关闭时,用于指定当一个窗体将要关闭时应访问哪一个事件处理者。
# 1.17. OnActivate事件*
property OnActivate: TNotifyEvent;
激活窗体时触发该事件,当窗体接受焦点时用OnActivate处理指定的过程。