欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Host+DLL模式下如何使用快捷键

程序员文章站 2022-05-26 14:36:28
...
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 就可以了。

以上就介绍了Host+DLL模式下如何使用快捷键,包括了使用快捷键方面的内容,希望对PHP教程有兴趣的朋友有所帮助。