Seite 1 von 1

[gelöst] Doppel-Click Event im Gridcontrol

Verfasst: Di 22. Okt 2019, 12:36
von MaddinR
Hi Leute

In der Hoffnung auf Eure Unterstützung bei der Lösung eines neuen Problems wende ich mich noch mal hier ans Forum. Hier ist ein neues Problem mit dem Releasewechsel auf 6.3 aufgetaucht, und zwar in einem Base-Formular.

Das Formular enthält ein einfaches Grid-Control und den folgenden Eventhandler-Verweis in diesem Control. Also, Steuerelement-Eigenschaften -> Ereignisse:
Maustaste losgelassen = Standard.UpdateSetNormNames.OnDoppelClick (document, Basic)

Der Eventhandler sieht so aus:

Code: Alles auswählen

Sub OnDoppelClick(oEvt)
   if (oEvt.ClickCount = 2) then
'      MsgBox "Doppelclick" 
       GetNormName(EH_DBLCLICK)
   endif
End Sub
Bei einem Single-Click passiert korrekterweise nix, bei einem Doppelklick wird GetNormName() allerdings immer 2 mal aufgerufen... mit natürlich fehlerhaften Auswirkungen. Ich kann das mangels Routine auch nicht richtig debuggen, mit aktiver Messagebox ist die Click-Verarbeitung natürlich unterbrochen und der Fehler passiert nicht , ebenso wenn ich mir ein xray-Fenster anschauen wollte. Der Fehler mit 2-fachen Aufruf passiert nur, wenn das Programm ununterbrochen durchläuft. Hat vielleicht jemand eine Idee, wie man das lösen kann? :roll:

mfg, Martin

Re: Doppel-Click Event im Gridcontrol

Verfasst: Di 22. Okt 2019, 20:17
von gogo
Eigentlich dürfte das nicht passieren, denn in einer Klick-Folge taucht oEvt.ClickCount = 2 nur beim zweiten Klick auf. Und beim ersten MouseButtonUp ist immer oEvt.ClickCount = 1.

Versuch' bezüglich log das File im Anhang.
Wenn Du die Sub "Main" durch den Code unten ersetzt, dann wird nur im Doppelklickfall die Box angezeigt (bei der Lösung >= käme auch bei 3-fach-Klicks die Box ...

Code: Alles auswählen

Sub Main(oEvent)
	logTxt = oEvent.Source.Model.parent.getbyname("Log")
	logTxt.setString(logTxt.string & CHR$(10) & now & " " & oEvent.ClickCount & " " & gCC)
	select case oEvent.ClickCount
	case 2
		msgbox "DOPPELKLICK!"
		logTxt.setString(logTxt.string & " >> " & oEvent.ClickCount & " " & "BINGO + reset")
	case else
		logTxt.setString(logTxt.string & " >> " & oEvent.ClickCount & " " & "             ")
	end select
	logTxt.setString(logTxt.string & " >> " & oEvent.ClickCount & " " & gCC)
End Sub

Re: Doppel-Click Event im Gridcontrol

Verfasst: So 27. Okt 2019, 11:07
von MaddinR
Moin

Nachdem mir das den ganzen Tag keine Ruhe gelassen hat, habe ich nach Stunden selber eine Lösung gefunden ... und leider darüber vergessen, dass hier mitzuteilen.... :roll:

Der Eventhandler sieht nun so aus... was hier durch den Umstand, dass ich kein unsigned long definieren kann, etwas verwirrend aussieht... wegen minus 500.... ging aber leider nicht anders. Und wie es aussieht, ist das wohl ein Timing-Problem, eines das es vorher nicht gab. Aber egal... jetzt läufts erst mal.

Code: Alles auswählen

Sub OnDoppelClick(oEvt)
    if (oEvt.ClickCount = 2) then
'        MsgBox "Doppelclick" 

        ticksnow = -GetSystemTicks()
        
        if ticksnow < TicksLast or TicksLast = 0 then
            TicksLast = ticksnow - 500
            GetNormName(EH_DBLCLICK)
        endif
    endif
End Sub