跳轉到內容

Futurebasic/語言/參考/menu 語句

來自 Wikibooks,開放世界中的開放書籍

MENU 語句

[編輯 | 編輯原始碼]

建立或更改選單:MENU menuID, itemID, state [,string$]

取消突出顯示選單欄:MENU

2002年2月(第6版)

描述

使用此語句執行以下任何操作

  • 向選單欄新增新選單。
  • 啟用或停用選單。
  • 向現有選單新增新專案。
  • 啟用或停用選單項。
  • 向選單項新增或移除複選標記。
  • 更改選單項的文字。
  • 指定要附加到選單項的分層子選單
  • 取消突出顯示選單欄。

向選單欄新增新選單

  • menuID引數設定為現有選單尚未使用的數字。使用 1 到 31 之間的數字。
  • itemID引數設定為零。
  • state引數設定為_enable_disable,具體取決於您希望選單最初是啟用還是變暗(您以後可以更改此狀態)。
  • string$引數設定為希望作為新選單標題顯示的文字。

這將建立一個新的空選單(請參閱下文,瞭解如何向選單新增專案)。您為menuID選擇的數值將決定新選單在選單欄中的位置;選單會根據其menuID數字的升序從左到右自動定位。幾乎總是,您希望從 1 開始為您的選單分配連續的數字。

啟用或停用(變暗)現有選單

  • menuID引數設定為現有選單的 ID 號。
  • itemID引數設定為零。
  • 將 state 引數設定為_enable_disable
  • 不要指定string$引數(如果指定,所有選單項都將消失!)

向現有選單新增新專案

  • menuID引數設定為現有選單的 ID 號。
  • itemID引數設定為選單中任何其他專案未使用的正數。此數字決定專案在選單中的位置;專案從上到下依次編號,從 1 開始。如果您“跳過”一個專案,則會根據您使用的系統軟體版本,在該位置顯示空白或灰色分隔線。請注意,專案之間的灰色分隔線有自己的專案 ID 號碼。您可以透過在string$引數中使用元字元“-”來建立灰色分隔線。
  • state引數設定為_enable_disable_checked,具體取決於您希望專案的初始狀態是什麼(您以後可以更改此狀態)。
  • string$引數設定為希望在專案中顯示的文字。請注意,當您新增新專案時,string$中的某些特殊字元不會顯示在專案文字中,但具有其他特殊含義。請參閱下面的“元字元”表。

啟用、停用(變暗)或選中現有專案

  • menuIDitemID引數設定為現有選單中的現有專案。
  • state引數設定為_enable_disable_checked。請注意,將 state 設定為_enable_disable將刪除專案上任何現有的複選標記。

更改現有專案的文字

  • menuIDitemID引數設定為現有選單中的現有專案。
  • string$引數設定為所需的文字。請注意,當您更改現有專案的文字時,string$中的所有字元都將顯示在專案文字中,並且沒有任何字元會被解釋為“元字元”。

指定要附加到選單項的分層子選單

  • menuID引數設定為現有選單的 ID 號;這是將包含子選單的“父”選單。
  • itemID引數設定為選單中任何其他專案未使用的正數。這是將附加子選單的“父”專案。
  • state引數設定為子選單的 ID 號。這應該是一個 32 到 235 之間的數字,並且任何其他選單都沒有使用此數字。
  • string$引數設定為以這兩個字元結尾的字串:"/" + CHR$(&1B)

注意:上述過程會將子選單附加到父選單項,但它不會安裝子選單。要安裝子選單,您還需要呼叫 Toolbox 過程InsertMenu。請參閱下面的示例。

取消突出顯示選單欄

  • 執行不帶任何引數的MENU語句。每次使用者選擇選單項時,選單欄都會自動突出顯示,並且它會保持突出顯示狀態,直到您的程式取消突出顯示它。透過取消突出顯示選單欄,您的程式可以讓使用者知道與該選單項關聯的操作已完成。

元字元 當您新增新選單項時,此表中的字元在string$引數中出現時具有特殊含義。請注意,當您更改現有專案的文字時,string$中的所有字元都將顯示在專案文字中,並且沒有任何字元會被解釋為元字元。此規則的例外情況是以減號開頭的字串。減號是大多數選單定義用來繪製分隔線的標誌。如果您的專案需要包含減號,則如果在字元前放置一個空格,您仍然可以正確顯示該專案。

此處有影像

建立分層選單 您可以使用以下函式新增新的選單項並將其附加到新的分層選單。您應該將childMenuID設定為 32 到 235 之間的某個數字,該數字未被任何現有選單使用。

LOCAL FN MakeHierMenu(parentMenuID,parentMenuItem,¬     itemString$,childMenuID)

  title$ = "!"+chr$(childMenuID)+itemString$ + "/" + CHR$(&1B)
  MENU parentMenuID,parentMenuItem,,title$   CALL INSERTMENU(FN NEWMENU(childMenuID,""), -1)

