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;

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.

来自为知笔记(Wiz)

附件列表

delphi 带历史信息的菜单

时间: 2024-11-09 00:46:15

delphi 带历史信息的菜单的相关文章

C#窗体练习:带历史信息的菜单

在开发图纸管理软件时,要求在菜单上记录用户最近打开的档案或图纸,以方便下次使用.单击“文件”菜单下的“打开文件”子菜单,打开需要查阅的图纸.下次运行该软件时,上次打开的文件名记录到“文件”菜单的历史菜单中,选择该菜单,即可打开相应的图纸文件.技术要点要实现保存最近打开的文件,可以将在菜单中最近打开文件的文件名和路径保存到事先建立的*.ini文件中,系统启动时读取*.ini中的数据建立数组菜单,即可实现显示历史菜单的功能. 注意:要建立一个带历史信息的菜单,必须首先添加一个MenuStrip菜单控

带历史信息的菜单

实现效果: 知识运用: ToolStripMenuItem菜单项中DropDownItems集合的Insert方法 public void Insert( int index,ToolStripItem value ) 实现代码: private void Add_Items() { if (File.Exists(address)) { StreamReader sr = new StreamReader(address); //创建流读取器对象 int i = 文件FToolStripMen

自定义右键菜单,禁用浏览器自带的右键菜单[右键菜单实现--Demo]

许多从事Web开发的会发现有些事,我们需要禁用浏览器本事自带的右键菜单,而实现自定义的右键菜单下面我们也来实现一个自定义的右键菜单 首先来创建JSP页面 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <html> 3 <head> 4 <title>右键菜单</title> 5 <s

delphi TDbGrid 右键 PopupMenu 菜单只在有数据的地方弹出

最近用delphi做开发,用到了DbGrid控件,想在控件上点击鼠标右键弹出菜单 关联DbGrid的 Popupmenu 倒是可以实现,但是这样的效果是不管你在哪里单击鼠标右键 只要在DBGrid里面就会弹出菜单,我想只在数据区弹出,网上查了N多了资料,没有找到满意的 偶然间发现,当在DbGrid上单击鼠标右键的时候,当鼠标在数据区的时候不会触发 MouseDown事件 这样我就想用 MouseUp和MouseDown 区分鼠标是不是在数据区 ,然后弹出菜单 首先定义一个全局变量: var Sh

iOS之UITableView带滑动操作菜单的Cell

制作一个可以滑动操作的 Table View Cell 本文翻译自 http://www.raywenderlich.com/62435/make-swipeable-table-view-cell-actions-without-going-nuts-scroll-views 原作者:Ellen Shapiro Apple 通过 iOS 7 的邮件(Mail)应用介绍了一种新的用户界面方案——向左滑动以显示一个有着多个操作的菜单.本教程将会向你展示如何制作一个这样的 Table View Ce

android自带DrawerLayout滑动菜单的使用

受到slidingMenu的启发android增加了DrawerLayout来实现滑动菜单 DrawerLayout是继承自ViewGroup,可以在其中放子view.DrawerLayout中分为主内容区和菜单区域 使用方法如下 1.和普通的LinearLayout一样 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" androi

给Notepad++ 加带图标右键菜单

方式一: 复制以下代码建立一个reg文件,替换相关路径,保存,双击运行加入注册表 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\Notepad++]@="使用Notepad++打开""Icon"="C:\\Program Files\\Notepad++\\Notepad++.exe" [HKEY_CLASSES_ROOT\*\shell\Notepad++\Com

kindeditor集成ckplayer(带右键编辑菜单)

相信好多朋友为开源web编辑器没有集成视频播放器而烦恼,于是我就是试着修改了一下kindeditor,其实ueditor应该也是同样的,好了不多说了直接上图吧 kindeditor版本: 4.1.7 http://kindeditor.net/ ckplayer 版本:6.4 http://www.ckplayer.com/ 1.在kindeditor\ckeditor\plugins下新建文件夹insertVideo 2.将ckplayer文件夹拷贝到kindeditor\ckeditor\p

C#实例.net_经典例子400个

一共470多例winform 界面特效的源码. 窗体与界面设计... 9 实例001  带历史信息的菜单    10 实例002  菜单动态合并    12 实例003  像开始菜单一样漂亮的菜单... 14 实例004  任务栏托盘菜单    15 实例005  可以拉伸的菜单界面    16 实例006  菜级联菜单    18 1.2  工具栏设计... 19 实例007  带带背景的工具栏    19 实例008  带浮动工具栏    20 实例009  在带下拉菜单的工具栏... 21