ActionList中Action的快捷鍵

 

本文的目的是說明,這里的快捷鍵是如何被觸發的。

 

    從控件自身來看,快捷鍵的進入點是在TWincontrol.IsMenuKey。在分析IsMenuKey之前,我們先看一下IsMenuKey是哪里被調用的?

    搜索Controls.Pas,可以發現,他是在CNKeyDown事件里被觸發的,如下(Line 13):

 

那么,CNKeyDown又是如何響應的呢?這就要從消息進入的源頭查找——Application.IsKeyMsg,其實現如下:

  

SendMessage(Wnd, CN_BASE + Message, WParam, LParam)預先讓控件處理此類消息,然后繼續派送WM_XXXX

 

    OK,回到IsMenuKey這個觸發快捷鍵的關鍵部位。先看其代碼:

    

取得Form := GetParentForm(Self);然后Form.IsShortCut(Message) ;

IsShortCut實現過程就不貼代碼了(避免篇幅太長),自己看一下代碼就了解了。

 

但這里要注意GetParentForm,假設有兩個formABB嵌入A,這時,我們這樣GetParentForm(Self);取得B上面的控件的父窗口是誰,最終會是A(這里有個前提:嵌入的方式是指定Parent)。

所以,若A中有快捷鍵和BAction的快捷鍵有沖突,那么B的快捷鍵就不會被觸發(因為被A給處理了)。

下面是GetParentForm做法,這是D5的實現方式,雖然之后的版本有所改動,但結果是一樣的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值