| |
|
|
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. |
|
|
| |
|
|
|
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 für 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 könnte 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. KompilierenMarkierenSeparierenum 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 |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
| Frank Abbing
Um Control-Messages zu verarbeiten, musst du sie subclassen. Womit wir wohl beim fastmode sind... |
|
|
| |
|
|
|
Frank Abbing | Eigentlich nicht, iF. Nur wenn du das Hauptfenster subclassen willst. |
|
|
| |
|
|
|
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 für 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 |
|
|
| |
|
|
|
| Mit der EasyVENT.dll und Include kannste auch Kinderleicht einen Mausdoppelclick feststellen [...] |
|
|
| |
|
|
|
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-Hilfe ja auch steht. KompilierenMarkierenSeparieren |
|
|
| |
|
|
|
Sven Bader | Damit geht es, danke
Meine bisherige Variante: KompilierenMarkierenSeparierenDef 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#
|
|
|
| |
|
|
|
Frank Abbing | Da würde ich die API-Variante unbedingt vorziehen, weil der User die Doppelklick-Zeit ja einstellen kann. |
|
|
| |
|
|