如何在button上实现热键的功能(200分)

  • 主题发起人 主题发起人 scloudy
  • 开始时间 开始时间
S

scloudy

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在button上实现热键的功能,比如button1 被按下时显示’yanghl’信息,
如果我定义了ctrl+s热键,按下这两个键也会触发button1按钮;而且在程序中没有memu控件;如何实现?或有类似的控件?先行谢谢
 
用Taction可以实现的。我先帮你试试看
 
代码如下:如果对了就给分啊!
unit Main;

interface

uses
SysUtils, Windows, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Menus, dxBar, dxBarExtItems,
ActnList;

type
TMainForm = class(TForm)
ActionList1: TActionList;
Action1: TAction;
Button1: TButton;
procedure Action1Execute(Sender: TObject);
end;

var
MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.Action1Execute(Sender: TObject);
begin
showmessage('AAAAAAAAAAA');
end;

end.


//Form
object MainForm: TMainForm
Left = 158
Top = 115
Width = 584
Height = 398
Caption = 'MainForm'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 120
Top = 104
Width = 75
Height = 25
Action = Action1
TabOrder = 0
end
object ActionList1: TActionList
Left = 456
Top = 48
object Action1: TAction
Caption = '&WWW'
ShortCut = 16467
OnExecute = Action1Execute
end
end
end
 
在按钮的caption属性上象菜单一样加个&a,就可以产生一个简单的AlT+A的热键了,你试试?
 
用 Action 的确可以实现,不过也会带来副作用,那就是这个 HotKey 在整个应用程序中
都会起作用,具体举个例子:在 Form1 中定义一个 Action 并指定热键 ,绑定到 Button1,
然后按下 Button1 创建 Form2 同时 Hide Form1,这是一个很平常的应用。
但是当你在 Form2 出现之后再按一次这个 HotKey ,Button1 的代码仍然会再次触发,
这时候就会出现两个 Form2,当然你按得越多,Form2 就越多。简单地说,Form1 的按钮
在 Form1 被隐藏起来后仍然会被 Action 的 HotKey 触发,有时候会带来不必要的麻烦。
 
比如我有一只程序,包含Save, Print, Edit, Del....等等Button负责执行相应的操作;
写一只程序来专门定义(这是老板的意思)来管理以达到用户自定义每个button的热键的目的,
这些button的name是统一的,因此table的结构可以如下 buttonname,hotkey,
user可以自定义这些button的热键,因此每个button的热键是可变的
 
在form的OnKeyPress事件中写代码来处理用户的按键,当是定义的button的热键时
执行button的OnClick事件。
 
那不是要写很多判断程序
 
呵,来迟了,这个简单的问题也值200分啊?你老兄太有钱了吧。
archive说的最简单。
 
你要想全动态处理,只有在KeyDown或KeyPress中处理了,重复劳动而已
 
真的来迟了……
 
那不是要写很多代码,注册系统热键可以吗?
 
可以通过Application的Message来实现.自己试一试就明白了.
 
能不能举个详细一点的范例?
 
提问者:
如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
请认真阅读大富翁论坛规则说明 http://www.delphibbs.com/delphibbs/rules.asp
 
你按如下步骤试一下,看是否能够满足你的要求
1、通过文件菜单新建一个appliction。在上面安排一个button,在该button的onclick事件
中填写如下代码:
self.caption:='xxxxxxxx';
2.在该form上再安排一个actionlist(standard页上的最后一个控件),在该控件上单击
鼠标右健选action list editor,在弹出的窗口中选新建按钮,缺省名为action1,选中该
action1,在它的object inspector的events的onexecute 事件中选中刚才建立的button
onclick事件对应的过程button1click. 在object inspector的properties 中的shortcut
属性中选一热件如 f2
3.运行该程序然后按下f2看一看窗口标题是否已改成xxxxxxxx!
 
多人接受答案了。
 
后退
顶部