マウスでクリックまたはホバーした位置(キーを使用してアクティブ化する場合)に、何か([CTRL + V]など)を貼り付けたい(できれば画像、形状)。クリックしたドキュメント(X、Y)の位置を取得する方法がわかりません。
(Apache OpenOffice、SDraw-Document、OpenOffice BASICマクロ)
注:com.sun.star.awt.XMouseClickHandler
与えられたものoEvent
が私にクリックしたドキュメントのX + Yを与えた場合、aのようなものは完璧でしょう。(たぶんあなたは「アクティブ化」する方法を知っていますPopupTrigger
か?(com.sun.star.awt.MouseEvent
))
上記XMouseClickHandler
を使用してX + Yを取得してみました。残念ながら、X + Yはウィンドウの相対位置を指し、図形やテキストがドキュメント上で実際に持つ位置ではありません。
実行:マイサブ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
私のすべての情報は、これまでの公式の参考文献/ドキュメントからのものです。すべての検索で役立つものが見つからなかったためです。
前もって感謝します。
私はついに、(ドキュメントに対して)マウスクリックの正確な座標を取得する方法を見つけました。下部のステータスバーから情報を取得できました。ステータスバーには通常、座標が表示されます(私にとってはセンチメートル単位)。
位置(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
上から呼び出されます。
うまくいけば、これは他の人にもうまくいくでしょう。
ThisComponentとStarDesktopのウィンドウのすべてのApplicationContextをデバッガーで手動でチェックすることに非常に多くの時間を費やしました。
これは、他の値が必要な場合にThisDesktopを反復処理するための開始点です。 ThisComponent.CurrentController.Frame.ComponentWindow.AccessibleContext
デバッガーを調べたので、GetAccessibleChild()関数のインデックスを「知っています」。到達するためのより良い方法は確かo3
にあり、すべての人が同じAccessibleContextを持っていると期待すべきではありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加