【PB】pb菜單詳解和MDI

來源:互聯網
上載者:User

菜單條-MenuBar、功能表項目-MenuItem、串聯功能表(子功能表)-SubMenu

功能表項目(MenuItem)是菜單中最基本的元素,只要有文字內容的就是功能表項目。菜單條(MenuBar)是菜單中層級最高的功能表項目的總稱,也叫做功能表標題。菜單條的內容總是顯示出來,對菜單的操作也是首先從這裡開始的。在菜單條上移動滑鼠或者點擊其中的項目可以顯示對應的內容,稱為下拉式功能表,包括很多的功能表項目,它們大多數都執行相應的功能,少數還可以包含更細緻的內容,稱為串聯功能表(SubMenu),也叫做子功能表。這樣的功能表項目右面都有小箭頭指示

在設定菜單時,在設計視窗中的每一步修改都能反映到預覽視窗中,隨時可以檢查層級關係是否正確。如果發生順序或者層級錯誤,可以用滑鼠選中錯誤功能表項目(不要使功能表項目處於編輯狀態),然後直接拖動到正確的位置即可。在功能表項目中輸入內容時,有兩個字元具有特殊的含義,“-”可以建立功能表項目之間的分隔線,“...”表示該功能表項目可以彈出一個屬性交談視窗。另外,彈出式菜單彈出的是某個下拉式功能表或者某個串聯功能表,也可以單獨設計彈出式菜單,和下拉式菜單的設計沒有什麼區別。

【屬性】

▲Name
在該屬性框中為功能表項目命名。預設菜單的名稱都是m_加上功能表項目的內容。在指令碼中引用功能表項目時要從最開始一級加圓點符號逐級引用,比如要引用“檔案”下的功能表項目“開啟”,可以使用“m_檔案. m_開啟”來引用。

▲Text
該屬性就是在建立菜單時每個功能表項目中輸入的內容。運行時的整個菜單內容就是該屬性的內容。

▲MicroHelp
如果菜單掛接在MDIHelp!類型的視窗中,運行狀態下,當滑鼠指標指向功能表項目或者工具條中的小表徵圖時,該文字可以顯示在MDI視窗底部的狀態條中

▲ToolbarItemText
可以定義顯示在工具條小表徵圖中的文字,以對小表徵圖的功能有簡短的描述。當滑鼠指標指向工具條中的小表徵圖時,顯示此文字

▲ToolbarItemName
該屬性用來定義工具條小表徵圖上顯示的圖形。可以使用PowerBuilder提供的很多小表徵圖,也可以自訂。

▲ToolbarItemDownName
菜單選中時,即checked時,按下的表徵圖,一般與ToolBarItemName相同

▲ToolbarItemVisible
顯示或隱藏工具條表徵圖

▲ToolbarItemDown
菜單選中,即checked,表徵圖按下

▲ToolbarItemSpace
指定該表徵圖和前面表徵圖之間的間距。一般都是0,只有不同組的表徵圖之間才有必要設定間距。

▲ToolbarItemBarIndex
指定表徵圖顯示在哪一行的工具條上。該屬性相同的表徵圖顯示在同一行,只要相同就可以,並不要求該屬性取值為連續的數字。

▲ToolbarItemOrder
指定表徵圖顯示順序,此值越大越靠後,預設0時按照菜單中的順序顯示。
如在菜單file下後exit,需要把exit表徵圖放在最後,則其他都為0,exit設為1就可以了

▲ShortCutKey
該屬性和ShortCut Alt,ShortCut Control和ShortCut ShIft三個選項配合使用來定義功能表項目的快速鍵。

其他的屬性使用得比較少。

〖菜單編程〗
●為“退出”功能表項目編寫指令碼
在菜單中指代詞parentwindow是指菜單掛接的視窗,比直接使用視窗的名稱有更好的通用性。所以在“退出”功能表項目的Clicked事件中可以這樣編寫指令碼:close(parentwindow)

●選中某個功能表項目
可以使用Checked標記來表示某個功能表項目選中,可以在功能表項目的Clicked事件中編寫如下指令碼來選中功能表項目:
if this.checked then
   this.checked = false
