Italia
Fonte/ Codesnippets

Doppelklick Feststellen Maus

 

Georg
Hovenbitzer
Hallo zusammen,

es ist ir ja echt peinlich dies zu fragen aber ich komme nicht dahinter.

Ich möchte feststellen wenn man einen Doppelklick, sei es links oder rechts, auf ein deaktiviertes Editfeld macht und dies auf einem Hauptfenster was mit WindowStyle 8 + 16 + 512 + 1024 erstellt wurde.

Kann mir da jemand helfen ?
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
19.05.2006  
 




Frank
Abbing
Du musst die Message WM_LBUTTONDBLCLK, bzw. WM_RBUTTONDBLCLK auslesen. Beim mittleren Mausklick geht es mittels WM_MBUTTONDBLCLK, sofern dieser vorhanden ist.
 
19.05.2006  
 




Georg
Hovenbitzer
Hallo Frank,

dies habe ich versucht, aber die kommen nicht an.
Ich habe irgendwo mal gelesen, dass nicht alle Controls diese Message senden und bei mir ist es ja ein deaktiviertes Edit Feld.
Hast du vielleicht ein Stück Code zum Testen per mich ?
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
19.05.2006  
 



WM_NOTIFY ist nicht grundsätzlich gesetzt, das ist richtig.

Es gibt auch immer noch den Ausweg in den Fastmode. Eine eigene wProc potuto die Message abfangen.

Ich zitier aber auch mal aus dem Phorum: [...] 

Autor: Dieter Zornow 26.08.04 07:59

hallo carlo,

ich benutze folgende Routine, die unter allen Windowsversionen
sicher funktioniert.
KompilierenMarkierenSeparieren
um diese zu nutzen must die erst den focus zum Eintrag bringen
ansonsten must du erst mit linkem Klick markieren.

Viele Grüße aus Bangkok

Dieter
 
20.05.2006  
 




Frank
Abbing
Einfacher ist aber:
KompilierenMarkierenSeparieren
Du musst die Usermessages setzen, damit sie WaitInput verlassen...

Hm, Waitinput verarbeitet aber nur Messages vom Hauptfenster. Um Control-Messages zu verarbeiten, musst du sie subclassen.
 
20.05.2006  
 



Frank Abbing
Um Control-Messages zu verarbeiten, musst du sie subclassen.

Womit wir wohl beim fastmode  sind...
 
20.05.2006  
 




Frank
Abbing
Eigentlich nicht, iF. Nur wenn du das Hauptfenster subclassen willst.
 
20.05.2006  
 




Sven
Bader
Also wenn ich es mit usermessages mache wird 513 und 514 erkannt (links gedrückt/losgelassen), die Doppelklick Message wird nie erkannt.
Andere wilde Konstruktionen mit waitkey + getmessage + (%Message = 273) funktionieren auch nicht überall und sind per Programme mit anderen Abfragen unbrauchbar, weil diese dann meist nicht mehr funktionieren (habe parallel keinen Buttonklick mit wm_command mehr abfragen können)

Oder funktioniert bei euch das Beispiel?
KompilierenMarkierenSeparieren
 
01.06.2006  
 



Mit der EasyVENT.dll und Include kannste auch Kinderleicht einen Mausdoppelclick feststellen
[...] 
 
01.06.2006  
 




Frank
Abbing
Das geht ohne Dll viel leichter...
Um Doppelklicks zu empfangen muss lediglich der CS_DBLCLKS Class-Style gesetzt werden. So wie es in der API-Aiuto ja auch steht.
KompilierenMarkierenSeparieren
 
01.06.2006  
 




Sven
Bader
Damit geht es, danke

Meine bisherige Variante:
KompilierenMarkierenSeparieren
Def Key(1) !User32,GetAsyncKeyState
Def windowfrompoint(2) !USER32,WindowFromPoint
Def GetCursorPos(1) !USER32,GetCursorPos
cls
usermessages 16
Declare dbl&, dbl%,mousepos#,oldx%,oldy%
dim mousepos#,8

PROC Doppelklick

    Parameters handle&

    if (abs(key(1)>1) ) & (dbl% = 0) & (windowfrompoint(long(mousepos#,0),long(mousepos#,4)) = handle&)

        dbl& = &gettickcount+400 Doppelklickzeit
        dbl% = 1
        oldx% = long(mousepos#,0)
        oldy% = long(mousepos#,4)

    elseif (abs(key(1)<2)) & (dbl% = 1)  & (windowfrompoint(long(mousepos#,0),long(mousepos#,4)) = handle&)

        dbl% = 2
        case (&gettickcount > dbl&) : dbl% = 0

    elseif (abs(key(1)>1)) & (dbl% = 2)  & (&gettickcount < dbl&) & (windowfrompoint(long(mousepos#,0),long(mousepos#,4)) = handle&)

        if ((abs(oldx% - long(mousepos#,0))<5) & (abs(oldy% - long(mousepos#,4))<5)) Maus maximal 5 Pixel verschoben

            dbl% = 3

        else

            dbl% = 0

        endif

    elseif ((abs(key(1)>1)) & (dbl% = 2)) | (dbl% = 3)

        dbl% = 0

    endif

    return if(dbl% = 3,1,0)

EndProc

whilenot (%umessage = 16)

    waitinput
    sleep 50
    getcursorpos(mousepos#)
    case Doppelklick(%hwnd) : print Doppelklick

endwhile

dispose mousepos#
 
02.06.2006  
 




Frank
Abbing
Da würde ich die API-Variante unbedingt vorziehen, weil der User die Doppelklick-Zeit ja einstellen kann.
 
02.06.2006  
 




Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

20.471 Views

Untitledvor 0 min.
Gast.0815 vor 15 Tagen
Walter07.03.2023
H.Brill03.02.2022
RudiB.09.05.2021
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie