Host+DLL模式下快捷键的使用,hostdll模式快捷键。Host+DLL模式下快捷键的使用,hostdll模式快捷键 最近在做一个 Host+DLL 的插件系统,每个DLL模块都继承一个基类模块…
Host+DLL 模式下快捷键的使用,hostdll 模式快捷键
最近在做一个 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 begin16 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 就可以了。
http://www.bkjia.com/PHPjc/915784.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/915784.htmlTechArticleHost+DLL 模式下快捷键的使用,hostdll 模式快捷键 最近在做一个 Host+DLL 的插件系统,每个 DLL 模块都继承一个基类模块 TBaseForm , 然后再基类模块…
原创文章,作者:xingkupai,如若转载,请注明出处:http://xingkupai.com/office/11783.html