加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

修复 XE7 , XE8 Frame 内 PopupMenu 快捷键失效问题

发布时间:2020-12-15 04:36:21 所属栏目:大数据 来源:网络整理
导读:问题:将 Frame 含 PopupMenu 放置 Form 后,在 Frame 里的 PopupMenu 失效,无法按快捷键。 适用:( update 1 / ) for Windows 平台 修正方法: 请将源码 FMX.Forms.pas复制到自己的工程目录里,再进行修改。 找到 TCommonCustomForm.KeyDown函数,修改如下

问题:将 Frame 含 PopupMenu 放置 Form 后,在 Frame 里的 PopupMenu 失效,无法按快捷键。

适用:( update 1 / ) for Windows 平台

修正方法:

请将源码 FMX.Forms.pas复制到自己的工程目录里,再进行修改。

找到 TCommonCustomForm.KeyDown函数,修改如下:

TCommonCustomForm.KeyDown( Key: Word; ..... 省略 ......

<span style="color: #008000;">{<span style="color: #008000;">+++><span style="color: #008000;">}
<span style="color: #008000;">//<span style="color: #008000;"> 遍历所有的 Menu
<span style="color: #0000ff;">function<span style="color: #000000;"> FindMenu(c: TFmxObject): TFmxObject;
<span style="color: #0000ff;">var<span style="color: #000000;"> i: Integer;
<span style="color: #0000ff;">begin
<span style="color: #0000ff;">if c <span style="color: #0000ff;">is TFmxObject <span style="color: #0000ff;">then
<span style="color: #0000ff;">for i:=<span style="color: #800080;">0 <span style="color: #0000ff;">to TFmxObject(c).ChildrenCount - <span style="color: #800080;">1 <span style="color: #0000ff;">do
<span style="color: #0000ff;">begin
<span style="color: #0000ff;">if TFmxObject(c).Children[i] <span style="color: #0000ff;">is TMainMenu <span style="color: #0000ff;">then<span style="color: #000000;">
TMainMenu(TFmxObject(c).Children[i]).DialogKey(Key,Shift)
<span style="color: #0000ff;">else <span style="color: #0000ff;">if TFmxObject(c).Children[i] <span style="color: #0000ff;">is TPopupMenu <span style="color: #0000ff;">then<span style="color: #000000;">
TPopupMenu(TFmxObject(c).Children[i]).DialogKey(Key,Shift);
FindMenu(TFmxObject(c).Children[i]);
<span style="color: #0000ff;">end<span style="color: #000000;">;
<span style="color: #0000ff;">end<span style="color: #000000;">;
<span style="color: #008000;">{<span style="color: #008000;"><+++<span style="color: #008000;">}

<span style="color: #0000ff;">var<span style="color: #000000;">
Control: IControl;
<span style="color: #0000ff;">begin<span style="color: #000000;">

..... 省略 ......

  </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 3. perform key in other Menus</span>
  <span style="color: #0000ff;"&gt;for</span> I := ChildrenCount - <span style="color: #800080;"&gt;1</span> <span style="color: #0000ff;"&gt;downto</span> <span style="color: #800080;"&gt;0</span> <span style="color: #0000ff;"&gt;do</span>
    <span style="color: #0000ff;"&gt;if</span> Children[i] <> FocusPopup <span style="color: #0000ff;"&gt;then</span>
    <span style="color: #0000ff;"&gt;begin</span>

<span style="color: #008000;">{<span style="color: #008000;">+++><span style="color: #008000;">} FindMenu(Children[I]); <span style="color: #008000;">//<span style="color: #008000;"> 加入这行:遍歷所有的 Menu

      <span style="color: #0000ff;"&gt;if</span> Children[I] <span style="color: #0000ff;"&gt;is</span> TMainMenu <span style="color: #0000ff;"&gt;then</span><span style="color: #000000;"&gt;
        TMainMenu(Children[I]).DialogKey(Key,Shift)
      </span><span style="color: #0000ff;"&gt;else</span> <span style="color: #0000ff;"&gt;if</span> Children[I] <span style="color: #0000ff;"&gt;is</span> TPopupMenu <span style="color: #0000ff;"&gt;then</span><span style="color: #000000;"&gt;
        TPopupMenu(Children[I]).DialogKey(Key,Shift);
      </span><span style="color: #0000ff;"&gt;if</span> Key = <span style="color: #800080;"&gt;0</span> <span style="color: #0000ff;"&gt;then</span><span style="color: #000000;"&gt;
        Exit;
    </span><span style="color: #0000ff;"&gt;end</span><span style="color: #000000;"&gt;;

..... 省略 ......

<span style="color: #0000ff;">end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读