Delphi弹出菜单无法通过uiautomation运行

Delphi弹出菜单无法通过uiautomation运行,delphi,microsoft-ui-automation,Delphi,Microsoft Ui Automation,我有一个扩展的库,允许我们通过ms自动化库测试与Delphi StringGrids的交互。当我调用showContextMenu方法时,库会有效地调用TPopupMenu(在Vcl.Menus.pas中)的popup方法。这是对TrackPopupMenu窗口API调用的包装,当从自动化库调用时,调用将导致不显示菜单,当通过应用程序内的按钮调用时,将显示菜单 我对它进行了调试,它似乎将相同的信息传递到TrackPopupMenu调用中,但没有得到相同的结果 这完全把我难住了 我不能发布应用程序

我有一个扩展的库,允许我们通过ms自动化库测试与Delphi StringGrids的交互。当我调用
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
    替换了上面的复杂代码,但这也没有达到预期效果