[gelöst] Wie funktioniert _mouseReleased ?
Verfasst: Mi, 23.01.2013 19:18
Folgende Makros habe ich geschrieben:
Nur wenn ich "if Anzahl = 1 then mSubForSingleClick" lahm lege, kommt die eine Zeile davor geschriebene Bedingung "if Anzahl = 2" zum Tragen.
Warum?
Meine Vermutung ist es, daß die Funktion MyApp_mouseReleased(oEvt) bei Doppelcklick zweimal durchlaufen wird. Ich vermute, daß beim ersten Durchlauf „Anzahl“ den Wert 1 zugewiesen bekommt und, wenn "if Anzahl = 1 then mSubForSingleClick" vorhanden ist und mSubForSingleClick auferufen wird, die widerstpensige Maus nach sehr kurzem Warten keine Lust mehr verspürt, das Event nochmals auszulösen.
Habe ich richtig geraten oder sind es Hirngespinste?
Mit eigenwilligen Mäusen kenne ich mich nicht gut aus.
Wie kann ich der Anweisung "if Anzahl = 1 then mSubForSingleClick" mitteilen, daß sie ein wenig – wie lange? - warten soll, damit das Mäuschen eventuell das Event ein zweites mal auslöst und mich nicht im Stich läßt?
Code: Alles auswählen
REM ***** BASIC *****
'Option Explicit
Global oDocView As Object
Global oMouseClickHandler As Object
Global Anzahl as string, AnzahlAlt as String
Sub RegisterMouseClickHandler
oDocView = ThisComponent.currentController
oMouseClickHandler = _
createUnoListener("MyApp_", "com.sun.star.awt.XMouseClickHandler")
' writedbginfo oMouseClickHandler
oDocView.addMouseClickHandler(oMouseClickHandler)
End Sub
Sub UnregisterMouseClickHandler
on error resume next
oDocView.removeMouseClickHandler(oMouseClickHandler)
on error goto 0
End Sub
sub CheckBox1
Dim LightRed as Long, Green5 as Long, a as Boolean, b as String, c as String, d as Long
LightRed = 16711680
Green5 = 44544
a = ThisComponent.DrawPage.Forms.getByIndex(0).GetByName("Check Box 1").State
if a then
RegisterMouseClickHandler
b = "registered"
c = "Click here to unregister the page."
d = Green5
else
UnregisterMouseClickHandler
b = "unregistered"
c = "Click here to register the page."
d = LightRed
end if
ThisComponent.DrawPage.Forms.getByIndex(0).GetByName("Check Box 1").Label = b
ThisComponent.DrawPage.Forms.getByIndex(0).GetByName("Check Box 1").helptext = c
ThisComponent.DrawPage.Forms.getByIndex(0).GetByName("Check Box 1").backgroundcolor = d
end sub
Sub MyApp_disposing(oEvt)
End Sub
Function MyApp_mousePressed(oEvt) As Boolean
MyApp_mousePressed = False
End Function
Function MyApp_mouseReleased(oEvt) As Boolean
Dim Anzahl
Anzahl = oEvt.ClickCount
ThisComponent.DrawPage.Forms.getByIndex(0).GetByName("LabelAnzahl").Label = "ClickCount = " & Anzahl
if Anzahl = 2 then mSubForDoubleClick
if Anzahl = 1 then mSubForSingleClick
MyApp_mouseReleased = False
End Function
sub mSubForSingleClick
print "mSubForSingleClick"
end sub
sub mSubForDoubleClick
print "mSubForDoubleClick"
end sub
Warum?
Meine Vermutung ist es, daß die Funktion MyApp_mouseReleased(oEvt) bei Doppelcklick zweimal durchlaufen wird. Ich vermute, daß beim ersten Durchlauf „Anzahl“ den Wert 1 zugewiesen bekommt und, wenn "if Anzahl = 1 then mSubForSingleClick" vorhanden ist und mSubForSingleClick auferufen wird, die widerstpensige Maus nach sehr kurzem Warten keine Lust mehr verspürt, das Event nochmals auszulösen.
Habe ich richtig geraten oder sind es Hirngespinste?
Mit eigenwilligen Mäusen kenne ich mich nicht gut aus.
Wie kann ich der Anweisung "if Anzahl = 1 then mSubForSingleClick" mitteilen, daß sie ein wenig – wie lange? - warten soll, damit das Mäuschen eventuell das Event ein zweites mal auslöst und mich nicht im Stich läßt?