C++ BUILDER动态建立菜单及菜单事件

首先新建一个工程文件(File->New Application)。

然后在Form1上面建立一个PopupMenu1,一个Button1,一个RichEdit1。

在头文Unit1.H的内容,其中黑体是自已加的。

#ifndef Unit1H
#define Unit1H
#include
#include
#include
#include
#include
#include
#include
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TPopupMenu *PopupMenu1;
TRichEdit *RichEdit1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
POINT MousePos;//保存鼠标的位置
int PopCount;//保存菜单项个数
void __fastcall MyClick(TObject *Sender);//自已定义的单击事件
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
extern PACKAGE TForm1 *Form1;
#endif
在Unit1.cpp中的内容,黑体自已加。
#include
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for(int i=PopCount-1;i>=0;i--) file://如果PopupMenu1里面有菜单项
PopupMenu1->Items->Delete(i); file://就删除,以免重复建立
TSearchRec Sr;//用来反回文件名
TMenuItem *NewItem;
GetCursorPos(&MousePos);//把当前的鼠标位置保存在MousePos里
int MenuNameLength;//菜单名的长度
if(FindFirst("C:\\Program Files\\3LTyping\\data\\*.txt",0,Sr)==0)
{
file://取得第一个符合条件的文件名;
file://TXT文件的位置,可自己设定;
NewItem=new TMenuItem(PopupMenu1); file://建立菜单
MenuNameLength=Sr.Name.Length(); file://文件名的长度
Sr.Name.SetLength(MenuNameLength-4); file://去除“.TXT”
NewItem->Caption=Sr.Name; file://新建菜单的名字
PopupMenu1->Items->Add(NewItem); file://把新建菜单项加到PopupMenu1里
NewItem->OnClick=MyClick; file://把自己定义的MyClick函数复给新菜单的
file://OnClick单击事件
file://查找下一个符合条件的文件名,直到完
while(FindNext(Sr)==0)
{
NewItem=new TMenuItem(PopupMenu1);
MenuNameLength=Sr.Name.Length();
Sr.Name.SetLength(MenuNameLength-4);
NewItem->Caption=Sr.Name;
PopupMenu1->Items->Add(NewItem);
NewItem->OnClick=MyClick;
}
FindClose(Sr);//结事查找
}
PopCount=PopupMenu1->Items->Count;//PopupMenu1下的菜单项个数保存
PopupMenu1->Popup(MousePos.x,MousePos.y);//在当前位置弹出PoupMenu1菜单
}
{
file://下面的代码主要是把选定的文件显示在RichEdit1上
Form1->Caption=((TMenuItem*)Sender)->Caption;
RichEdit1->PlainText=true;//设为true,表示纯文本文件
RichEdit1->Lines->LoadFromFile(
"C:\\Program Files\\3LTyping\\data\\"+
((TMenuItem*)Sender)->Caption+".txt");
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
PopCount=0;//初始化
}

上面的程序编译之后,单击Button1,就会弹出PoupMenu1,通过单击PoupMenu1下面的菜单项就会在RichEdit1上面显示文件的内容。

这个程序很简单,主要是说明如何动态建立菜单,及如何响应新建菜单的事件,也可应用到其它上面,如TMenuMain等。。。。。

本程序在C++BUILDER4.0下通过。

时间: 2025-01-01 00:50:40

C++ BUILDER动态建立菜单及菜单事件的相关文章

jQuery结合CSS制作动态的下拉菜单_jquery

当要在一个有限的导航菜单空间放一个大的子菜单时,我们一般采用下拉菜单的形式来弥补空间的不足.本文将带大家用最少的时间,使用jQuery和CSS结合制作一个动态的下拉菜单. XHTML 首先是要在页面的head部分引入jquery库,这是必须的. <script type="text/javascript" src="js/jquery.js"></script> 接着我使用一个无序列表来构建菜单. <ul class="men

WEB资源下载:动态横幅,导航菜单,照片幻灯片

文章描述:2012年36个人最喜欢的Web前端开发指南.这些指南大部分关注Web技术比如:动态横幅,导航菜单,照片幻灯片,以及表单输入效果等等. 2012年36个人最喜欢的Web前端开发指南.这些指南大部分关注Web技术比如:动态横幅,导航菜单,照片幻灯片,以及表单输入效果等等. Animated Tabs Widget Dynamic Web Banners CSS3 Animated Tooltips Radio Button Switches CSS3 Psuedo Buttons Res

ext 权限 menu 动态-我想请教一个关于Ext JS4根据权限动态生成左侧树形菜单,和上侧Menu下拉菜单。

问题描述 我想请教一个关于Ext JS4根据权限动态生成左侧树形菜单,和上侧Menu下拉菜单. 我现在根据自己想的写了一个动态生成树的例子:数据库有 用户表 : 里面有个角色id ,角色表: 里面有个可以访问页面的Id号.然后我登陆的时候会判断用户拥有哪些id号,再根据id号生成树形菜单. 现在我在页面上侧加Menu的下拉菜单.也想根据权限生成,但是没有思路..想请教下各位,有什么例子可以借鉴 或者指点一下.谢谢啦 ~~

Flex/AS3/flash player支持屏蔽右键菜单,自定义菜单,并设置相应的菜单事件(示例,图解)

Flex/AS3/flash player支持屏蔽右键菜单,自定义菜单,并设置相应的菜单事件(示例,图解) 播放器 版本 11.2以后支持右键菜单屏蔽及自定义菜单 1.更新播放器 ,11.2 以上版本 http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_3.swc http://download.macromedia.com/get/flashplayer/updaters/11/playerglob

uto omplete ext iew-AutoCompleteTextView下拉菜单的滑动事件怎么监听

问题描述 AutoCompleteTextView下拉菜单的滑动事件怎么监听 就是AutoCompleteTextView在下拉菜单弹出后,在上面滑动时把输入法隐藏起来,

android drawerlayout菜单的滑动事件

问题描述 android drawerlayout菜单的滑动事件 android中加入了drawerlayout菜单后 再调用OnGestureListener接口里的onScroll方法 不起作用,该怎么解决 解决方案 Android 屏幕滑动事件Android 屏幕滑动事件

MFC中动态创建控件以及事件响应实现方法_C 语言

本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示. 静态控件不需要调用Create()

重命名Office工具栏、菜单和菜单命令

可使用鼠标重新排列和修改Office工具栏按钮.菜单.菜单命令和自定义工具栏,也可通过键盘菜单访问并使用"重排命令"对话框.这些任务都可以标识为键盘获取. 请执行下列一项或多项操作: 重命名按钮或菜单命令 1.在"工具"菜单上,单击"自定义"命令. 2.确保要更改的工具栏是可见的. 操作方法 ·在"自定义"对话框中,单击"工具栏"选项卡. ·选中要显示的工具栏的复选框. 3.执行下列操作之一: 重命名菜单命

jQuery给动态添加的元素绑定事件的方法

 这篇文章主要介绍了jQuery给动态添加的元素绑定事件的方法,对比了jQuery中事件绑定的方法以及常见版本使用绑定的区别,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了jQuery给动态添加的元素绑定事件的方法.分享给大家供大家参考.具体分析如下: jquery中绑定事件一般使用bind,或者click,但是这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定.在1.7版本以前使用live.但是在1.8版本以后推荐使用on.这里介绍jQuery中如何给