Delphi Menu Designer(菜单设计器)之一
菜單包括大多數Windows應用程序的大部分內容。一些Windows應用程序沒有菜單,但絕大多數都有。Delphi使用Menu Designer使得創建菜單變得容易。Menu Designer有如下特點:
- 可以創建主菜單和彈出菜單(快捷菜單)。
- 為菜單項處理提供OnClick事件。
- 從模板或源文件插入菜單。
- 以模板形式保存客戶菜單。
所有Menu Designer命令通過其快捷菜單或者使用Object Inspector來操作。如下圖,顯示了Menu Designer的快捷菜單:
從大部分情況下,這些快捷菜單項通過其名字就能知道它的用途,因此不在這里做進一步討論。
下面我們通過使用菜單項來了解它們,首先為前面創建ScratchPad應用程序添加一個主菜單,然后添加一個快捷菜單。
一、創建主菜單
Menu Designer能夠很快建立任何菜單。主菜單的菜單結構由MainMenu組件構成,它由VCL類TMainMenu表示。菜單上每一項是TMenuItem組件,封裝在TMenuItem類中。不必太關心這些類如何協同工作的細節,因為Menu Designer使得建立菜單變得非常容易。TMainMenu和TMenuItem繼承關系圖如下:
?
1、 添加主菜單到窗體
首先必須添加MainMenu組件到窗體。
Note
現在大家對Delphi已有了使用經驗。從這時起,要縮略某些需要執行動作的步驟。例如,從現在開始說“把MainMenu組件放到窗體上”,而不是說“在組件面板上點擊Standard標簽,點擊MainMenu按鈕,點擊窗體放置MainMenu組件。”不要擔心,在引入新操作前,會給出大量的細節。
(1)打開上一講創建的ScratchPad工程。
(2)在窗體上放置MainMenu組件,顯示為一個圖標,如下圖,改變其Name屬性為MainMenu。注意MainMenu組件有很少幾個屬性且沒有時間,所有菜單的工作由單個菜單項完成。
(3)雙擊MainMenu圖標,顯示出Menu Designer。
Menu Designer看起來像沒有坐標網格點的空窗體,它可以任意調整大小,調整大小只是為了方便,與在運行階段菜單如何操作沒有多大關系。在此意義上,Menu Designer等待著開始建立菜單。在建立完第一個菜單后,就會發現建立菜單是容易而且可視的。
2、手工創建菜單
盡管有更容易的方式建立File菜單,但是我們要是要手工來創建第一個菜單。Menu Designer總有空菜單項作為新菜單項的占位標識符。當 開始啟動Menu Designer時,選擇空項目。
(1)改變Name屬性為FileMenu。
(2)在Object Inspector中點擊Caption屬性,輸入“&File”,按Enter鍵確定,如下圖:
Note
&符號用于建立菜單項的下劃線字符。下劃線字符是加速器,允許用戶用鍵盤+Alt快速啟動菜單項。可把&字符放在菜單項文本的任意位置。例如Exit菜單項的常用文字字符串為E&xit,故x是加速鍵。
輸入上面的File菜單后,有幾件事會發生。首先File菜單顯示在Menu Designer中,它也出現在Menu Designer背后的主菜單上,另一件是新的空白占位標志符增加在剛建立的File菜單下面(必須點擊Menu Designer中的File菜單來看占位標志符)。Object? Inspector顯示空MenuItem組件,等待輸入Caption和Name屬性。如下圖:
繼續創建菜單
(1)更改Name屬性為FileNew。
(2)更改Caption屬性為&New,按Enter鍵,在Menu Designer中又建立了空白項。
(3)重復(1)、(2)步,為Open、Save、Save As創建菜單項。效果如下圖,不要擔心做的不好,總可以回過頭來修正錯誤的。
Tip
盡可能把菜單做的標準些。保證加速鍵(下劃線字符)與其他Windows程序相同。記住,菜單項標題后面有省略號(…)的說明是對話框。
?
New Term
菜單分隔符(separator)是菜單上分隔菜單組的橫向線。
用Delphi Menu Designer增加分隔線是容易的,所做的是在Caption屬性中輸入連字符(-)。上圖中在“Save As…”菜單下面就是一個分隔符,其Name屬性為N1,Caption屬性輸入的為“-”。
Note
Menu Designer總在每個彈出菜單底端和菜單欄右邊提供空項。不能也沒必要刪除這些空白菜單,它們只用于Menu Designer,在程序運行時不顯示在菜單上。
現在,File菜單已經做好了,下面將要創建Edit菜單和Help菜單。
?
3、從模板插入菜單
這次要采取容易的方法。首先,點擊File菜單右邊的空白菜單項。然后點擊鼠標右鍵選擇快捷菜單中的“Insert From Template…”,將顯示出Insert Template對話框,如下圖:
此對話框顯示供選擇的一系列模板,可使用預定義模板或建立自己的模板。此時我們只選擇Edit Menu,點擊OK。Edit菜單立刻插入到了Menu Designer中了,如下圖,其中有其菜單項目我們沒有用,稍后我們講解刪除菜單項時再處理。
這里可以增加Help菜單,點擊Edit菜單右邊的空白占位符,在選擇“Insert From Template…”,這次我們插入“Help Menu”,立刻Help菜單出現在了Menu Designer中。
Note
可插入模板來創建彈出菜單,與創建主菜單項一樣容易。
從模板插入真的那么容易,使用Delphi之后,多半會用自己定制的模板快速而容易地建立菜單。雖然仍要更新Name屬性為有意義的名字,但比從Menu Designer中一步一步創建要容易的多。
Note
Insert From Resource 與 Insert From Template 的作用一樣,但它要求含有有效的菜單定義的資源文件(RC擴展名)。菜單資源必須使用begin/end菜單資源語法,而且不能使用花括號。例如下面的定義是無效的:
MENU_1 MENU {POPUP "FILE"{MENUITEM "OPEN", 100MENUITEM "ABOUT", 101} }而下面是合法菜單資源:
MENU_1 MENU BEGINPOPUP "FILE"BEGINMENUITEM "OPEN", 100MENUITEM "ABOUT", 101END END上面的合法菜單資源僅用于由Insert From Resource插入的菜單,而非一般菜單資源。
?
4、刪除菜單項
建立Windows應用程序的過程,很少第一次就能恰好正確。用戶需要新特色,老板提出一些改進,甚至某些特性需要刪掉,這些變動就要求經常更新應用程序的菜單。例如最初插入的Edit模板菜單非常的長,其中有些項不需要,毫無疑問就必須刪除它。
?
(1)在Edit菜單上點擊。
(2)點擊Repeat<command>項。
(3)在鍵盤上按Delete鍵或從Menu Designer快捷菜單中選擇“Delete”刪掉此項,該項消失,其余項目上移。
(4)刪除Paste Special項。
對Edit菜單還未處理完,繼續之前提一下Menu Designer中有用用的特性。就是Shift + Click和Ctrl + Click。這個技術可用于在Windows資源管理器中選擇文件。Menu Designer支持這個技術。
(1)Edit菜單應該仍在顯示著,若沒有,點擊Edit菜單來顯示Edit菜單。
(2)點擊菜單項Go to。
(3)按下Shift鍵,點擊菜單項Object,這兩個之間的所有項都已經選定。
(4)按Delete鍵一次消去所有項。
(5)點擊Help菜單,刪除中間兩項,保留Contents項和About項。
可見Shift+Click技術用于快速刪除不想要的菜單項。
?
5、插入菜單項
插入菜單項非常直接,就在要插入新項的菜單項上點擊,在鍵盤上按Insert鍵或從Menu Designer快捷菜單中選擇Insert。空菜單項即被插入了,可以像以前一樣改變Name屬性和Caption屬性。
下面在Edit菜單中插入一項。
(1)點擊Edit顯示Edit菜單。
(2)點擊Find菜單項。
(3)按鍵盤Insert鍵插入一個新菜單項,所有在新項目下面的項都向后移動。
(4)改變Name屬性為EditSelectAll,并改變Caption屬性為“Select &All”。
(5)點擊Edit菜單底端的空占位符,增加菜單分隔符。
再點擊占位符以增加新項,設置Name屬性為EditWordWrap,Caption屬性為“&Word Wrap”。
現在Edit菜單看起來如下:
?
6、移動菜單項
需要時能容易移動菜單項,可以在它們所在彈出菜單中上下移動,或者移出彈出菜單。
有兩種方式移動菜單項:
- 第一種使用Cut和Paste。
- 第二種是把它拖動到新位置然后釋放。
下面來試試,把Select All菜單項放到Undo項的下面,這是很容易的,只要移動它。
(1)點擊Edit顯示Edit菜單。
(2)點擊Select All項,拖動它知道Undo項下的分隔線亮起來。
(3)釋放鼠標,菜單項移動了。
這就是Delphi,非常容易。
?
7、批量修改屬性
有時想一次改變幾個菜單項的屬性,例如,在ScratchPad應用程序中,有幾個菜單項不準備這次完成,比如不準備支持打印,也不準備完成幫助系統。因此需要屏蔽這些菜單項。
(1)在Meun Designer中選擇Help | Contents。
(2)改變其Enabled屬性為False,該菜單項目被屏蔽。
(3)點擊File菜單。
(4)點擊Print菜單項,按住Shift鍵,點擊Print Setup菜單項,兩個項目都被選定。
(5)在Object Inspector中,改變它們的Enabled屬性為False,兩個菜單項都被屏蔽了。
重復(4)、(5)步來屏蔽Edit菜單上的Find 和 Replace菜單項。
用這種方法可以一次改變一組菜單項,只需要選擇想要改變的項,按要求改變其屬性。
?
8、增加位圖到菜單欄
可以容易地增加位圖到菜單上。在想增加位圖的菜單上點擊,然后在Object Inspector中Bitmap屬性的Value欄中雙擊,彈出Picture Editor對話框,選擇要顯示的位圖即可。位圖可以是單個圖像或者圖像列表。如果使用圖像列表,還應該設置ImageIndex屬性為要顯示的圖像列表中的索引號。
Note
在設計階段,菜單項目位圖不顯示在Menu Designer中或者窗體上,必須運行程序來看位圖菜單。
?
9、創建子菜單
創建子菜單沒有什么特別或需要技巧的地方。子菜單是一種菜單項,點擊時能擴展顯示更多的菜單選項。子菜單是以菜單項標題附近的右向箭頭標記的。可從Menu Designer快捷菜單中選Create Submenu或按住Ctrl+右箭頭建立子菜單。如下:
建立子菜單時,空菜單項安排在菜單項的右邊。可往子菜單增加菜單項,就想生成主菜單一樣。也可以插入菜單模板建立子菜單。如下:
?
10、增加快捷鍵
可通過改變Object Inspector中的ShortCut屬性來增加菜單項的快捷鍵。以前插入的Edit菜單已有內部快捷鍵。例如,Cut的快捷鍵是Ctrl+X,如果看Edit菜單,會看到Ctrl + X列在Cut項目旁邊。
在Cut菜單項上點擊,在Object Inspector的ShortCut屬性中看到其值為Ctrl + X。點擊ShortCut屬性的Value欄,會看到下拉按鈕,點擊按鈕列出所有的快捷鍵列表。要為菜單項設置快捷鍵,只要從表中選擇即可。
Select All菜單項目的標準快捷鍵是Ctrl + A,因此我們為Select All菜單項增加快捷鍵。
(1)從Menu Designer中選擇 Edit | Select All。
(2)在Object Inspector中點擊ShortCut屬性。
(3)從列表中選擇Ctrl + A,則Select All項顯示出Ctrl + A來。如下:
這時所有要做的,以后Delphi來照顧它,快捷鍵不需要編寫任何代碼。
?
11、最后的工作
下載來完成菜單。
首先,Word Wrap菜單項用于打開或關閉換行的。當該項打開時,Word Wrap菜單項前面有一個對勾;當該項關閉時,則沒有對勾。通過設置Word Wrap菜單項的Checked屬性為True來表示換行特性的打開。如下:
另一件事情就是改變從模板插入的所有菜單項目的Name屬性。默認插入時都是缺省值,需要把它們改為更為有意義的名字。
(1)點擊Edit | Undo菜單項,更改Name屬性為EditUndo。如果使用的是缺省值,則需要在Undo1基礎上,在前面加上Edit前綴,然后刪除掉結尾處的1。
(2)可使用命名慣例但要前后一致,對Cut、Copy、Paste、Find及Replace菜單項Name屬性進行修改,依次為EditCut,EditCopy,EditPaste、EditFind及EditReplace。
(3)現在更改Help菜單,將其中Contents菜單項的Name屬性改為HelpContents,About菜單項Name屬性改為HelpAbout。
這就快要完成菜單了,在檢查一遍,如果發現錯誤就做必要的修改。當一切沒有問題了,點擊關閉框關閉Menu Designer。
Note
可雙擊任何菜單項直接從Menu Designer中訪問Code Editor,雙擊菜單項是,Code Editor將顯示該項的OnClick事件,這時可以開始輸入代碼。在一下講解中,我將要編寫菜單代碼。
以上代碼均在Delphi 7中測試通過,截止到本講示例代碼下載:ScratchPad(菜單設計器之一).rar
(請繼續下一講)
轉載于:https://www.cnblogs.com/pchmonster/archive/2012/01/16/2324204.html
總結
以上是生活随笔為你收集整理的Delphi Menu Designer(菜单设计器)之一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计划任务工具 cron 的配置和说明
- 下一篇: 教授称学习习惯的常识都是错误的