如何在 OpenOffice BASIC 宏中通过鼠标单击获取文档坐标

2024-04-17

背景:

我想在我用鼠标单击或悬停的位置(使用按键激活时)粘贴(如 [CTRL+V])任何内容(最好是图像、形状)。我不知道该怎么做获取我单击的文档 (X, Y) 上的位置.

(Apache OpenOffice、SDraw-Document、OpenOffice BASIC 宏)

我需要的:

  • 提示/提示如何从文档上的鼠标单击/鼠标位置获取位置。 (我需要哪个类、监听器、组件)

Notes: 像一个com.sun.star.awt.XMouseClickHandler将是完美的,如果给定oEvent给了我文档的 X+Y,我点击的地方。 (也许你知道如何“激活”PopupTrigger? (com.sun.star.awt.MouseEvent))

到目前为止我的代码:

我尝试使用提到的XMouseClickHandler得到X+Y。 遗憾的是,X+Y 指的是窗口的相对位置,而不是形状或文本在文档上的实际位置。

执行: My Sub Main通过顶部的菜单按钮执行。 然后单击任意位置将输出(通过 MsgBox)该单击的坐标。

唯一的问题:坐标是相对于窗口的角,而不是文档的角。

Global gListener As Object

Sub Main
  gListener = CreateUnoListener("Listener_","com.sun.star.awt.XMouseClickHandler")
  ThisComponent.CurrentController.addMouseClickHandler(gListener) 
End Sub

Sub Listener_mousePressed(oMouseEvent) As Boolean
   ThisComponent.CurrentController.removeMouseClickHandler(gListener)

   Msg = "Position: "
   Msg = Msg & oMouseEvent.X & "/" & oMouseEvent.Y
   MsgBox(Msg)

   REM :: I want something like:
   REM :: Msg = "Position: " & oMouseEvent.PositionOnDocument.X
   REM :: Msg = Msg & "/" & oMouseEvent.PositionOnDocument.Y
   REM :: MsgBox(Msg)
End Sub

我的参考资料:

到目前为止,我的所有信息都来自官方参考资料/文档,因为我所有的搜索都没有找到任何有用的东西。

  • 班级列表:http://api.libreoffice.org/docs/idl/ref/annotated.html http://api.libreoffice.org/docs/idl/ref/annotated.html在这里您可以查看所使用的类的文档(com.sun.star.awt.XMouseClickHandler、com.sun.star.awt.MouseEvent)
  • 监听器的相关信息:https://help.libreoffice.org/3.6/Basic/CreateUnoListener_Function_Runtime https://help.libreoffice.org/3.6/Basic/CreateUnoListener_Function_Runtime

提前致谢。


我终于找到办法了获取鼠标单击的精确坐标(相对于文档)。 我设法从底部的状态栏获取信息,它通常显示坐标(对我来说以厘米为单位)。

这是我现在用来获取位置 (X / Y) 的函数:

REM // Warning: If there is currently a selection, the returning Point will instead show the coordinates of the selection!
Sub GetMousePositionOnDocument as com.sun.star.awt.Point
  Dim aPosition As New com.sun.star.awt.Point
  Dim o1, o2, o3, o4, o5, o6

  REM // First get AccessibleContext of the Window of the active Frame of the Application
  o1 = StarDesktop.ActiveFrame.ContainerWindow.AccessibleContext

  REM // 7th AC of o1 is the StatusBar at the bottom;
  o2 = o1.GetAccessibleChild(6).AccessibleContext

  REM // 2nd AC of o2 is the Position + Size of the Selection (e.g: "10,95 / 14,980,00 x 0,00") 
  o3 = o2.GetAccessibleChild(1)
  o4 = o3.GetText()

  REM // Taking out only the coordinates from o4
  REM // TODO: Check for negatives (longer)
  o5 = LEFT(o4, 4)
  o6 = MID(o4, 8, 5)

  aPosition.X = o5
  aPosition.Y = o6

  REM // Return
  GetMousePositionOnDocument = aPosition
End Sub

注意:这个函数是在我之前的内部调用的Listener_mousePressed从上面。

希望这对其他人也有效。

我是怎么找到的?

我花了很多时间在调试器中手动检查该组件和 Stars Desktop 的每个 Windows ApplicationContext。

如果需要其他值,这是迭代 ThisDesktop 的起点。ThisComponent.CurrentController.Frame.ComponentWindow.AccessibleContext

未来的改进