else
   this.checked = true
end if
也可以使用函數Check和UnCheck來代替屬性修改。上面的指令碼可以改成:
if this.checked then
   this.uncheck()
else
   this.check()
end if
當功能表項目選中時,功能表項目的左側有一個“√”符號,並且對應的小表徵圖為按下狀態。

●隱藏某個功能表項目
要隱含某個功能表項目,可以將該功能表項目的Visible屬性修改為False,如果該功能表項目位於菜單條的最進階別上,則可以將整個下拉式功能表隱含。例如,某視窗上掛接了菜單m_main,在視窗的開啟事件中將菜單中的“檔案”整個下拉式功能表隱含,可以在該視窗的0pen事件中編寫如下指令碼:
    m_main.m_檔案.Visible = False
    但是,將功能表項目隱含並不能將其對應的在工具條中的小表徵圖隱含,並且小表徵圖的功能照樣能夠正常執行。要將小表徵圖隱含,應該設定ToolBarItemVisible屬性為False。例如,隱含功能表項目“開啟”對應的小表徵圖,在視窗的開啟事件中可以使用下面的語句:
    m_main.m_檔案.m_開啟.ToolBarItemVisible = False

●使某個功能表項目失效
將功能表項目的Enabled屬性置為False,即可使功能表項目顯示變灰而不能使用,同時對應的小表徵圖也變灰。如果足下拉式功能表則整個下拉式功能表不能使用,但其下拉項目對應的小表徵圖可以正常使用。如果是串聯功能表則串聯功能表不能被開啟,但是串聯功能表下的各個功能表項目對應的小表徵圖可以正常使用。下面是在視窗開啟事件中將菜單m_main的“檔案”下的m_open修改為無效的指令碼:

    m_main.m_檔案.m_open.Enabled = False

●調整工具條的位置
如果工具條的ToolBarUserControl屬性(在application中)設定為True,則使用者可以在工具條上按滑鼠右鍵快顯功能表。使用該快顯功能表可以調整工具條的顯示位置。用直接拖拉的方式也可以改變工具條的顯示位置。當工具條的位置發生變化時將觸發視窗的ToolBarMoved事件,在該事件中可以編寫指令碼來判斷工具條的移動情況。當該事件觸發時,PB自動修改Message中的參數WordParm和LongParm使用這兩個屬性可以判斷工具條的移動情況,屬性含義如下:
Message.LongParm屬性的含義:
0:移動到左側;
1:移動到頂部;
2:移動到右側:
3:移動到底測;
4:變為浮動顯示。
Message.WordParm屬性的含義:
O:FrameBar在移動;
1:SheetBar在移動。
關於工具條位置的編程一般是在視窗開啟和關閉時應用。關閉對應該儲存使用者關於工具條的設定,以便在視窗開啟時將工具條恢複到上次關閉時的狀態。這些資訊可以儲存在應用的ini檔案中,具體含義只要開發人員清楚即可,開啟時按同樣的含義來設定工具條的位置。如在Frame的close()事件中編程(ToolbarAlignment為視窗的屬性):
choose case this.ToolbarAlignment
case AlignAtTop!
   SetProfileString("C:\toolbar.ini","setup","align","1")
case AlignAtLeft!
   SetProfileString("C:\toolbar.ini","setup","align","0")
case AlignAtRight!
   SetProfileString("C:\toolbar.ini","setup","align","2")
case AlignAtBottom!
   SetProfileString("C:\toolbar.ini","setup","align","3")
case Floating!
   SetProfileString("C:\toolbar.ini","setup","align","4")
end choose
同樣,在Frame的開啟事件中可以根據ini檔案的設定來決定工具條的顯示。例如,下面的指令碼在開啟事件中讀取ini檔案中的配置來決定工具條的顯示位置:
string ls_align
ls_align = ProfileString("c:\toolbar.ini","setup","align","1")
choose case ls_align
case '0'
   this.ToolbarAlignment = AlignAtLeft!
case '1'
   this.ToolbarAlignment = AlignAtTop!
