问题:将 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: #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;">//</span><span style="color: #008000;"> 3. perform key in other Menus</span>
<span style="color: #0000ff;">for</span> I := ChildrenCount - <span style="color: #800080;">1</span> <span style="color: #0000ff;">downto</span> <span style="color: #800080;">0</span> <span style="color: #0000ff;">do</span>
<span style="color: #0000ff;">if</span> Children[i] <> FocusPopup <span style="color: #0000ff;">then</span>
<span style="color: #0000ff;">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;">if</span> Children[I] <span style="color: #0000ff;">is</span> TMainMenu <span style="color: #0000ff;">then</span><span style="color: #000000;">
TMainMenu(Children[I]).DialogKey(Key,Shift)
</span><span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> Children[I] <span style="color: #0000ff;">is</span> TPopupMenu <span style="color: #0000ff;">then</span><span style="color: #000000;">
TPopupMenu(Children[I]).DialogKey(Key,Shift);
</span><span style="color: #0000ff;">if</span> Key = <span style="color: #800080;">0</span> <span style="color: #0000ff;">then</span><span style="color: #000000;">
Exit;
</span><span style="color: #0000ff;">end</span><span style="color: #000000;">;
..... 省略 ......
<span style="color: #0000ff;">end;