Futurebasic/語言/參考/handleevents
HANDLEEVENTS
HANDLEEVENTS執行許多影響使用者體驗的重要功能。它檢查系統事件佇列以及 FutureBasic 的內部事件佇列,以檢視您的程式是否發生任何尚未處理的最新事件。如果發現任何此類事件,HANDLEEVENTS會將它們從佇列中刪除並對其進行響應。HANDLEEVENTS還執行將控制權轉交給程序管理器的重要功能。程序管理器負責監督您 Macintosh 上所有程序的執行;一旦獲得控制權,程序管理器就可以允許另一個應用程式執行一段時間,然後將控制權返回給您的應用程式。
HANDLEEVENTS透過呼叫您在程式中指定的函式來響應某些型別的使用者操作。它以預定的“自動”方式響應其他型別的使用者操作。
“自動”響應由 HANDLEEVENTS
- 允許程序管理器將另一個程序置於最前面,如果使用者在應用程式選單中選擇了它或單擊了它的視窗之一。
- 如果使用者單擊了選單欄,則開啟選單並跟蹤選擇。
- 啟用非活動視窗,如果使用者單擊了視窗的結構區域(例如它的標題欄)。(如果視窗的
_keepInBack屬性已設定,則此操作將被禁止。) - 處理活動視窗的拖動和調整大小。
- 在當前活動編輯欄位(如果有)中執行滑鼠單擊和擊鍵的“標準”處理。
- 突出顯示和跟蹤單擊時的各種物件(例如按鈕、視窗關閉框等)
- 對於任何需要更新的視窗:重新繪製所有按鈕、捲軸、編輯欄位和圖片欄位(除非視窗的
_noAutoClip功能已設定)。還會重新繪製視窗結構區域的某些部分。 - 如果使用者按下 cmd-period,並且沒有標識
ON BREAK FN函式,則HANDLEEVENTS將顯示一個對話方塊,詢問使用者是否要停止或繼續。如果使用者選擇停止,則 FB 隨後將呼叫您指定的ON STOP FN函式(如果有),然後停止程式。
注意:您可以透過在系統事件處理函式中捕獲低階事件(尤其是_mButDwnEvt事件)來禁止和/或更改這些響應。有關更多詳細資訊,請參見下文。
“程式化”響應由 HANDLEEVENTS
有許多種常見的使用者操作,例如按鈕單擊和選單選擇,您需要使用程式語句顯式處理。當您編寫要處理特定型別事件的函式時,透過執行諸如ON DIALOG FN <functionName>或ON MENU FN <functionName>之類的語句,將其指定為事件處理函式。一旦您以這種方式指定了事件處理函式,HANDLEEVENTS將檢查最近的使用者操作,以確定其中是否有您的函式可以處理的型別。如果發現任何此類事件,HANDLEEVENTS將針對每個此類事件呼叫相應的事件處理函式一次。有關可以處理哪些型別的使用者操作,請參見各種ON <eventType> 語句的描述。
如果您沒有標識函式來處理特定類別的使用者操作,則HANDLEVENTS只會忽略該類別的操作。例如,如果您沒有使用ON DIALOG語句標識任何函式,則HANDLEVENTS將忽略按鈕單擊和其他類似操作。但是,HANDLEEVENTS仍然會執行上面列出的“自動”響應。
攔截系統事件 有時您可能需要對HANDLEEVENTS如何響應某些事件有更大的控制權。例如,您可能希望禁止或更改HANDLEEVENTS通常執行的某些“自動”響應。為此,您應該使用ON EVENT 語句將您的函式之一指定為“系統事件處理函式”。一旦您指定了這樣的函式,HANDLEEVENTS將首先呼叫該函式,然後執行其任何“自動”響應,最後呼叫您可能已指定的任何其他事件處理函式。HANDLEEVENTS要麼將系統事件傳遞給您的函式(如果佇列中有事件),要麼將“空事件”傳遞給您的函式(如果佇列中沒有事件)。
您的系統事件處理函式返回後,HANDLEEVENTS將繼續處理該事件,除非它是空事件。根據事件是什麼,HANDLEEVENTS可能會執行其一些“自動”響應,或者它可能會呼叫您的另一個事件處理函式。如果您不希望HANDLEEVENTS在您的系統事件處理函式退出後繼續處理該事件,那麼您需要“欺騙”FB 認為該事件是空事件。您可以在系統事件處理函式中,在處理完事件後執行以下程式碼行來實現這一點
theEvent&.evtNum% = _nullEvt
其中theEvent&是指向事件記錄的指標。
為了為使用者提供對操作的快速響應,並與其他程序共享執行時間,您的程式應儘可能頻繁地呼叫HANDLEEVENTS。大多數設計良好的程式都包含一個“主事件迴圈”,它在程式執行期間反覆呼叫HANDLEEVENTS,從而允許HANDLEEVENTS在事件發生時呼叫各種事件處理函式。
ON DIALOG; MENU; MOUSE; TEKEY