case '2'
   this.ToolbarAlignment = AlignAtRight!
case '3'
   this.ToolbarAlignment = AlignAtBottom!
case '4'
   this.ToolbarAlignment = Floating!
end choose
當然,也可以用同樣的方法儲存更多的設定,例如是否隱含工具條,是否顯示文字SheetBar的顯示情況等等。

●修改工具條上右鍵快顯功能表中的內容
應用對象的屬性ToolBarUserControl控制著使用者是否可以在工具條上使用右鍵快顯功能表,該屬性預設是True,預設為英文格式,可以修改ToolBarFrameTitle、ToolabarSheetTitle、ToolbarPopMenuText等屬性換成中文字。
ToolBarFrameTitle:架構(也可理解為主菜單工具條)Frambar中文
ToolabarSheetTitle:開啟sheet後的Sheetbar中文
也可以在Frame的開啟事件中編寫指令碼實現:
GetApplication().ToolbarPopMenuText = "左側、頂部、右側、底部、浮動、文字、提示資訊"
文字以逗號分隔,如果多了則被自動忽略。只能修改該快顯功能表中的文字,但不能修改對應各項的功能。其中函數GetApplication可以擷取當前應用的控制代碼(handle)。也可以在Frame的開啟事件中使用下面的語句來限制使用者不準使用工具條上的快顯功能表:
    GetApplication().ToolbarUserControl = false

●動態設定MicroHelp
使用函數SetMicroHelp可以動態改變功能表項目的MicroHelp內容。該函數的文法是:
windowname.SetMicroHelp(string)
其中windowname是菜單所掛接的視窗名稱,string是要設定的MicroHelp內容。函數正確執行返回1,否則返回-1,如果有參數為null則返回null。一般在功能表項目的Selected事件中使用該函數。
如果在定製Frame視窗的控制項中修改MicroHelp,還得在相關事件中取消MicroHelp。一般在控制項的GetFocus事件中顯示MicroHelp提供關於該控制項的解釋資訊,在LoseFocus事件中將MicroHelp修改為“Ready”。
一個儲存MicroHelp的好方法是使用控制項的Tag屬性,在視窗畫板中給每個要顯示MicroHelp的控制項的Tag屬性都指定適當的內容,然後在需要改變MicroHelp的指令碼中將Tag屬性作為函數SetMicroHelp的參數即可。

●使用右鍵快顯功能表
在RButtonDown事件下使用函數PopMenu來顯示彈出試菜單。該函數的文法是:
menuname.PopMenu(xlocation,ylocation)
其中menuname是要彈出的菜單的名稱,可以是某個下拉式功能表中的某個下拉項目或者某個串聯功能表。xlocation和ylocation是菜單顯示的位置,該座標的取值是相對於視窗而言的。通常使用函數PointerX和PointerY來擷取該座標,以便在滑鼠點擊的位置快顯功能表。這兩個函數的文法格式相同,PointerX的格式是:
objectname.PointerX()
其中objectname是控制項名稱,X是滑鼠點擊位置和objectname左邊框的距離,預設為指令碼所在的控制項。在和函數PopMenu搭配使用時應該擷取相對於視窗而言的座標位置。雖然每個控制項的RbuttonDown事件中都有xpos和ypos參數可用,但這都是相對於控制項而言的。
也就是說除了要彈出的菜單在視窗上,一般很少用xpos和ypos。一般為menuname.PopMenu(parent.pointerX(),parent.pointerY())。
*Menu4 NewMenu
NewMenu = CREATE Menu4
NewMenu.m_language.PopMenu(PointerX(), PointerY())
NewMenu.m_language.PopMenu(w_frame.PointerX(), w_frame.PointerY())

●改變視窗中的菜單
函數ChangeMenu可以動態改變視窗的菜單。它的文法格式是:
windowname.ChangeMenu(menuname{,position})
其中,windowname是要改變菜單的視窗的名稱;menuname是要掛接到視窗上的菜單的名稱;position是選擇性參數,僅用於MDI Frame視窗中,用來指示給當前的視窗列表中追加的功能表標題的位置。預設值為1,這時所有開啟的Sheet出現在第一個功能表標題的下拉式菜單的底部。


