Delphi弹出菜单无法通过uiautomation工作

时间:2017-09-06 12:44:47

标签: delphi microsoft-ui-automation

我有一个扩展的库,允许我们通过ms-automation库测试与Delphi StringGrids的交互。当我调用showContextMenu方法时,该库有效地调用popup的{​​{1}}方法(在TPopupMenu中)。这是对Vcl.Menus.pas Window API调用的包装,当从自动化库调用时,调用不会显示任何菜单,当通过应用程序内的按钮调用时,则会显示菜单。

我已经调试了它,它似乎将相同的信息传递给TrackPopupMenu调用,但没有得到相同的结果。

这让我完全难过。

我无法发布应用程序的代码,但基本上代码看起来就像这样...

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; 用数据填充菜单项,然后调用上面提到的弹出菜单。

我使用的自动化库位于DelphiUIAutomation ,为了完全公开,这是我的项目。

这让我很难过,所以有人知道从哪里开始研究为什么2个电话的工作方式不同?

  • 我已经直接调用MouseDownGeneral替换了上面的复杂代码,这也无法按预期工作。

0 个答案:

没有答案