程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi的動態菜單實現

Delphi的動態菜單實現

編輯:Delphi

 這裡所謂的動態菜單是指菜單項是變化的,它隨程序的操作變化而變化。例如在很多應用程序的“文件”菜單下列出了最近多少次曾經使用過的文件名,這是最常見的動態菜單用法,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也可以做到,但要響應TApplication的OnMessage事件。

  上述方法同樣可在C++Builder中使用,只需要改變其語法為C++。


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved