在创建自动收集显示器分辨率的程序时,菜单自动生成,但有些菜单我想添加快捷键(如F11,ESC等),现在通过ShortCut属性添加快捷键,可以在菜单中显示,但按

  • 主题发起人 主题发起人 lihuihj
  • 开始时间 开始时间
L

lihuihj

Unregistered / Unconfirmed
GUEST, unregistred user!
在创建自动收集显示器分辨率的程序时,菜单自动生成,但有些菜单我想添加快捷键(如F11,ESC等),现在通过ShortCut属性添加快捷键,可以在菜单中显示,但按下该键无效,为何? (100分)<br />在创建自动收集显示器分辨率的程序时,菜单自动生成,
但有些菜单我想添加快捷键(如F11,ESC等),
现在通过ShortCut属性添加快捷键,可以在菜单中显示,
即:
NewItem.ShortCut:=ShortCut(VK_F11,[]);

但按下该键无效,为何?
 
菜单名.OnClick:=你原来的那个OnClick事件。
可以根据按钮的名称或者Tag数值判断选择的是哪一个。
 
楼上说的对,也可以分解判断菜单项的内容来执行相应的程序呀。
 
可否示例?
 
类似下面的,不过建议使用tag值,好一点。
//procedure mmi_0Click(Sender: TObject);这个原来有的
procedure TForm1.mmi_0Click(Sender: TObject);
begin
if Sender is TMenuItem then

if TMenuItem(Sender).Name = 'mmi_0' then
ShowMessage('0')
else if TMenuItem(Sender).Name = 'mmi_1' then
ShowMessage('1');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
MainMenu1.Items.Add(NewItem('First Menu', 0, False, True, mmi_0Click, 0, 'mmi_1'));
end;
 
谢谢大家的答案!!!!!

不过我又碰到了一个问题,在收集的所有的分辨率中,
有些分辨率显示器不能很好的支持(特别是刷新率比较高的情况下,
显示器黑屏,并自动切断了显示器的信号),我如何才能使不能支持
的排除在外。或者作上标记?
 
对于菜单

最好的方法是利用TActionList
 
GZ第二个问题
 
不能做到如此,一般象程序都加了提示对话框,,,几秒钟没回应就返回原来的模式...

win如此,,redhat也如此 :)
 
按道理说计算机应该知道显示器不支持的,他出现黑屏或者花屏的时候显示器应该给计算机返回信号的。
但是很遗憾,可能是标准不一致,也可能是没有返回,还有可能是操作系统不容易获得,反正没有系统给你自动处理这些。
不过一般计算机,除非你安装了其他显示器的驱动,他才会出现不适合他自己的分辨率和刷新频率。
就是说,按照Windows的做法在你的程序里面实现应该没有人提出非议的。
 
我现在设置了一个折中的办法,就是设置一个快捷键,
当出现黑屏时,按一下快捷键即可恢复原来正常的模式。

不过我在Win98中使用时,收集不到刷新率,其他在Win2000
中一致。不知为何?
 
你看看你的显示器属性里面是否存在刷新率的设置?
如果没有安装显示器驱动,那么里面仅仅有默认和优化两个。
 
我在Win98中安装了驱动程序,能看到刷新率,跟我没设置驱动一个样,
不过我还没有在其他的机器上测试,只在自己的Win98/Win2000中测试了。

还有就是在动态创建菜单中,怎样设置快捷键?
 
caption 为 &amp;OK
O就是快捷键

要是想定shortcut的话
用actionlist
给每个action定好
然后只用创建menu项
指定他的action
就什么都不用管了
 
请示例一下?
 
在窗体中加入一个TActionList

给他添加一个Action为ActNewFile

假设你创建了一个Menu项是MnuTest

MnuTest.Action := ActNewFile;

这样你的Menu的caption,shortcut,事件处理程序,是否enable

都会全部绑定到这个Action

这样做的好处很多

1、集中化管理,很方便
2、很可能你的程序里面既有菜单又有工具栏,这下全部绑定到了Taction
3、权限管理更方便了,把Action enable设为false就可以了
 
多人接受答案了。
 
后退
顶部