Mauskoordinaten auslesen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Mauskoordinaten auslesen

Re: Mauskoordinaten auslesen

von Newbiebuh2010 » Fr, 14.05.2010 21:59

Jawoll, mein Hintergedanke hat geklappt :D

Mauskoordinaten während der Bewegung anzeigen (Voraussetzung: innerhalb eines Kontrollfeldes):

Code: Alles auswählen

Sub Zeiger(Event As Object)
Dim Msg As String
Msg = "Keys: "
If Event.Buttons AND com.sun.star.awt.MouseButton.LEFT Then
Msg = Msg & "LEFT "
End If
If Event.Buttons AND com.sun.star.awt.MouseButton.RIGHT Then
Msg = Msg & "RIGHT "
End If
If Event.Buttons AND com.sun.star.awt.MouseButton.MIDDLE Then
Msg = Msg & "MIDDLE "
End If
Msg = Msg & Chr(13) & "Position: "
Msg = Msg & Event.X & "/" & Event.Y
'MsgBox Msg
posx=Event.X
posy=Event.Y

'x/y in die Tabelle eintragen
blatt=thiscomponent.sheets.getbyname("Tabelle2")
azelle=blatt.getcellrangebyname("K2")
azelle.string=posx
azelle=blatt.getcellrangebyname("K3")
azelle.string=posy

Ende:
End Sub

Diesen Code dem Kontrollfeld zuordnen, aber für MAUSBEWEGUNG.
Und in der Tabelle ändern sich durch Zauberhand die Zahlen :lol:

Re: Mauskoordinaten auslesen

von Newbiebuh2010 » Fr, 14.05.2010 17:41

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: 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

Re: Mauskoordinaten auslesen

von marcel_at_work » Mi, 12.05.2010 20:09

Das will ich doch schwer hoffen, dass du das Ergebnis veröffentlichst. Wir wollen ja schließlich ALLE etwas lernen! :D

Auf der Site von "Sun Microsystems" kann man sich übrigens diverse deutsche Referenzen downloaden und findet in der Regel so ziemlich jede Funktion samt ausführlicher Beschreibung.

Lg, Marci

Re: Mauskoordinaten auslesen

von Newbiebuh2010 » Mi, 12.05.2010 18:44

Hi, marcel !

Ich danke dir vielmals, das hilft schon etwas weiter !

Außerdem werde ich wohl mal wieder mehr lesen - kann ja helfen :lol:
Im Ernst: Das SO-Handbuch hatte ich bis eben gar nicht, aber nun mal heruntergeladen. Hätte ich ja auch mal vorher drauf kommen können.

Ich werde mal noch herum probieren; wenn ich eine endgültige Lösung finden sollte, setze ich die dann hier mal ein.

Viele Grüße

Re: Mauskoordinaten auslesen

von marcel_at_work » Mi, 12.05.2010 17:44

Hallo,

jepp, zu dem Thema war irgendwie noch nix im Forum. Aber man kann ja immer etwas ändern... :D

Ich bin mir nicht sicher, aber vielleicht hilft dir das hier weiter (nachzulesen in "starBasic-Programmierhandbuch.pdf" (s.Google)):
Maus-Ereignisse

StarOffice Basic erkennt folgendeMausereignisse:

■ Mouse moved: der Anwender bewegt dieMaus.
■ Mouse moved while key pressed: der Anwender zieht dieMaus bei gedrückter, beliebiger
Maustaste.
■ Mouse button pressed: der Anwender drückt eineMaustaste.
■ Mouse button released: der Anwender lässt eineMaustaste los.
■ Mouse outside: der Anwender bewegt dieMaus aus dem aktuellen Fenster heraus.
Der Aufbau des verknüpften Ereignisobjekts wird in der Struktur
com.sun.star.awt.MouseEvent definiert, die folgende Informationen bereitstellt:
■ Buttons (Short): gedrückte Taste (eine oder mehrere Konstanten gemäß
com.sun.star.awt.MouseButton).
■ X (Long): X-Koordinate derMaus, gemessen in Pixel von der linken oberen Ecke des
Steuerelements.
■ Y (Long): Y-Koordinate derMaus, gemessen in Pixel von der linken oberen Ecke des
Steuerelements.
■ ClickCount (Long): Anzahl der Klicks, die mit demMausereignis verknüpft sind (wenn
StarOffice ausreichend schnell reagieren kann, ist ClickCount auch bei einemDoppelklick
1, da nur ein Einzelereignis ausgelöst wird).

Die in com.sun.star.awt.MouseButton definierten Konstanten für dieMaustasten lauten:

■ LEFT: linkeMaustaste.
■ RIGHT: rechteMaustaste.
■ MIDDLE: mittlereMaustaste.

Code: Alles auswählen

Das folgende Beispiel gibt die Position derMaus sowie dieMaustaste, die gedrückt wurde, aus:

Sub MouseUp(Event As Object)
Dim Msg As String
Msg = "Keys: "
If Event.Buttons AND com.sun.star.awt.MouseButton.LEFT Then
Msg = Msg & "LEFT "
End If
If Event.Buttons AND com.sun.star.awt.MouseButton.RIGHT Then
Msg = Msg & "RIGHT "
End If
If Event.Buttons AND com.sun.star.awt.MouseButton.MIDDLE Then
Msg = Msg & "MIDDLE "
End If
Msg = Msg & Chr(13) & "Position: "
Msg = Msg & Event.X & "/" & Event.Y
MsgBox Msg
End Sub
Hinweis – Die VBA-Ereignisse Click und Doubleclick stehen in StarOffice Basic nicht zur
Verfügung. Verwenden Sie stattdessen anstelle des Click-Ereignisses das StarOffice
Basic-Ereignis MouseUp und bilden Sie das Doubleclick-Ereignis durch eine Änderung der
Anwendungslogik nach.
Lg, Marci

Re: Mauskoordinaten auslesen

von Newbiebuh2010 » Mi, 12.05.2010 11:13

Hi,
hatte beim letzten Mal verdödelt, den Code als Code einzufügen :shock:

Weiß da keiner Rat, wie man die Position des Mauszeigers ermitteln kann ?
Oder vielleicht einen interessanten Link ?

Wäre super, wenn jemand helfen könnte !

Viele Grüße

Nach oben