So, nun habe ich einen anderen Weg nach Rom eingeschlagen - natürlich auch DANK MARCEL
Die Geschichte mit dem MouseClickHandler ist mir zu instabil - er lässt sich nicht mehr deaktivieren (jedenfalls nicht von mir - vielleicht mag er mich nicht

).
Das führt jedenfalls zu recht unerwünschten Ergebnissen von Endlosschleifen (die Routinen werden immer wieder durchgeführt, obwohl gar kein Befehl dafür da ist) bis zum Totalabsturz von OO. Das Einfügen eines WAIT, um OO zum Deaktivieren des Listeners Zeit zu geben, brachte nichts - hilft nur beim ersten Mal.
Also habe ich ein grafisches Kontrollfeld verwendet, in dem ich klicken und Positionen abfragen kann. Mit dem angehängten Code läuft das auch stabil.
Eine ständige Anzeige der Mausposition während ihrer Bewegung habe ich (bis jetzt) nicht hinbekommen, evtl. bei Makrozuordnung zum Darüberfahren und dann Eintrag aktualisieren - mal sehen, hier nicht aktuell...
Und nun zum ABER:
Die Routine liefert mir bzw. der nachfolgenden Routine die Pixel-Abstände von links und oben bezogen auf das Kontrollfeld. An dieser Position soll dann eine Grafik eingefügt werden und die Koordinaten werden in der Tabelle noch verwendet.
Die Pixel werden in mm umgerechnet, die Grafik anhand der Hundertstel-mm positioniert.
Und da ist ein Haken:
Wenn das Kontrollfeld auf Pos. 0/0 eingefügt ist - also linke, obere Ecke befindet sich links oben in der Tabelle -, müssten die eingelesenen und umgerechneten Koordinaten die Grafik mit der linken oberen Ecke an der Position des Mauszeigers positionieren. Doch das geschieht nicht.
Es gibt Abweichungen sowohl bei x als auch bei y, die sich mit dem Abstand zu Null verändern - also nicht immer die gleiche Differenz, woraus ich geschlossen hätte, dass ein Rahmen des Kontrollfeldes Ursache sein könnte. Doch je weiter der Einfügepunkt von Null entfernt ist, um so größer ist die Differenz (negativ).
Ich habe nun die Umrechnung in mm in Verdacht. Allerdings ist die Differenz bei y>30cm bereits bei mehreren mm.
Wo bin ich da falsch abgebogen ?
Kann mir da jemand vielleicht sagen, warum das so ist ? Das wäre super !
Ach so: Das alles in Calc OO 3.0.
Vielen Dank !
Code: Alles auswählen
Sub Zeiger (Event As Object)
'Positionen in Pixel bei Mausklick
If Event.Buttons AND com.sun.star.awt.MouseButton.LEFT Then
posx=Event.X
posy=Event.Y
End If
'Werte in Hundertstel-mm umrechnen
kox=clng(posx)*0.017636684*TwipsPerPixelX()*100
koy=clng(posy)*0.017636684*TwipsPerPixelY()*100
'Bild einfügen an der ermittelten Position
Dim Page As Object
Dim Bild As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Doc = ThisComponent
mysheet = Doc.Sheets(0)
Page = mysheet.drawPage
Bild = Doc.createInstance("com.sun.star.drawing.GraphicObjectShape")
Size.Width = 500
Size.Height = 500
Bild.Size = Size
Point.x = kox
Point.y = koy
Bild.Position = Point
Bild.GraphicURL = "file:///C:/Tests/murks.png"
Bild.AdjustBlue = 0
Bild.AdjustGreen = 0
Bild.AdjustBlue = 0
Bild.AdjustContrast = 0
Bild.AdjustLuminance = 0
Bild.Transparency = 0
Bild.Name = "Test01"
Bild.GraphicColorMode = com.sun.star.drawing.ColorMode.STANDARD
Page.add(Bild)
End Sub
So, nun habe ich einen anderen Weg nach Rom eingeschlagen - natürlich auch DANK MARCEL :D
Die Geschichte mit dem MouseClickHandler ist mir zu instabil - er lässt sich nicht mehr deaktivieren (jedenfalls nicht von mir - vielleicht mag er mich nicht :( ).
Das führt jedenfalls zu recht unerwünschten Ergebnissen von Endlosschleifen (die Routinen werden immer wieder durchgeführt, obwohl gar kein Befehl dafür da ist) bis zum Totalabsturz von OO. Das Einfügen eines WAIT, um OO zum Deaktivieren des Listeners Zeit zu geben, brachte nichts - hilft nur beim ersten Mal.
Also habe ich ein grafisches Kontrollfeld verwendet, in dem ich klicken und Positionen abfragen kann. Mit dem angehängten Code läuft das auch stabil.
Eine ständige Anzeige der Mausposition während ihrer Bewegung habe ich (bis jetzt) nicht hinbekommen, evtl. bei Makrozuordnung zum Darüberfahren und dann Eintrag aktualisieren - mal sehen, hier nicht aktuell...
Und nun zum ABER:
Die Routine liefert mir bzw. der nachfolgenden Routine die Pixel-Abstände von links und oben bezogen auf das Kontrollfeld. An dieser Position soll dann eine Grafik eingefügt werden und die Koordinaten werden in der Tabelle noch verwendet.
Die Pixel werden in mm umgerechnet, die Grafik anhand der Hundertstel-mm positioniert.
Und da ist ein Haken:
Wenn das Kontrollfeld auf Pos. 0/0 eingefügt ist - also linke, obere Ecke befindet sich links oben in der Tabelle -, müssten die eingelesenen und umgerechneten Koordinaten die Grafik mit der linken oberen Ecke an der Position des Mauszeigers positionieren. Doch das geschieht nicht.
Es gibt Abweichungen sowohl bei x als auch bei y, die sich mit dem Abstand zu Null verändern - also nicht immer die gleiche Differenz, woraus ich geschlossen hätte, dass ein Rahmen des Kontrollfeldes Ursache sein könnte. Doch je weiter der Einfügepunkt von Null entfernt ist, um so größer ist die Differenz (negativ).
Ich habe nun die Umrechnung in mm in Verdacht. Allerdings ist die Differenz bei y>30cm bereits bei mehreren mm.
Wo bin ich da falsch abgebogen ?
Kann mir da jemand vielleicht sagen, warum das so ist ? Das wäre super !
Ach so: Das alles in Calc OO 3.0.
Vielen Dank !
[code]Sub Zeiger (Event As Object)
'Positionen in Pixel bei Mausklick
If Event.Buttons AND com.sun.star.awt.MouseButton.LEFT Then
posx=Event.X
posy=Event.Y
End If
'Werte in Hundertstel-mm umrechnen
kox=clng(posx)*0.017636684*TwipsPerPixelX()*100
koy=clng(posy)*0.017636684*TwipsPerPixelY()*100
'Bild einfügen an der ermittelten Position
Dim Page As Object
Dim Bild As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Doc = ThisComponent
mysheet = Doc.Sheets(0)
Page = mysheet.drawPage
Bild = Doc.createInstance("com.sun.star.drawing.GraphicObjectShape")
Size.Width = 500
Size.Height = 500
Bild.Size = Size
Point.x = kox
Point.y = koy
Bild.Position = Point
Bild.GraphicURL = "file:///C:/Tests/murks.png"
Bild.AdjustBlue = 0
Bild.AdjustGreen = 0
Bild.AdjustBlue = 0
Bild.AdjustContrast = 0
Bild.AdjustLuminance = 0
Bild.Transparency = 0
Bild.Name = "Test01"
Bild.GraphicColorMode = com.sun.star.drawing.ColorMode.STANDARD
Page.add(Bild)
End Sub
[/code]