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

问题:将 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;
时间: 2024-11-05 18:52:00

修复 XE7 Frame 内 PopupMenu 快捷键失效问题的相关文章

js获取frame内的元素

遇到这个问题在网上搜的时候感觉很乱,有很多的说法,但有的都不对,最后试了很多次才修改成功,在这里做下记录. 这个是获取父frame内的元素: var doc= window.parent.document.getElementById("leftFrame").contentWindow.document.getElementById("bookli"); 这句代码的意思是获取id="leftFrame"的frame中的一个id="bo

Ubuntu Myeclipse alt /自动补全快捷键失效

解决办法: 1.启动MyEclipse 选择菜单栏 Windows ->Preperences ->General ->keys 2.把word completion 的快捷键设置alt+/删掉!//如果这里不删除的话,你就算设置了也没用的. 3.把Content Assist 的快捷键 改成alt+/ Ubuntu Myeclipse alt /自动补全快捷键失效

Repeater内RadioButton.GroupName失效

最近在做项目时遇到要在repeater中显示多个radiobutton并且实现单选功能,于是很自然地就加上了GroupName,但事实是不行的,在repeater中的radiobutton呈现到页面的时候name会自动加上repeater的id.序列ct100和radiobutton的id,这就直接导致为什么GroupName会失效了.我在网上搜了有很多方法,但是都没适用的,比如用<input type=radio>.radiobuttonlist等,但是我既然用了radiobutton,就懒

eclipse alt+/快捷键失效

Eclipse没有了自动提示功能,也不是全部不提示,大多数情况下按下"alt+/"键还会产生提示,但是当我在java项目中邪main方法和syso的时候,"alt+/"则会失效,今天在网上搜索了一下结果,主要有一下几种方法: 1.次方法用于没有一点提示的情况:依次打开eclipse上面的windows --preferences --java --editor -- content assist ,在右上方有一行"select the proposal k

windows下解决快捷键失效的万能方法

1. 问题描述 windows下快捷键(热键hot key)失效的主要原因是快捷键冲突. 2. 解决方法 下载工具软件 windows hotkey explorer, 并安装, 然后运行. 该工具可以列出windows下所有快捷键hot key及其占用进程. 找出冲突的快捷键, 将该冲突的快捷键的进程杀掉, 那我们所在环境的快捷键就生效啦. 如本人遇到的情况: eclipse的快捷键ctrl + alt + down快捷键按下无反应, 通过windows hotkey explorer找到占用

RCP:导航器视图删除操作快捷键失效的解决方案

导航器视图按下“Delete”的时候,会触发删除节点的操作.如果失效,按以下步骤检查: 1.在要删除的节点上点击右键,确定删除操作是否生效.如果没有生效,则按下列位置 a)检查navigator扩展配置,是否有提供ActionProvider? b)检查ActionProvider,是否有对DeleteAction做初始化 c)检查fillContextMenu,是否有添加DeleteAction 完成了以上,则可以在右键菜单中看到删除操作按钮. 2.如果删除操作可以生效,但是DEL快捷键仍然失

IDEA导航光标回退和前进快捷键失效

工作中突然发现IDEA里的Ctrl+Alt+Left/Right失效了,即导航光标的回退和前进,影响看代码的效率. 用Windows Hotkey Explorer查看,发现是被igfxHK.exe进程占用了. 百度下该进程: igfxem.exe进程是正常的进程.是intel家的核显驱动类的进程.核显即"核芯显卡",是指GPU部分它是与CPU建立在同一内核芯片上,两者完全融合的芯片."核芯显卡",这是英特尔对其第二代智能酷睿解决器中GPU部分的全新解释,它是与CP

Eclipse下提示快捷键失效

Mac电脑在添加Eclipse xml文件的过程中, 会遇到提示快捷键alt + / 失效的情况. 如何解决这个问题呢? 首先选择Eclipse -> Preferences -> General -> Keys 在搜索框里检索Content Assist 点击后 更改binding内容,直接输入 alt + / 即可 完成后, 再重新打开xml文件,尝试按alt + / 可以发现出现提示: 原文地址:https://www.cnblogs.com/zhichun/p/12229732.

Eclipse自动排版快捷键失效(转)

格式化代码(Eclipse 格式化代码块快捷键:Ctrl+Shift+F) 1.格式化java代码 : ①Ctrl+Shift+F 但是我们会遇到按 Ctrl+Shift+F不起作用的时候?       Ctrl+Shift+F 在搜狗拼音里是简繁替换.一旦安装搜狗拼音这个快捷键就被占用了,不过可以通过设置搜狗的简繁快捷键为其他的.换成其他的时候果然可以在eclipse里使用格式化快捷键了. 其实一般可以归纳为这几点: 1.Ctrl或Shift或F键坏了: