Delphi弹出菜单无法通过uiautomation运行
我有一个扩展的库,允许我们通过ms自动化库测试与Delphi StringGrids的交互。当我调用Delphi弹出菜单无法通过uiautomation运行,delphi,microsoft-ui-automation,Delphi,Microsoft Ui Automation,我有一个扩展的库,允许我们通过ms自动化库测试与Delphi StringGrids的交互。当我调用showContextMenu方法时,库会有效地调用TPopupMenu(在Vcl.Menus.pas中)的popup方法。这是对TrackPopupMenu窗口API调用的包装,当从自动化库调用时,调用将导致不显示菜单,当通过应用程序内的按钮调用时,将显示菜单 我对它进行了调试,它似乎将相同的信息传递到TrackPopupMenu调用中,但没有得到相同的结果 这完全把我难住了 我不能发布应用程序
showContextMenu
方法时,库会有效地调用TPopupMenu
(在Vcl.Menus.pas
中)的popup
方法。这是对TrackPopupMenu
窗口API调用的包装,当从自动化库调用时,调用将导致不显示菜单,当通过应用程序内的按钮调用时,将显示菜单
我对它进行了调试,它似乎将相同的信息传递到TrackPopupMenu
调用中,但没有得到相同的结果
这完全把我难住了
我不能发布应用程序的代码,但本质上代码看起来很像
type
TMyGridItem = class(TAutomatedStringGridItem)
protected
procedure SelectCell; override;
public
function ShowContextMenu: HResult; override; stdcall;
function Invoke: HResult; override; stdcall;
end;
implementation
function TMyGridItem.ShowContextMenu: HResult;
var
gridTop, top: Integer;
gridLeft, left: Integer;
cell : IAutomatedStringGridItem;
begin
gridTop := self.top;
gridLeft := self.left;
cell := self.getSelectedCell;
left := (cell as TMyGridItem).CellRect.left -gridLeft + self.parent.left;
top := (cell as TMyGridItem).CellRect.top -gridTop + self.parent.left;
self.MouseDownGeneral(self, mbRight, [], left, top);
result := S_OK;
end;
MouseDownGeneral
用数据填充菜单项,然后调用上述弹出菜单
我正在使用的自动化库位于,为了充分披露,这是我的项目
这让我很困惑,那么有没有人知道从哪里开始考虑为什么这两个电话的工作方式不同呢
- 我已经用直接调用
替换了上面的复杂代码,但这也没有达到预期效果popupmenu