跳轉到內容

Futurebasic/語言/參考/滑鼠事件

來自華夏公益教科書,開放的書籍,開放的世界

MOUSE <event>

[編輯 | 編輯原始碼]

clickType = MOUSE(0)
locationInfo = MOUSE(locationType)

修訂版

[編輯 | 編輯原始碼]

2002 年 2 月(版本 6)

如果您使用 ON MOUSE 語句指定了滑鼠事件處理例程,則 MOUSE <event> 函式會返回有關滑鼠點選事件的資訊。您的滑鼠事件處理例程應在每次呼叫例程時檢查 MOUSE(0) 函式,並可能檢查 MOUSE(locationType) 函式。

MOUSE <event> 函式不會報告在活動控制元件(如按鈕或捲軸)內部、編輯欄位或圖片欄位中或活動視窗內容區域外的任何地方發生的滑鼠點選。此類滑鼠點選由其他例程處理,例如您的對話方塊事件處理例程(參見 <a href="dialog%20function.html">DIALOG</a> 函式)或您的選單事件處理例程(參見 <a href="menu%20function.html">MENU</a> 函式)。

MOUSE(0) 函式 MOUSE(0) 函式指示是否發生了單擊、雙擊或三擊。它通常會返回以下值之一

圖片在此處

在極少數情況下,使用者可能在您的程式檢測到點選之前,既點選了滑鼠又釋放了滑鼠。例如,如果您的程式在連續呼叫 HANDLEEVENTS 之間執行很長時間,則可能發生這種情況。在這種情況下,MOUSE(0) 可能會返回以下值之一

圖片在此處

如果您只想檢測點選,並且不關心使用者是否在呼叫您的滑鼠事件處理例程之前釋放了滑鼠按鈕,那麼您的例程只需檢查 ABS(MOUSE(0)),它將始終返回 1、2 或 3。

MOUSE(locationType) 函式 要檢測滑鼠指標在點選時的位置,請在您的滑鼠事件處理例程中呼叫 MOUSE(_lastMHorz)MOUSE(_lastMVert) 函式。MOUSE(_lastMHorz)MOUSE(_lastMVert) 返回的值通常與 MOUSE(_horz)MOUSE(_vert) 返回的值相同(參見 <a href="mouse%20position.html">MOUSE <position></a> 函式),但它們可能不同,尤其是在滑鼠移動很快的情況下。

如果 MOUSE(0) 返回一個正值(表示滑鼠在呼叫您的滑鼠事件處理例程之前被點選並釋放),那麼您可能還對 MOUSE(_releaseHorz)ÊÊ和 MOUSE(_releaseVert) 返回的值感興趣。這些值告訴您滑鼠指標在釋放滑鼠按鈕時的位置。如果 MOUSE(0) 返回負值,則 MOUSE(_releaseHorz)MOUSE(releaseVert) 無意義。

MOUSE 視窗(外觀管理器) 一個新的選擇器幫助您的程式確定滑鼠的位置

wndNum = MOUSE(_mouseWindow)

...將返回滑鼠所在的視窗的 FB 視窗引用號。使用此功能時,視窗不需要處於活動狀態。

點選排序 FB 只要滑鼠按鈕被按下,就會盡快報告滑鼠點選事件。如果使用者執行雙擊,FB 會先將其解釋為單擊事件,然後(在第二次點擊發生時)解釋為雙擊事件。這兩個“事件”都將報告給您的滑鼠事件處理例程。類似地,如果使用者執行三擊,FB 會首先報告單擊事件,然後報告雙擊事件,最後報告三擊事件。

編寫滑鼠事件處理例程時,您應該考慮到這一點。示例程式“DoubleClick.BAS”處理單擊和雙擊;與大多數設計良好的程式一樣,它的介面設計使得單擊的效果包含在雙擊的效果中。

等待滑鼠抬起 在大多數情況下,FB 會在滑鼠按鈕仍然按下的情況下呼叫您的滑鼠事件處理例程。但在某些情況下,您的例程可能需要跟蹤滑鼠的移動,直到按鈕被釋放。您可以使用 Toolbox 函式 FN STILLDOWN 來確定使用者何時釋放滑鼠按鈕。參見示例程式“StillDown.BAS”。

示例: 圖片在此處 CD 示例:DoubleClick.BAS
圖片在此處 CD 示例:StillDown.BAS

MOUSE(_down); MOUSE <position>;ON MOUSE; ANDLEEVENTS

華夏公益教科書