公共事件
# 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處理指定的過程。