跳轉到內容

Futurebasic/語言/參考/handleevents

來自華夏公益教科書,自由的教科書

HANDLEEVENTS

[編輯 | 編輯原始碼]
HANDLEEVENTS

HANDLEEVENTS 執行許多影響使用者體驗的重要功能。它檢查系統事件佇列以及 FutureBasic 的內部事件佇列,以檢視是否發生了任何針對您的程式的最新事件,而這些事件尚未處理。如果發現任何此類事件,HANDLEEVENTS 會將它們從佇列中刪除並對其做出響應。HANDLEEVENTS 還執行將控制權轉交給程序管理器的重要功能。程序管理器負責監督您 Macintosh 上所有程序的執行;一旦獲得控制權,程序管理器可能會允許另一個應用程式執行一段時間,然後再將控制權返回您的應用程式。

HANDLEEVENTS 透過呼叫您在程式中指定的函式來響應某些型別的使用者操作。它以預定的“自動”方式響應其他型別的使用者操作。

“自動”響應 by HANDLEEVENTS

  • 允許程序管理器將另一個程序帶到最前面,如果使用者已在應用程式選單中選擇它或單擊了它的視窗之一。
  • 如果使用者單擊了選單欄,則開啟選單並跟蹤選擇。
  • 啟用一個非活動視窗,如果使用者單擊了該視窗的結構區域(例如,它的標題欄)。(如果視窗的 _keepInBack 屬性已設定,則此操作將被禁止。)
  • 處理活動視窗的拖動和調整大小。
  • 在當前活動編輯欄位(如果有)中執行滑鼠點選和按鍵的“標準”處理。
  • 突出顯示並跟蹤單擊時各種物件(例如,按鈕、視窗關閉框等)。
  • 對於任何需要更新的視窗:重新繪製所有按鈕、捲軸、編輯欄位和圖片欄位(除非視窗的 _noAutoClip 功能已設定)。還會重新繪製視窗結構區域的某些部分。
  • 如果使用者按下 cmd-period,並且沒有標識 ON BREAK FN 函式,那麼 HANDLEEVENTS 將顯示一個對話方塊,詢問使用者是否要停止或繼續。如果使用者選擇停止,FB 然後呼叫您指定的 ON STOP FN 函式(如果有),然後停止程式。

注意:您可以在系統事件處理函式中捕獲低階事件(尤其是 _mButDwnEvt 事件)來禁止和/或更改這些響應。有關更多詳細資訊,請參見下文。

“程式化”響應 by HANDLEEVENTS
有許多種常見的使用者操作,例如按鈕點選和選單選擇,您將希望使用程式語句明確處理。當您編寫一個用於處理特定型別事件的函式時,您透過執行類似於 ON DIALOG FN <functionName>ON MENU FN <functionName> 的語句來將其指定為事件處理函式。一旦您以這種方式指定了您的事件處理函式,HANDLEEVENTS 將檢查最近的使用者操作,以確定其中是否有任何是您的函式可以處理的型別。如果發現任何此類事件,HANDLEEVENTS 將為每個此類事件呼叫相應的事件處理函式一次。請參閱各種 ON <eventType> 語句的描述,瞭解可以處理哪些型別的使用者操作。

如果您沒有標識要處理特定類別的使用者操作的函式,那麼 HANDLEVENTS 將忽略該類別的操作。例如,如果您沒有使用 ON DIALOG 語句標識任何函式,那麼 HANDLEVENTS 將忽略按鈕點選和其他類似的操作。但是,HANDLEVENTS 仍然會執行上面列出的“自動”響應。

攔截系統事件 有時您可能需要對 HANDLEEVENTS 如何響應某些事件進行更精細的控制。例如,您可能希望禁止或更改 HANDLEEVENTS 通常執行的一些“自動”響應。為此,您應該使用 ON EVENT 語句將您的某個函式指定為“系統事件處理函式”。一旦您指定了這樣的函式,HANDLEEVENTS 將首先呼叫該函式,然後再執行任何“自動”響應,然後再呼叫您可能已指定的任何其他事件處理函式。HANDLEVENTS 會將系統事件傳遞給您的函式(如果佇列中有事件),或者將“空事件”傳遞給您的函式(如果佇列中沒有事件)。

您的系統事件處理函式返回後,HANDLEEVENTS 會繼續處理同一個事件,除非它是空事件。根據事件的型別,HANDLEEVENTS 可能會執行一些“自動”響應,或者它可能會呼叫另一個事件處理函式。如果您不希望 HANDLEEVENTS 在您的系統事件處理函式退出後繼續處理該事件,那麼您需要“欺騙”FB,讓它認為該事件是空事件。您可以在您的系統事件處理函式中,在處理完事件後執行以下類似的行

theEvent&.evtNum% = _nullEvt

其中 theEvent& 是指向事件記錄的指標。

為了向用戶提供對操作的快速響應,並與其他程序共享執行時間,您的程式應儘可能頻繁地呼叫 HANDLEEVENTS。大多數設計良好的程式都包含一個“主事件迴圈”,該迴圈在程式執行期間反覆呼叫 HANDLEEVENTS,允許 HANDLEEVENTS 在事件發生時呼叫各種事件處理函式。

ON DIALOG; MENU; MOUSE; TEKEY

華夏公益教科書