码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-03-21 12:31:12      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

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

适用:XE7 update 1 for Windows 平台

修正方法:

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

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

procedure TCommonCustomForm.KeyDown(var Key: Word; var KeyChar: System.WideChar; Shift: TShiftState);

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

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

var
  Control: IControl;
begin

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

      // 3. perform key in other Menus
      for I := ChildrenCount - 1 downto 0 do
        if Children[i] <> FocusPopup then
        begin

{+++>}    FindMenu(Children[I]); // 加入这行:遍歷所有的 Menu

          if Children[I] is TMainMenu then
            TMainMenu(Children[I]).DialogKey(Key, Shift)
          else if Children[I] is TPopupMenu then
            TPopupMenu(Children[I]).DialogKey(Key, Shift);
          if Key = 0 then
            Exit;
        end;

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

end;

 

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

标签:

原文地址:http://www.cnblogs.com/onechen/p/4355349.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!