隱藏和顯示工具列
windowname.ToolbarVisible = True/False
隱藏和顯示文字
GetApplication().ToolbarText = True/False
隱藏和顯示提示資訊
GetApplication().ToolbarTips = True/False

〖MDI〗-Multiple Document Interface

*菜單是MDI應用中必不可少的,不僅Frame必須有一個菜單,就連在客戶區開啟的各個Sheet也應該有菜單,如果沒有就會自動繼承前面Sheet的菜單。有兩種通常的方式來為MDI的Sheet表提供菜單:在架構和每個Sheet之間共用一個菜單,或者分別為每個Sheet提供一個單獨的菜單,當然也可以這兩種方式混合使用。當開啟多個有菜單的Sheet時,只有當前Sheet的菜單顯示在Frame頂部,其他Sheet的工具條可以顯示,而它們的菜單不顯示。菜單提供各個Sheet間切換的功能,以及在Sheet中能夠完成的絕大部分功能。每個菜單可以有自己對應的工具條,也可以沒有,還可以對應多行工具條,這些都是在菜單畫板中設計的。

*客戶區是MDI視窗中使用者的工作區間,Sheet都是在該地區顯示的,它們的顯示範圍不會超過該地區。如果在MDI架構中放置了控制項,這樣的MDI視窗稱為定製Frame,否則就稱為標準Frame。客戶區實際上是一個非常特殊的控體該控制項叫做mdi_1,只有當運行時才可用。當使用定製Frame時mdi_1控制項不能正確顯示在可視地區,這時開啟Sheet也不會正常顯示,應該在Frame的Resize事件中編寫指令碼,對mdi_1重新進行定位。假設在Frame的上部放置了命令按鍵cb_1,在命令按鍵的下面和狀態條之間顯示mdi_1。指令碼如下:
uint li_x,li_y,li_width,li_height
li_x = WorkSpaceX()
li_y = cb_1.y + cb_1.Height
li_width = WorkSpaceWidth()
li_height = WorkSpaceHeight() - li_y - mdi_1.MicroHelpHeight
mdi_1.Move(li_x,li_y)
mdi_1.Resize(li_width,li_height)
上述指令碼中的函數WorkSpaceX、WorkSpaceWidth、WorkSpaceHeight和另外的函數WorkSpaceY用來擷取關於工作區域的參數,使用方法都比較簡單,只要注意這些函數都不包括工具條所佔用的地區。通過上述指令碼,mdi_1控制項就可以正確顯示在Frame的可視範圍內,再開啟Sheet也不會出現什麼異常了。
    當使用標準Frame時,系統會自動維護客戶區的位置和大小。

*在MDI應用系統中,Frame視窗必須包含一個菜單,該菜單可以有工具條也可以沒有。在Frame菜單中可以編寫開啟Sheet的指令碼。Sheet並非特殊類型的視窗,只是在Frame中開啟就稱為了Sheet,實際上就是非MDI類型的視窗。雖然Sheet就是普通的視窗,但不能使用Open函數開啟,要使用OpenSheet或者OpenSheetWithParm函數來開啟。Sheet可以有菜單也可以沒有菜單。當開啟帶有菜單的Sheet時,Sheet的菜單自動取代Frame的菜單;當開啟沒有菜單的Sheet時,該Sheet自動使用Frame的菜單(當然,可能是Frame本身內建的菜單,也有可能是其他Sheet的菜單)。這時就出現了問題,當開啟帶菜單的Sheet時,Sheet的菜單覆蓋了Frame的菜單,Frame菜單中的功能如何執行?好的解決方案就是使用工具條。Sheet的菜單替換了Frame的菜單後,Frame的工具條始終可以顯示,使用工具條照樣可以正常執行Frame菜單的功能。所以,在建立Frame的菜單時,好的習慣就是要同時建立菜單的工具條。但是,使用這種解決方案時,工具條中小表徵圖功能的易記易用性就非常重要了,開發人員應該儘可能提供更多關於小表徵圖的資訊,如MicroHelp,Tips和
ToolBarItemText等。另外一種解決方案可能有一定的適用情況,就是讓所有的Sheet都共用Frame的菜單,當所有的Sheet都進行同一類型或相似類型的操作時,比如像微軟的Word似的,Sheet都進行檔案編輯的情況下,這種方法就比較實用,菜單的維護就比較簡單。