END FN

呼叫FN MakeHierMenu後,您可以使用MENU語句向分層選單新增新專案(將menuID引數設定為childMenuID的值)。

Apple 選單中的專案 您應該使用APPLE MENU語句向 Apple 選單頂部新增專案。新增這些專案後,您可以使用MENU語句(將menuID引數設定為_appleMenu)來更改專案(例如,啟用或變暗它們)。

幫助選單中的專案 您可以透過獲取幫助選單的控制代碼,然後呼叫AppendMenu過程,將專案新增到幫助選單底部。您還需要找出第一個幫助專案的專案編號,以便您的選單事件處理程式使用(任何現有專案都由幫助管理器處理)

DIM AS INT OSErr, @ firstCustomHelpItem
DIM AS HANDLE @ hmHandle

#IF carbonlib
   OSErr = FN HMGETHELPMENU(hmHandle, firstCustomHelpItem)
#ELSE
   OSErr = FN HMGETHELPMENUHANDLE(hmHandle)
   firstCustomHelpItem = FN COUNTMITEMS(hmHandle)+1
#ENDIF

CALL APPENDMENU(hmHandle, "My Help")

新增專案到幫助選單後,您可以使用MENU語句(將menuID 引數設定為_kHMHelpMenuID)來更改專案。

注意:不要使用MENU語句向幫助選單新增新專案;而是使用AppendMenu

刪除選單 呼叫DeleteMenu過程刪除由MENU語句建立的選單

CALL DELETEMENU(menuID)

這可能會導致選單欄中的其他菜單向左滑動以填補空白;但是,它們仍然保留其原始選單 ID 號碼。

刪除選單項 要刪除您建立的選單中的所有專案,請使用MENU語句,在itemID引數中指定零,並在string$引數中指定選單標題。

要刪除單個專案,請使用GetMHandle函式和DelMenuItem過程

CALL DELMENUITEM(FN GETMHANDLE(menuID), itemID)

請注意,這會重新編號刪除專案下方的任何專案,因為它們會向上移動以填補空白。選單專案編號始終從 1 開始依次編號。

示例:以下幾行程式碼建立了一個完整的選單,其中也包含一個分層選單。此示例使用了上面定義的MakeHierMenu函式。

MENU 3,0,_enable,"Game" MENU 3,1,_enable,"See High Scores/H" MENU 3,2,_enable,"Reset High Scores/R" MENU 3,3,_disable,"-" FN MakeHierMenu(3,4,"Scenarios",100) '分層選單中的專案:MENU 100,1,_checked,"Level 1" MENU 100,2,_enable,"Level 2" MENU 100,3,_enable,"Level 3" '需要兩個MENU語句才能在文字中包含'像"!"這樣的特殊字元:MENU 3,5,_enable,"dummy"   '這添加了專案 MENU 3,5,_enable,"Play Now!"   '這改變了專案

此處有影像

上下文選單 隨著外觀管理器(Appearance Manager)的出現,程式設計師開始使用上下文選單。當用戶在視窗的特定區域點選並按住控制鍵時,就會出現上下文選單。當發生此類操作時,您將收到(僅限外觀管理器執行時)DIALOG(0) 訊息 _cntxtMenuClickDIALOG(_cntxtMenuClick) 將是視窗的視窗號。此時,您可能需要透過在游標下顯示選單來做出反應。

此處有影像

以下函式構建並顯示一個選單,並且可以在響應上下文選單點選時呼叫。

LOCAL FN DoContextMenu( wNum as long )   DIM @ selectionType AS LONG   DIM @ menuID AS SHORT   DIM @ menuItem AS SHORT   DIM mHndl AS HANDLE   DIM err AS OSSTATUS   DIM helpItemString AS STR255   mHndl = FN NEWMENU(255, "X")   LONG IF mHndl     INSERTMENU( mHndl, -1 )     APPENDMENU( mHndl, ¬       "ContextualMenu click in window" + str$( wNum ) )     helpItemString = "My Custom Help"     err = FN CONTEXTUALMENUSELECT( mHndl, ¬       #gFBTheEvent.where, _nil, _kCMHelpItemNoHelp, ¬       @helpItemString, #_nil, @selectionType, ¬       @menuID, @menuItem )     /*     在此函式中,我們實際上並沒有對返回的     selectionType、menuID 或 menuItem 進行任何操作,但我們     可以在此處對其做出反應     */     DISPOSEMENU( mHndl )   END IF END FN

另請參閱

[編輯 | 編輯原始碼]

MENU;MENU 函式;ON MENU FN;APPLE MENU;DEF CHECKONEITEM

華夏公益教科書