zoukankan      html  css  js  c++  java
  • 修复 XE7 , XE8 Frame 内 PopupMenu 快捷键失效问题

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

    适用:(XE7 update 1 / XE8) 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;
  • 相关阅读:
    小程序云函数 Error: errCode: -404011 cloud function execution error
    Fiddler+雷电模拟器进行APP抓包
    Vue优化常用技巧
    sftp常用命令整理
    React生命周期学习整理
    git 提交跳过检查
    漂亮的代码系列
    关于我系列
    架构系列
    深度学习系列
  • 原文地址:https://www.cnblogs.com/onechen/p/4355349.html
Copyright © 2011-2022 走看看