您的位置:首页 > 编程语言 > Delphi

delphi 带历史信息的菜单

2014-08-01 17:55 609 查看

带历史信息的菜单

实例说明

在有些软件中,菜单栏中可以记录已经打开过的文件信息,使用户操作简单、快捷。当用户要打开已打开过的文件时,不需要重复查找,只需选择菜单中打开过的文件,即可实现打开该文件的操作。运行本例,效果如图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(nil) do
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.

来自为知笔记(Wiz)

附件列表

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: