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

Delphi為窗體的系統菜單中添加選項

編輯:Delphi

通常在應用程序中,如果單擊標題欄的左側圖標,就會彈出一個窗體的系統菜單,在其中可以完成最小化、最大化和關閉等操作。本實例將演示如何在窗體的系統菜單中添加自己的選項。

在窗體中添加一個TMainMenu組件,其中TMainMenu組件中的選項將要被添加到窗體的系統菜單中。添加組件後的窗體如圖1所示。

圖1 添加組件後的窗體

在TMainMenu組件生成的菜單中添加一個File菜單,在這個菜單下面添加一個Exit選項。

在本程序開始運行時就會把TMainMenu組件生成的菜單添加到窗體的系統菜單中,響應代碼如下:

procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  AppendMenu (GetSystemMenu (Handle, FALSE), MF_SEPARATOR, 0, '');
  with MainMenu1 do
  begin
   for I := 0 to Items.Count - 1 do
    AppendMenu(GetSystemMenu(self.Handle,FALSE),mf_Popup,
    Items[I].Handle,PAnsiChar(Items[I].Caption));
  end;
end;

程序首先通過GetSystemMenu (Handle, FALSE)來取得窗體的系統菜單,並且調用AppendMenu函數添加一個MF_SEPARATOR類型的選項,也就是菜單分隔條。然後通過一個循環,調用AppendMenu函數把TMainMenu組件生成的菜單逐個添加到窗體的系統菜單中。

現在,雖然選項已經添加到窗體的系統菜單中,但是選項還不能夠響應用戶的操作。為了能夠正常響應用戶的操作,需要攔截WM_SysCommand消息,所以要添加攔截消息的過程——procedure WMSysCommand(var Msg:TWMSysCommand);message WM_SysCommand,它的響應代碼如下:

procedure TForm1.WMSysCommand (var Msg: TWMSysCommand);
var
  Item: TMenuItem;
begin
  Item := MainMenu1.FindItem(Msg.CmdType, fkCommand);
  if Item <> nil then
   Item.Click;
   inherited;
end;

這樣,新添加的選項就可以正常工作了。

單擊窗體系統菜單File中的Exit選項,就會結束程序的運行。

程序代碼如下:

unit Unit1;
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
Menus, StdCtrls;
type
  TForm1 = class(TForm)
  MainMenu1: TMainMenu;
  File1: TMenuItem;
  Exit1: TMenuItem;
  procedure Exit1Click(Sender: TObject);
  procedure FormCreate(Sender: TObject);
private
  { Private declarations }
public
  procedure WMSysCommand(var Msg:TWMSysCommand);message WM_SysCommand;
end;
var
  Form1: TForm1;
  implementation
  {$R *.DFM}
procedure TForm1.WMSysCommand (var Msg: TWMSysCommand);
var
  Item: TMenuItem;
begin
  Item := MainMenu1.FindItem (Msg.CmdType, fkCommand);
  if Item <> nil then
   Item.Click;
   inherited;
  end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
  Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  AppendMenu (GetSystemMenu (Handle, FALSE), MF_SEPARATOR, 0, '');
  with MainMenu1 do
  begin
   for I := 0 to Items.Count - 1 do
    AppendMenu(GetSystemMenu(self.Handle,FALSE),mf_Popup,
    Items[I].Handle,PAnsiChar(Items[I].Caption));
   end;
  end;
end.

保存文件,然後按F9鍵運行程序,程序運行結果如圖2所示。

圖2 程序運行結果

本實例演示的是如何向窗體的系統菜單中添加選項。取得系統選項的句柄後,不但可以添加選項,還可以修改選項,這樣讀者就可以在自己編寫的程序中更加充分地控制窗體的系統菜單。

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