转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
用Delphi为窗体的系统菜单中添加选项         ★★★★

用Delphi为窗体的系统菜单中添加选项

作者:闵涛 文章来源:闵涛的学习笔记 点击数:983 更新时间:2009/4/23 18:25:31
  通常在应用程序中,如果单击标题栏的左侧图标,就会弹出一个窗体的系统菜单,在其中可以完成最小化、最大化和关闭等操作。本实例将演示如何在窗体的系统菜单中添加自己的选项。

  在窗体中添加一个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 程序运行结果
  本实例演示的是如何向窗体的系统菜单中添加选项。取得系统选项的句柄后,不但可以添加选项,还可以修改选项,这样读者就可以在自己编写的程序中更加充分地控制窗体的系统菜单。


[操作系统]死马还当活马医:6种方法挽救Windows系统  [办公软件]如何实现Office工具栏、菜单以及菜单命令重命名
[办公软件]解决PowerPoint课件中的菜单问题  [办公软件]如何将Office菜单设置、工具设置、宏设置等应用到…
[操作系统]操作系统的分类  [网络安全]如何让您的系统更加安全之十条建议
[网络安全]系统安全之分析网络入侵检测系统安全  [网络安全]Windows操作系统系列之安全防范之预防病毒的八个忠…
[Web开发]net在线考试系统如何控制考试时间  [Web开发]Vista系统IIS7设置全攻略
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台