delphi 带历史信息的菜单
带历史信息的菜单
实例说明
在有些软件中,菜单栏中可以记录已经打开过的文件信息,使用户操作简单、快捷。当用户要打开已打开过的文件时,不需要重复查找,只需选择菜单中打开过的文件,即可实现打开该文件的操作。运行本例,效果如图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;
插入配置打开文件的路径菜单
增加1个配置信息保存
读取配置信息
注意:动态插入菜单项,首先要创建TMenuItem菜单对象。
开发步骤
(1)新建一个工程,该工程会自动创建一个主窗体,默认命名为Form1。
(2)在窗体上添加TMainMenu组件和TOpenDialog组件。
(3)程序完整代码如下:
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;
//------------------------------------------------------------------------------
//返回当前单击的标题
begin
ShowMessage(TMenuItem(Sender).Caption);
end;
//------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
MenuItemExecute(Sender);
end;
//------------------------------------------------------------------------------
end.
附件列表
delphi 带历史信息的菜单的更多相关文章
- C#窗体练习:带历史信息的菜单
在开发图纸管理软件时,要求在菜单上记录用户最近打开的档案或图纸,以方便下次使用.单击“文件”菜单下的“打开文件”子菜单,打开需要查阅的图纸.下次运行该软件时,上次打开的文件名记录到“文件”菜单的历史菜 ...
- Bootstrap页面布局15 - BS带下拉菜单的按钮
带下拉菜单的按钮 <div class='btn-toolbar'> <div class='btn-group'> <a href='javascript:;' cla ...
- 自定义右键菜单,禁用浏览器自带的右键菜单[右键菜单实现--Demo]
许多从事Web开发的会发现有些事,我们需要禁用浏览器本事自带的右键菜单,而实现自定义的右键菜单下面我们也来实现一个自定义的右键菜单 首先来创建JSP页面 <%@ page language=&q ...
- 给Notepad++ 加带图标右键菜单
给Notepad++ 加带图标右键菜单 方式一: 拷贝以下代码建立一个reg文件,替换相关路径,保存,双击运行加入注册表 Windows Registry Editor Version 5.00 [H ...
- jquery带下拉菜单和焦点图
jQuery,下拉菜单,二级菜单,索引按钮,焦点图代码,jquery带下拉菜单和焦点图是一款顶部通栏带二级下拉菜单和banner导航菜单代码. JQuery特效代码来源:http://www.huiy ...
- Delphi编程中动态菜单要点归纳
一.创建菜单并添加项目 在设计程序时,有时需要动态创建菜单, 通常使用以下的语句: PopupMenu1 := TPopupMenu.Create(Self); Item := TMenuIte ...
- delphi TDbGrid 右键 PopupMenu 菜单只在有数据的地方弹出
最近用delphi做开发,用到了DbGrid控件,想在控件上点击鼠标右键弹出菜单 关联DbGrid的 Popupmenu 倒是可以实现,但是这样的效果是不管你在哪里单击鼠标右键 只要在DBGrid里面 ...
- Delphi TdxBarManager通过代码生成菜单
procedure TForm6.btn1Click(Sender: TObject);var ABar:TdxBar; ABarItem:TdxBarItem; ABarSubItem:Tdx ...
- iOS之UITableView带滑动操作菜单的Cell
制作一个可以滑动操作的 Table View Cell 本文翻译自 http://www.raywenderlich.com/62435/make-swipeable-table-view-cell- ...
随机推荐
- HTTP协议中的长连接和短连接(keep-alive状态)
什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待在同 ...
- HNU 13108-Just Another Knapsack Problem (ac自动机上的dp)
题意: 给你一个母串,多个模式串及其价值,求用模式串拼接成母串(不重叠不遗漏),能获得的最大价值. 分析: ac自动机中,在字典树上查找时,用dp,dp[i]拼成母串以i为结尾的子串,获得的最大价值, ...
- e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (六) 自动化测试结构小节
上一篇‘e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (五) 如何让窗体记录登录 ...
- 学习笔记 - 深究Bitmap压缩避免OOM的核心inSampleSize的最佳取值
/** * 测试代码,通过在SDCard根目录放置几种不同大小的图片, 来自动测试压缩方式是否有效同时看是否会内存不够. * * @since * By:AsionTang * At:2014年3月2 ...
- VMtools安装以及设置
一.安装VMtools 点击VMware菜单的——虚拟机——安装VMware Tools,在弹出的对话框中选择“安装”.这时,在Ubuntu下会自动加载Linux版的VMware Tools的安装光盘 ...
- ORA-15005: name "orcl" is already used by an existing alias
在进行ASM操作的时候,如果目录不存在的话,那么可能会报如下的错误: <pre name="code" class="plain">RMAN> ...
- 【和我一起学python吧】Python 启航
话说万张高楼平地起,不会走之前先学会爬吧.尤其对于我等的小菜同学来说更是这样,不管怎么先code first吧,等我等小菜们翅膀硬了才test first吧. 1, 怎么运行python? 先到pyt ...
- mysql_connect v/s mysql_pconnect
原文:mysql_connect v/s mysql_pconnect 译文:mysql_connect v/s mysql_pconnect 译者:dwqs 当需要使用PHP连接MySQL数据库的时 ...
- JQuery插件之图片轮播插件–slideBox
来源:http://www.ido321.com/852.html 今天偶然发现了一个比较好用的图片轮播插件—slideBox 先看看效果:http://slidebox.sinaapp.com/ 代 ...
- TP分析
http://blog.csdn.net/l627859442/article/details/7633457 http://blog.chinaunix.net/uid-27717694-id-37 ...