带历史信息的菜单

实例说明

在有些软件中,菜单栏中可以记录已经打开过的文件信息,使用户操作简单、快捷。当用户要打开已打开过的文件时,不需要重复查找,只需选择菜单中打开过的文件,即可实现打开该文件的操作。运行本例,效果如图1所示。

图1  带历史信息的菜单

思路与技术

本例使用的是动态插入菜单的技术,利用菜单的动态插入技术,可以完成在菜单中记录打开过文档的功能,即当打开一个文件后,将这个文件的完整路径插入到菜单的相应位置。主要用到了TMainMenu组件的Insert()方法。在菜单的OnChange事件中,为菜单项指定相应的事件。动态插入菜单项的代码如下:

//------------------------------------------------------------------------------

procedure
TForm1.mni_OpenClick(Sender: TObject);
var
  menuItem:TMenuItem;
begin
  menuItem:=TMenuItem.Create(nil);
  With
TOpenDialog.Create(nil) do
  begin
    if Execute then
    begin
      menuItem.Caption:=FileName;
      MainMenu1.Items.Items[0].Items[2].Insert(0,menuItem);
    end;
  end;
end;

 

0
插入配置打开文件的路径菜单
1 单击这个菜单 返回这个菜单的路径
2
增加1个配置信息保存
3
读取配置信息
 

注意:动态插入菜单项,首先要创建TMenuItem菜单对象。

开发步骤

(1)新建一个工程,该工程会自动创建一个主窗体,默认命名为Form1。

(2)在窗体上添加TMainMenu组件和TOpenDialog组件。

(3)程序完整代码如下:

 
unit Unit1;

interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;

    mni_File: TMenuItem;

    mni_Open: TMenuItem;

    N3: TMenuItem;

    mni_Close: TMenuItem;

    N5: TMenuItem;

    Button1: TButton;

    mni_Recent: TMenuItem;

    procedure mni_OpenClick(Sender: TObject);

    procedure mni_CloseClick(Sender: TObject);

    procedure MainMenu1Change(Sender: TObject; Source: TMenuItem;

      Rebuild: Boolean);

    procedure Button1Click(Sender: TObject);
  private

    { Private declarations }
  public

    { Public declarations }
    procedure MenuItemExecute(Sender: TObject);

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//------------------------------------------------------------------------------
procedure TForm1.mni_OpenClick(Sender: TObject);
var
  menuItem:TMenuItem;
begin
  menuItem:=TMenuItem.Create(nil);

  With TOpenDialog.Create(nildo
  begin
    if Execute then

    begin

      menuItem.Caption:=FileName;

      MainMenu1.Items.Items[0].Items[2].Insert(0,menuItem);

    end;
  end;
end;
//------------------------------------------------------------------------------
procedure TForm1.mni_CloseClick(Sender: TObject);
begin
  Close;
end;
//------------------------------------------------------------------------------
procedure TForm1.MainMenu1Change(Sender: TObject; Source: TMenuItem;
  Rebuild: Boolean);
var
  i:integer;
begin

  for i:=2 to  mainmenu1.Items.Items[0].Count-3 do
  begin
    MainMenu1.Items.Items[0].Items[i].OnClick:=button1.OnClick;
  end;
end;
//------------------------------------------------------------------------------
//返回当前单击的标题
procedure TForm1.MenuItemExecute(Sender: TObject);
begin 
    ShowMessage(TMenuItem(Sender).Caption);
end;
//------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
    MenuItemExecute(Sender);
end;
//------------------------------------------------------------------------------

end
 
 
 

附件列表

最新文章

  1. Linux内存管理原理
  2. cvCreateImage函数说明(转载)
  3. 淘宝API Nodejs的实现
  4. MySQL 5.7.9的多源复制
  5. Wininet笔记一
  6. 三星S4使用体验(Markdown版)
  7. javascrip中array使用
  8. 第三篇——第二部分——第五文 配置SQL Server镜像——域环境SQL Server镜像日常维护
  9. img的问题
  10. [编织消息框架][netty源码分析]10 ByteBuf 与 ByteBuffer
  11. 8.1 使用Python操作SQLite数据库
  12. MapReduce实现PageRank算法(稀疏图法)
  13. ML(5)——神经网络3(随机初始化与梯度检验)
  14. CentOS7安装配置PostgreSQL9.6
  15. Linux运维之批量下载指定网站的100个图片文件,并找出大于200KB的文件
  16. Emacs文件命令
  17. 三点估算和PERT技术
  18. 附加题找bug
  19. cdoj203-Islands 【并查集】
  20. Spring Boot+MyBabits静态连接多个数据库

热门文章

  1. [HTML Q&A][转]使pre的内容自动换行
  2. 为Fitnesse-20140630定制RestFixture代码
  3. C++实现网格水印之调试笔记(三)—— 初有结果
  4. 我的EC-final总结
  5. Spring 中context.start作用
  6. php上传文件时出现错误:failed to open stream: Permission denied
  7. leetcode@ [336] Palindrome Pairs (HashMap)
  8. Unity3D-美术相关
  9. URL的格式scheme
  10. Web开发人员需知的Web缓存知识