zoukankan      html  css  js  c++  java
  • Host+DLL模式下快捷键的使用

       最近在做一个 Host+DLL 的插件系统,每个DLL模块都继承一个基类模块TBaseForm , 然后再基类模块里定义了增F1、删F2、改F3、查F4等功能,每个功能定义了一个快捷键,

    在主程序这边通过PageControl来加载每个DLL模块,问题来了,当我打开多个模块时,按下 F1 时,系统调用的不是我当前激活的 TabSheet 模块,而是第一个打开的模块的新增

    功能,原来快捷键被第一个模块注册后,后面打开的模块再注册就无效了。后来想到一个方法,就是再  TabSheet的 OnHide 事件里把当前模块的快捷键取消,在 onShow 事件里

    再把当前模块的快捷键关联起来,经过测试成功!!!,以下是部分代码:

     1 procedure TBaseForm.bidingshortcut;       //绑定快捷键
     2 begin
     3   al_new.ShortCut:=TextToShortCut('F5');
     4   al_edit.ShortCut:=TextToShortCut('F6');
     5   al_delete.ShortCut:=TextToShortCut('F7');
     6   al_refdata.ShortCut:=TextToShortCut('F8');
     7   al_query.ShortCut:=TextToShortCut('F3');
     8   al_report.ShortCut:=TextToShortCut('F2');
     9   al_export.ShortCut:=TextToShortCut('F10');
    10   al_import.ShortCut:=TextToShortCut('F4');
    11   al_gridset.ShortCut:=TextToShortCut('F9');
    12 end;
    13 
    14 procedure TBaseForm.unbidingshortcut;     //解除绑定快捷键
    15 begin
    16   al_new.ShortCut:=TextToShortCut('none');
    17   al_edit.ShortCut:=TextToShortCut('none');
    18   al_delete.ShortCut:=TextToShortCut('none');
    19   al_refdata.ShortCut:=TextToShortCut('none');
    20   al_query.ShortCut:=TextToShortCut('none');
    21   al_report.ShortCut:=TextToShortCut('none');
    22   al_export.ShortCut:=TextToShortCut('none');
    23   al_import.ShortCut:=TextToShortCut('none');
    24   al_gridset.ShortCut:=TextToShortCut('none');
    25 end;

    然后在Host程序中的onHide和onShow分别调用unbidingshortcut和bidingshortcut即可。

    这里有一个基类的转换过程,因为我事先在tabsheet的tag里保存了当前窗体,所以只要做以下转换:

    TBaseForm(TabSheet.tag).bidingshourtcut 就可以了。

  • 相关阅读:
    创建内核对象的专有命名空间
    内核对象句柄表
    Windows小知识(二)
    内核对象与用户对象/GDI对象
    Windows小知识(一)
    Windows中查看错误
    handle(句柄)
    VC中调用其它程序
    消息映射的转变
    实验6.配置链路聚合
  • 原文地址:https://www.cnblogs.com/lpq21314/p/4114680.html
Copyright © 2011-2022 走看看