這裡所謂的動態選單是指選單項是變化的,它隨程式的操作變化而變化。例如在很多應用程式的「檔案」選單下列出了最近多少次曾經使用過的檔名,這是最常見的動態選單用法,
microsoft word
的「檔案」選單就是一例。
動態選單的使用為操作應用程式提供了極大的方便。用
delphi
編寫應用程式我們也可以實現這樣的功能,其步驟如下。
①首先要確定程式的動態選單的資料**(這個資料為乙個字串,就是我們在選單上看到的選單標題,以下稱之為「動態選單標題」),即要確定動態選單標題是來自
windows
的系統登錄檔,還是來自乙個資料庫,還是來自乙個子目錄,這要看程式的功能而定。這裡假設主窗體名為
mainform
,上面已有主選單,其動態選單的資料來源是乙個
string
型別的變數,名稱為
submenuitemsource;②
確定生成的動態選單要做什麼事情,也即要定義動態選單的
onclick()
事件,例如,動態選單標題來自乙個磁碟檔名時,那麼程式在響應
onclick()
事件時可能的操作是要開啟選中的檔案。為此我們要在選單所在的主窗體模組的單元程式的資料定義
type
後新增乙個自定義的事件過程
myclick()
,如下:
unit mainform;
┇type
┇procedure myclick(sender: tobject); //
自定義動態選單響應事件
┇ end;
然後要編寫
myclick
的具體內容,示例如下:
procedure tmainform.myclick(sender: tobject);
//動態選單
onclick
事件響應
begin
showmessage(tmenuitem(sender).caption);//
顯示選中的動態選單標題
, end;
這裡呼叫
showmessage
標準例程(在
dialogs.pas中)
顯示tmenuitem(sender).caption
,它就是選擇的選單項
caption
,類似用
tmenuitem(sender).name
則是選擇的選單項的
name
。當然在這裡
myclick()
(就是onclick
事件)僅顯示乙個選中的選單標題,但你可以改變其內容,使其完成其它你需要的工作,重要的是要知道
tmenuitem(sender).caption;③
編寫程式將動態選單標題新增到指定的選單頂下,並將其與
onclick()
事件聯絡起來。
將以下程式段新增到
mainform
的oncreate
事件過程中,可在程式啟動時完成動態選單的動態生成:
procedure tmainform.formcreate(sender: tobject);
var
addsubitem:tmenuitem;
i:integer;
begin
for i:=0 to n do //n
等於要新增的動態選單數目
,需事先定義為數值型變數
,並賦值
begin
addsubitem:= tmenuitem.create(self);
addsubitem.name := 『a』+inttostr(i);
addsubitem.caption := submenuitemsource; //
步驟①的
submenuitemsource
應先賦值
fileopenitem.add(addsubitem); //
在名稱為
fileopenitem
的選單項下新增子選單
addsubitem.onclick:=myclick; // 步驟②
的myclick(),
自定義選單要響應的事件
end
end;
上述方法的特點是在程式編寫中,不需要使用
windows
訊息則可完成動態選單設計。如果要使用
windows
訊息,delphi
也可以做到,但要響應
的onmessage
事件。上述方法同樣可在
c++builder
中使用,只需要改變其語法為
c++。
用Delphi製作動態選單
所謂動態選單是指選單項隨著程式的操作變化而變化。現在,我們用delphi來實現這一功能,具體步驟如下 1 首先,確定動態選單的資料 即要確定動態選單標題是來自windows的系統登錄檔,還是來自乙個資料庫,或者是來自乙個子目錄,主要由程式的功能而定。這裡假設主視窗名為mainform,上面已有主選單...
delphi 入門之《動態建立選單》
delphi 入門之 動態建立選單 由於在專案中用到動態建立選單的功能,簡單的記錄下,主要是根據json的配置檔案動態的建立選單,用到的有乙個json選單配置檔案,json轉換的工具類superobject,具體的 如下所示 1 json配置檔案 choj homeurl menuurl menu ...
實現動態選單的技巧
我的小軟體想實現這樣乙個功能 登陸前,我希望只有 帳戶 幫助 這兩個選單項,帳戶選單有註冊和登陸兩個彈出選單 登陸以後,其他選單才全部出來。但是這樣生成的選單並沒有命令處理機制,解決的辦法是過載oncmdmsg函式 然後根據選單id用switch方式選擇執行函式。總是感覺這種方法很別拗。當然可以一開...