程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> Host+DLL模式下快捷鍵的使用,hostdll模式快捷鍵

Host+DLL模式下快捷鍵的使用,hostdll模式快捷鍵

編輯:關於PHP編程

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved