最近在做一个 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教程有兴趣的朋友有所帮助。