【函數】

★opensheet和opensheetwithparm
在Frame菜單中可以編寫開啟sheet的指令碼。sheet並非特殊類型的視窗,只是在Frame中開啟就稱為了sheet,實際上就是非MDI類型的視窗,雖然Sheet就是普通的視窗,但不能使用open函數開啟,要使用OpenSheet或者OpenSheetWithParm函數來開啟。其中OpenSheet函數不給Sheet傳遞參數,而函數OpenSheetWithParm可以在開啟Sheet的同時傳遞參數。OpenSheet的文法格式是;
OpenSheet(Sheetrefvar{,windowtype},mdiframe,{,position{,arrangeopen}})
其中,Sheetrefvar是要開啟的Sheet的名稱(注意,不能是MDl類型的視窗);mdiframe是Frame的名稱,表示要在這個Frame的客戶區開啟名稱為sheetrefvar的Sheet;這兩個參數指明了在哪個Frame中開啟哪個Sheet,都是必須的。變數windowtype為string類型,用來表示要開啟的視窗的名稱,如果指明該參數,則sheetrefvar的類型必須是能夠接受window類型的賦值,這時的函數表示要開啟windowtype名稱的視窗,並將其執行個體儲存在變數sheetrefvar中,可以使用該變數引用這個sheet。position是一個integer類型的參數,表示在菜單條中的位置,新開啟的sheet名稱作為一個功能表項目添加在該位置的下拉式功能表中。菜單條最左面的項目位置為1,依次增加,當該參數大於菜單條中的項目數時則將sheet名稱添加到右側倒數第二個菜單的下面。如果開啟的sheet資料超過9個,多餘的則以串聯功能表的形式顯示在該菜單的more
windows下。參數arrangeopen是指開啟sheet後在客戶區中的布局方式,是arrangeopen枚舉類型的值,有3個可以使用的取值。
Cascaded!:將開啟的sheet層疊起來,使所有的標題列都可見。這是預設方式。
Layered!:將開啟的sheet完全地覆蓋在客戶區,後開啟的覆蓋前面的sheet。
Original!:用視窗的原始大小開啟,開啟後並以Cascaded!方式安排布局。
eg:在名稱為MDI_my的Frame中開啟視窗名稱為w_edit的視窗
opensheet(w_edit,MDI_my)
opensheet(w_edit,MDI_my,3,Cascaded!)
window lw_w
opensheet(lw_w,"w_edit",MDI_my,3,Cascaded!)
和opensheet函數類似,opensheetwithparm函數中的很多參數含義完全相同。其文法格式如下:
OpenSheetWithParm(Sheetrefvar,parameter{,windowtype},mdiframe{,position{,arrangeopen}})
其中parameter是要傳遞的參數,可以是String,Number或者PowerObject類型,該函數用法及參數含義和opensheet完全相同。

★GetActiveSheet
使用函數GetActiveSheet可以擷取當前的Sheet,該函數的文法如下:
mdiframewindow.GetActiveSheet()
其中mdiframewindow是當前Frame的名稱。該函數返回window類型數值,是當前活動的sheet。執行過程中發生錯誤則返回無效資料,如果mdiframewindow為null則返回null。該函數經常和IsVaild配合使用,來檢查函數返回的視窗是否有效。
IsValid,判斷指定對象是否有效,該函數文法為:
IsValid(objectname)
其中objectname是要進行是否有效判斷的對象。該函數返回為boolean類型的值。
GetFirstSheet()
GetNextSheet()

