如何通过 TabIndex 在 TTabSet 中选择选项卡时引发点击事件?

发布于 2024-11-29 01:19:59 字数 223 浏览 1 评论 0原文

我有一个 TestComplete 测试,它使用 TabIndex 属性在 TTabSet 中选择一个选项卡:

Tab.TabIndex = 1

效果很好。但是,我注意到该选项卡上的某些对象需要发生单击事件才能启用。也就是说,如何通过涉及某种点击事件的 TabIndex 选择选项卡项?

I have a TestComplete test that selects a tab in a TTabSet using the TabIndex property:

Tab.TabIndex = 1

That works great. However, I am noticing that some of the objects on that tab require the click event to occur to be enabled. That said, how can I select the tab item via the TabIndex with some sort of a click event involved?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

风吹雨成花 2024-12-06 01:19:59

您可以调用 TTabSetItemRect 方法通过索引获取选项卡的坐标,然后将这些坐标传递给 TestComplete 的 Click 方法。下面是一个示例:

Sub Main
  Set tabSet = Sys.Process("Project1").VCLObject("Form1").VCLObject("TabSet1")

  For i = 0 To tabSet.Tabs.Count
    ClickTab tabSet, i
    Delay 1000
  Next
End Sub

Sub ClickTab(TTabSet, ItemIndex)
  Dim rect, x, y
  Set rect = TTabSet.ItemRect(ItemIndex)
  x = (rect.Left + rect.Right)  / 2
  y = (rect.Top  + rect.Bottom) / 2

  TTabSet.Click x, y 
End Sub

但是,此方法要求:

  • ​​您的测试应用程序是使用调试信息构建的(这使得公共成员(包括 ItemRect)可用于 TestComplete)。
  • 应用程序代码包含 ItemRect 方法调用(否则该方法将被 Delphi 的智能链接器排除在 EXE 之外,因此无法用于 TestComplete)。

另外,如果您的选项卡控件的选项卡数量多于显示的选项卡数量(即 Tabs.Count > VisibleTabs),则需要滚动它以显示所需的选项卡首先可见。例如,您可以使用 FirstIndex< /a> 属性:

Sub ClickTab(TTabSet, ItemIndex)
  If ItemIndex >= TTabSet.FirstIndex + TTabSet.VisibleTabs Then
    TTabSet.FirstIndex = ItemIndex
  End If

  Dim index, rect, x, y
  index = ItemIndex - TTabSet.FirstIndex

  Set rect = TTabSet.ItemRect(index)
  x = (rect.Left + rect.Right)  \ 2
  y = (rect.Top  + rect.Bottom) \ 2

  TTabSet.Click x, y 
End Sub

Instead of assigning a value to TabIndex, you can call TTabSet's ItemRect method to get the coordinates of a tab by its index, and then pass these coordinates to TestComplete's Click method. Here's an example:

Sub Main
  Set tabSet = Sys.Process("Project1").VCLObject("Form1").VCLObject("TabSet1")

  For i = 0 To tabSet.Tabs.Count
    ClickTab tabSet, i
    Delay 1000
  Next
End Sub

Sub ClickTab(TTabSet, ItemIndex)
  Dim rect, x, y
  Set rect = TTabSet.ItemRect(ItemIndex)
  x = (rect.Left + rect.Right)  / 2
  y = (rect.Top  + rect.Bottom) / 2

  TTabSet.Click x, y 
End Sub

However, this approach requires that:

  • Your tested application is built with debug information (this makes public members, including ItemRect, available to TestComplete).
  • The application code contains the ItemRect method call (otherwise this method will be left out of the EXE by Delphi's smart linker, so it will be unavailable to TestComplete).

Also, if your tab control has more tabs than are displayed (that is, Tabs.Count > VisibleTabs), you'll need to scroll it to make the needed tab visible first. You can do this, for example, using the FirstIndex property:

Sub ClickTab(TTabSet, ItemIndex)
  If ItemIndex >= TTabSet.FirstIndex + TTabSet.VisibleTabs Then
    TTabSet.FirstIndex = ItemIndex
  End If

  Dim index, rect, x, y
  index = ItemIndex - TTabSet.FirstIndex

  Set rect = TTabSet.ItemRect(index)
  x = (rect.Left + rect.Right)  \ 2
  y = (rect.Top  + rect.Bottom) \ 2

  TTabSet.Click x, y 
End Sub
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文