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 就可以了。

时间: 2024-10-21 00:51:04

Host+DLL模式下快捷键的使用的相关文章

改进Vim体验:在插入模式下移动光标,我不要用方向键!alt快捷键使用技巧!

改进Vim体验:在插入模式下移动光标,我不要用方向键!alt快捷键使用技巧! 大家都知道,我们在插入模式下编辑代码的时候 若想写完这一部分后,移动到邻近的一部分,如下一个单词的后面,是很复杂的 '\eea'?还是'方向键*n'?虽然这也没什么复杂的,特别是参照我前面一篇文档,\e(esc)只需要按下alt-; 但有没有更方便的方法呢?我要告诉大家,有,插入模式下的alt快捷键重映射! 如下设置按键码 ;设置按键码判断时间;这个时间和组合键判断时间不同哟!只需要设置一次 :set ttimeout

微软URLRewriter.dll的url重写在目标框架.Net Framework2.0、4.0和应用程序池经典模式、集成模式下的配置

大家参考几篇园子里面的这篇文章: 文章1:微软URLRewriter.dll的url重写的简单使用 (讲解了使用UrlReWriter.dll的下载.web.config如何在目标框架2.0应用程序池经典模式下配置使用该dll.还有一个web的例子.缺少处理程序映射的设置例子) 文章2:使用web.config中的httpHandlers (讲解了URLRewriter.dll是如何从原理上来处理URL重写地址来转发给真实的服务器地址上的) 文章3:检测到在集成的托管管道模式下不适用的ASP.N

apache + tomcat 负载均衡模式下 getLocalAddr() 为null的解决办法

在apache + tomcat 负载均衡模式下,通过request.getLocalAddr()无法获取服务器端的ip地址,返回值为null的问题,查找了下,百度里没有有价值的回答,到官方网站上查找了下,说是: The AJP protocol only passes the web server host name and port. It does not pass the IP address. Therefore, getLocalName() will return whatever

Docker - 运行 containers 使用在 swarm 模式下创建的 overlay 模式的 network

前言 在Docker engine v1.12, 使用Swarm可以方便的创建overlay模式的网络,但是它只能被swarm下面的service所使用的,相对于container,这个网络是完全隔离的. 在v1.13,运行 containers 时,可以加入之前在swarm模式下自定义的overlay网络啦! 1.  Create swarm in one docker host (172.100.1.17) $ docker swarm init –advertise-address 172

在非归档模式下不能更改表空间为备份模式

Oracle表空间设置为备份模式后,便可以联机对表空间下数据文件进行文件系统级别的copy备份操作,因为期间对表空间的修改都记录到数据库的重做日志文件中. 由此想到数据库如果是非归档模式,那么这个表空间备份模式的时间必须不能超过联机日志被覆盖的时间,才能保证数据的修改不会丢失. 那么Oracle对这种情况是如何择决的呢? 实验表明:Oracle是干脆不让你在非归档模式下开启表空间的备份模式. 报错如下: ORA-01123: cannot start online backup; media r

CLI命令模式下Call to undefined function mysql_connect()

背景: http访问一切正常,可以connect到数据库存取数据.但是当CLI模式时会出现Call to undefined function mysql_connect() 原因:CLI模式下 没有配置php.ini文件,或者配置了php.ini,但是php.ini里没有php_mysql.dll或mysql.so模块 解决: 1 首先执行 php -m检查 mysql模块是否加载 2 执行命令 php --ini 检查命令模式的配置文件路径以及配置文件是否存在 输出如下: Configura

Linux下快捷键

Linux魅力无穷的CLI(command-line interface)界面 多运用快捷键,是高效学习Linux.提高故障处理速度.提高逼格的必备途径... Linux终端命令: 1.Tab          键-命令补全.路径补全 2.Ctrl+C      终止当前任务和程序 3.Ctrl+D     退出当前用户环境,相当于exit.logout 4.Ctrol+l     清屏,相当于clear 5.Ctrl+Shift+C  复制命令 6.Ctrl+Shift+V  粘贴命令 7.C

怎样判定应用程序自身运行在“兼容模式”下?

P.S.话说有很多天很多天没有写东东了啊,因为实在太忙了,还是恢复至少一个月两篇的状态吧. 我们的程序有时候需要精确的判定当前运行在哪个系统下面,也就是说程序的某个功能可能需要知道当前运行在哪个真正的操作系统下,而操作系统提供了一个兼容模式功能,就是用户可以设置某个程序运行在某个模拟的更低的版本的操作系统下面,这是有好处的,因为某些程序在某些更高版本的操作系统下面可能发生兼容性问题而无法运行.在设置兼容模式运行后,程序里面调用ring3层的GetVersionEx得到的将是模拟的的操作系统版本,

Tomcat NIO, APR 模式下SSL 的配置以及如果配置Http 到 Https的跳转

一般情况下,Tomcat都只是作为请求处理器而处在web 服务器例如Apache, ngnix之后的,但是对于小型的应用用让Tomcat 作为前端服务器也无妨.这里对Tomcat的一些配置最一下总结. NIO 模式下的SSL配置: 步骤1 建立 keysore: %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA 如果是第一次建立需要配置,可以还需要为keytool 设置进入密码. 通过这个命令生成的keystore包含了一个自动生