我“知道” GetAccessibleChild()-Function 的索引,因为我检查了调试器。当然有更好的方法可以到达o3并且您不应该期望每个人都具有相同的 AccessibleContext。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 OpenOffice BASIC 宏中通过鼠标单击获取文档坐标 的相关文章

  • Java中如何设置鼠标的位置?

    我正在使用 Java 进行一些 Swing GUI 工作 我认为我的问题相当简单 如何设置鼠标的位置 正如其他人所说 这可以通过使用来实现Robot mouseMove x y http java sun com javase 6 docs
  • 获取文本视图和图像视图相对于屏幕顶部的结束位置

    我有一个位图 它下面是一条时间线 作为一个例子 考虑右侧的布局FIGURE https stackoverflow com questions 17103026 canvas containing bitmap size proper ad
  • 使用position_dodge绘制geom_segment

    我有一个数据集 其中包含个人随时间的工作地点信息 更具体地说 我有关于个人在特定工作场所工作的时间间隔的信息 library tidyverse library lubridate individual A a id lt c rep A
  • Android canvas drawText 文本的 y 位置

    我正在使用 Canvas 创建一个带有一些背景和一些文本的 Drawable 该可绘制对象用作 EditText 内的复合可绘制对象 文本是通过在画布上的 drawText 绘制的 但在某些情况下 我确实对绘制文本的 y 位置存在问题 在这
  • 量角器 - 有人知道如何用鼠标右键单击元素吗?

    我知道量角器默认用鼠标左键单击元素 如何用鼠标右键单击 el click RIGHT 我会这样做 browser actions mouseMove el find perform browser actions click protrac
  • Xamarin 表单:如何复制条目值?

    我想从我的应用程序复制一个值并将其粘贴到同一应用程序的任何其他位置或应用程序外部 我已经在寻找答案这个线程 https stackoverflow com questions 3546016 how to copy data to clip
  • 修复了 div 内的非滚动页脚?

    我正在页面中央制作一个小 div 它有一个固定的页脚 但该 div 是可滚动的 根据我的说法 有两种方法可以做到这一点 Using position fixed 固定位置实际上是相对于浏览器窗口起作用的 但我想要相对于我的小 div 的位置
  • C# with Unity 3D:当用户移动鼠标时如何使相机围绕对象移动

    我正在尝试在 Unity 4 中进行 3D 观看模拟 用户可以选择一个对象并移动鼠标围绕它旋转 360 度 我已经拍摄了很多镜头来尝试让它工作 但每次都失败 任何我们将不胜感激 如果它是用 C 编写的 那就太好了 但没必要 提前致谢 这是一
  • 当父div在屏幕上不可见时,jQuery UI位置函数问题

    我在 jQuery UI Position 函数方面遇到了一个奇怪的问题 有一个父 div 大于屏幕高度 其中还有另一个小 div 我的函数告诉小 div 位于其父级的底部 当底部可见时 一切正常 但是当由于窗口大小而导致底部不可见时 位置
  • 检测画布内的鼠标单击位置

    我在尝试定义一个单击空白区域的函数时遇到了一个真正的问题 到目前为止 我已经成功地定义了单击一个对象的位置 其中有 10 个 但现在我需要一个单独的函数 以便在不单击任何对象时使用 总体思路可以在以下位置找到 http deciballs
  • 减慢鼠标速度

    关于如何在 wpf 应用程序中减慢鼠标速度的任何想法 谷歌没有拿出任何东西 这是否应该处理来自 Win32 的本机事件 SPI GETMOUSESPEED 112 十进制SPI SETMOUSESPEED 113 十进制 source ht
  • 放大/缩小或调整浏览器窗口大小时,Bootstrap Popover 显示在错误的位置

    当我通过放大或缩小来调整任何浏览器窗口的大小时 弹出窗口未更新位置并显示在错误的位置 如何在重新调整 缩放浏览器窗口时更改 Bootstrap Popover 的放置 位置 它似乎在 Bootstrap 2 2 1 中工作正常 除非我错误地
  • 在 Windows 系统上移动文件的最快方法 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想要将大约 800GB 的数据从 NTFS 存储设备移动到 FAT32 设备 两者都是外部硬盘驱动器 在 Windows 系统上 实现这
  • 带百分比的 CSS 位置

    我在另一个 div 中相对位置 div 时遇到问题 我想制作一个位于屏幕水平中间的 div 并在这个 div 中我想放置 3 个具有相同高度的其他 div 但他们所有人都应该做出反应 图片胜于雄辩 div div class row div
  • 我如何找到字符串中多个子字符串的位置(Python 3.4.3 shell)

    以下代码显示 word 在字符串中出现一次的位置 我如何更改我的代码 以便如果 单词 在字符串中出现多次 它将打印所有位置 string input Please input a sentence word input Please inp
  • iOS 复制和粘贴

    我正在创建一个应用程序 以便在我在 iOS 设备上复制某些内容时保存我复制的项目 无论如何 我是否可以创建一个事件 以便每当我从 iOS 设备上的任何应用程序复制某些内容时 它都会将其保存到我的应用程序中 我希望它在我复制文本时触发 以便将
  • 如何从主体上的 onClick 事件获取鼠标单击的绝对位置?

    我试图获取鼠标单击相对于浏览器 主体的绝对位置 顶部和左侧 not主体内的任何父元素 我有一个绑定到 body 的侦听器 但 e pageX 和 e pageY 为我提供了相对于 div 的位置 请注意 我可以利用 jQuery 和 YUI
  • 使用Linux虚拟鼠标驱动

    我正在尝试实施一个虚拟鼠标驱动程序根据基本 Linux 设备驱动程序书 有一个用户空间应用程序 它生成坐标以及内核模块 See 虚拟鼠标驱动程序和用户空间应用程序代码 http www embeddedlinux org cn Essent
  • 在视口中保留绝对定位的元素(jquery)

    我现在正在开发一个带有很多工具提示的网站 我想确保工具提示始终完全显示在视口中 我知道有工具提示插件 但它们对我不起作用 因为工具提示是通过 css 完成的 而且我不能全部更改 任何想要获得工具提示的元素都会被赋予一个position re
  • JavaFX中如何获取鼠标位置?

    我是java fx 的初学者 如何在 JavaFX 中获取鼠标在 x 和 y 中的位置 我尝试使用 AWTMouseInfo 也导入了它 但它不起作用 我还在 Ensembles 中看到了它的代码 在 高级阶段 拖动球窗口 这就是我需要做的

随机推荐