Host+DLL 모드에서 단축키 사용

6011 단어 host

최근에 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만 있으면 돼요.

좋은 웹페이지 즐겨찾기