★ArrangeSheets
使用函數ArrangeSheets可以安排當前開啟的和最小化的Sheet的布局,該函數的文法是:
mdiframe.ArrangeSheets(arrangetype)
其中,mdiframe為Frame的名稱,arrangetype是arrangetypes枚舉類型的數值,可以取為:
Cascade!:將開啟的Sheet層疊起來,使所有的標題列都可見。
Layer!:將開啟的Sheet完全的覆蓋在客戶區。
Tile!:將開啟的Sheet以平鋪的方式從左至右排列。
TileHorizontal!:將開啟的Sheet並排放置。
Icons!:僅將最小化的Sheet沿Frame的底部放置。
該函數正確執行則返回1,否則返回-1,如果有參數為null則返回null。

★GetToolbar、GetToolbarPos和SetToolbar、SetToolbarPos
擷取工具條的資訊
可以使用屬性和函數來擷取關於工具條的資訊。
下面是應用對象關於工具條的屬性,這些屬性經常和函數GetApplication一起使用。這些屬性既可以控制工具條的顯示情況,也可以擷取關於工具條的資訊。
ToolbarFrameTitle string   浮動顯示的工具條上的標題
ToolbarSheetTitle string   浮動顯示的sheet工具條上的標題
ToolbarPopMenuText string   工具條快顯功能表中的文字
ToolbarUserControl boolean   工具條是否可以使用快顯功能表來控制
ToolbarText   boolean   工具條中的小表徵圖是否顯示文字
ToolbarTips   boolean   工具條中小表徵圖是否顯示提示資訊
函數擷取工具條資訊-GetToolbar、GetToolbarPos
window.GetToolbar(Toolbarindex,visible{,alignment{,floatingtitle}})
其中,window為Frame的名稱;Toolbarindex是想要擷取資訊的工具條的索引號,為整型數值;這兩個參數在函數執行之前就應該有明確的取值,可以是常量或相應類型的變數。其他參數必須為變數,在函數執行後儲存關於工具條的特定資訊。參數alignment為ToolbarAlignment枚舉類型的變數,用來儲存工具條的對齊,該參數為可選;參數floatingtitle為string類型的變數,用來儲存浮動工具條的標題。函數正確執行返回1,否則返回-1,如果任何參數為null則返回null。

*儲存和恢複工具條
gf_SaveToolBar(window fa_win) //儲存工具條
Int li_row,li_Offset,li_x,li_y,li_width,li_height //儲存工具條的位置資訊
Boolean lb_visible //工具條是否可見
Boolean lb_tips,lb_showtext //工具條是否有氣泡提示、是否顯示文字
ToolBarAlignment lta_align //工具條的對齊
String ls_title,ls_alignment,ls_section
If fa_win.GetToolBar(1,lb_visible,lta_align,ls_title) <> 1 Then Return –1 //擷取工具條資訊
ls_section = fa_win.ClassName()   //擷取視窗名稱
If lb_visible Then //工具條是可見的
SetProfileString("test.ini",ls_section,"visible","True") //則儲存visible屬性為“True”
Else //如果工具條是隱藏的               SetProfileString("test.ini",ls_section,"visible","False") //則儲存為“False”
End If
Choose Case lta_align //根據工具條的對齊屬性進行儲存
Case AlignAtLeft!
   ls_alignment = "left"
Case AlignAtRight!
   ls_alignment = "right"
Case AlignAtTop!
   ls_alignment = "Top"
        Case AlignAtBotTom!
   ls_alignment = "botTom"
Case Floating!
   ls_alignment = "floating"
End Choose
SetProfileString("test.ini",ls_section,"alignment",ls_alignment)   //儲存對齊屬性
fa_win.GetToolBarPos(1,li_row,li_offset)        //擷取工具條的行和位移資訊
SetProfileString("test.ini",ls_section,"row",String(li_row))
SetProfileString("test.ini",ls_section,"offset",String(li_offset))
fa_win.GetToolBarPos(1,li_x,li_y,li_width,li_height)         //擷取高、寬、起始位置資訊
SetProfileString("test.ini",ls_section,"x",String(li_x))
SetProfileString("test.ini",ls_section,"y",String(li_y))
SetProfileString("test.ini",ls_section,"width",String(li_width))/
SetProfileString("test.ini",ls_section,"height",String(li_height))
lb_showtext = GetApplication ( ).ToolbarText //工具條中的小表徵圖上是否顯示了文字
If lb_showtext Then
SetProfileString("test.ini",ls_section,"showtext","True")
Else
SetProfileString("test.ini",ls_section,"showtext","False")
End If
lb_tips = GetApplication ( ).ToolbarTips //工具條中的小表徵圖上是否顯示提示資訊
If lb_tips Then
SetProfileString("test.ini",ls_section,"tips","True")
Else
SetProfileString("test.ini",ls_section,"tips","False")
End If
Return 1

恢複工具條
Int li_row,li_offset,li_x,li_y,li_width,li_height
Boolean lb_visible
String ls_showtext,ls_tips,ls_title,ls_alignment,ls_visible,ls_section
ToolBarAlignment lta_align
//判斷是否有工具條
If fa_win.GetToolBar(1,lb_visible,lta_align,ls_title) <> 1 Then Return –1
ls_section = fa_win.ClassName() //讀取視窗的名稱
ls_visible = ProfileString("test.ini",ls_section,"visible","") //讀取工具條的visible屬性
If ls_visible <> "" Then                  //正確讀取了該屬性
ls_alignment = ProfileString("test.ini",ls_section,"alignment","Top") //讀取對齊
ls_title = ProfileString("test.ini",ls_section,"title","") //讀取工具條標題
If Upper(ls_visible) = "TRUE" Then              
   lb_visible = True
Else
   lb_visible = False
End If
Choose Case Lower(ls_alignment) //將字元型轉換成Alignment類型
   Case "left"
    lta_align = AlignAtLeft!
   Case "right"
    lta_align = AlignAtRight!
   Case "Top"
    lta_align = AlignAtTop!
   Case "botTom"
    lta_align = AlignAtBotTom!
   Case "floating"
    lta_align = Floating!
   End Choose                  fa_win.SetToolBar(1,lb_visible,lta_align,ls_title) //設定當前工具條的資訊
li_row = ProfileInt("test.ini",ls_section,"row",1)
li_offset = ProfileInt("test.ini",ls_section,"offset",0)
li_x = ProfileInt("test.ini",ls_section,"x",0)
li_y = ProfileInt("test.ini",ls_section,"y",0)
li_width = ProfileInt("test.ini",ls_section,"width",0)
li_height = ProfileInt("test.ini",ls_section,"height",0)
fa_win.SetToolBarPos(1,li_row,li_offset,False)
fa_win.SetToolBarPos(1,li_x,li_y,li_width,li_height) //設定工具條的位置
ls_showtext = ProfileString("test.ini",ls_section,"showtext","True")   //是否顯示文字
If Upper(ls_showtext) = "TRUE" Then
   GetApplication ( ).ToolbarText = True
Else
   GetApplication ( ).ToolbarText = False
End If
ls_tips = ProfileString("test.ini",ls_section,"tips","True") //是否顯示提示資訊
If Upper(ls_tips) = "TRUE" Then
   GetApplication ( ).ToolbarTips = True
Else
   GetApplication ( ).ToolbarTips = False
End If
End If
Return 1

*遍曆功能表項目
Integer li_MenuTitle //儲存功能表標題
Integer li_totalTitles //儲存總標題數目
Integer li_MenuItem //儲存功能表項目
Integer li_totalItems //儲存總功能表項目數
li_totalTitles = UpperBound(This.MenuID.Item)
For li_MenuTitle = 1 To li_totalTitles
li_totalItems = UpperBound(This.MenuID.Item[li_MenuTitle].item)
For li_MenuItem = 1 To li_totalItems
   MessageBox(String(li_MenuTitle) + "/" + String(li_MenuItem),&
This.MenuID.Item[li_MenuTitle].Item[li_MenuItem].Text)
Next
Next
上面的指令碼沒有什麼實際意義,但說明了一個非常有用的技術,也就是如何遍曆菜單中的所有非串聯功能表項。

來自:

http://hi.baidu.com/cwding/blog/item/0c770d7ad6440de82f73b301.html 
  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.