首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于程序热键,不是系统级热键 [已结贴,结贴人:renaihaore]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-30 15:04:34 楼主
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    OptWinhotkeyid:=GlobalAddAtom(pchar('OptWinHotkey'))-$C000;
    end;

    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
    RegisterHotKey(Handle, OptWinhotkeyid, MOD_ALT, key);//ALT+F1
    end;


    我用了这个注册了热键

    但是我只想这个热键在当前程序上

    如果焦点不在这个程序上    我不想这个热键生效应该怎么做呢?

    也就是说想程序级的热键  而不是系统级的热键  帮帮偶吧  谢谢
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-30 15:29:521楼 得分:0
    你这种情况,干脆用FORM.KEYPRVIEW:=TRUE;
    然后在自定义热键就搞定,太简单了,不象问题啊.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-30 15:45:192楼 得分:0
    你说的这个不好使哦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-30 16:04:243楼 得分:20
    用Form.KeyPreview好使啊!
    那你试试这个方法,用TActionList控件.

    Delphi(Pascal) code
    // ... TXXXForm = class(TForm) ActLst: TActionList; ActHotKey1: TAction; ActHotKey2: TAction; // ... // 注意位置,这两个热键过程不能放在private或public等域中! procedure OnHotKey1(Sender: TObject); procedure OnHotKey2(Sender: TObject); private // ... public // ... end; // ... implementation procedure TXXXForm.OnHotKey1(Sender: TObject); begin //ShowMessage('HotKey1'); end; procedure TXXXForm.OnHotKey2(Sender: TObject); begin //ShowMessage('HotKey2'); end;


    在窗体上放一个TActionList控件,双击它,添加动作(TAction)并设置热键(ShortCut属性),然后把这个动作的OnExecute事件指向你定义好的执行过程(这里代码里的OnHotKey1或OnHotKey2),就行了.
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved