Entwickler-Ecke
Windows API - Doppelklick?
matze.de - Mo 25.07.05 12:24
Titel: Doppelklick?
Hi,
Ich versuche die Ganze Zeit schon einen Doppelklick bei mir im Programm zu implementieren. Die Struktur sieht bei mir so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| Function WndProc(HWND: HWND; uMsg: UINT; wParam: wParam; lParam: lParam): LRESULT; Stdcall; Begin Result := 0; Case uMsg Of WM_COMMAND: Begin If HiWord(wParam) = BN_CLICKED Then Begin End; If HiWord(wParam) = BN_DOUBLECLICKED Then Begin End; End; End Else Result := DefWindowProc(HWND, uMsg, wParam, lParam); End; End; |
Jetzt geht der bei nem Doppelklick aber in den BN_CLICKED Zweig, was ja auch logisch ist, denn nen Doppelklick sind ja nur 2 aufeinanderfolgende Klicks. Jetzt von mir die Frage: Wie realisiere ich einen Doppelklick?
mfg matze
jaenicke - Mo 25.07.05 12:36
Es gibt Mausbotschaften für Klick und Doppelklick. Dort wird allerdings der erste Klick wohl auch als Einzelklick gegeben und ZUSÄTZLICH als Doppelklick.
Möglichkeit: Mit GetSystemMetrics die Doppelklickzeit herausfinden und nach einem Klick diese Zeit warten, ob ein weiterer Klick folgt.
Overdosed - Mi 27.07.05 13:49
Habs jetzt nicht ausprobiert, aber sollte es so oder ählich nicht funktionieren ?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| Function WndProc(HWND: HWND; uMsg: UINT; wParam: wParam; lParam: lParam): LRESULT; Stdcall; Begin Result := 0; Case uMsg Of WM_COMMAND: Begin If HiWord(wParam) = BN_DOUBLECLICKED Then Begin End; If HiWord(wParam) = BN_CLICKED Then Begin End; End; End Else Result := DefWindowProc(HWND, uMsg, wParam, lParam); End; End; |
Sprich, die zwei IF's in ihrer Reihenfolge tauschen ?
Dann kann im Begin/End des BN_DOUBLECLICKED die Funktion beendet werden, ohne dass er je in BN_CLICKED springt.
Gruss, Perry
Moderiert von
Motzi: Code- durch Delphi-Tags ersetzt.
hallo - Mi 27.07.05 13:54
Das wird nicht funktionieren...
Zuerst wird der normale Klick ausgelöst, und da weiß der noch nix vom Doppelclick!
Overdosed - Mi 27.07.05 14:08
Also willst du mir damit sagen, dass ein Doppelklick nicht abfangbar ist, weil ja sowieso immer nur der erste klick ausgewertet wird ?
Muss doch irgendwie gehen ?!
Overdosed - Mi 27.07.05 14:37
So, hab also nochmal schnell ein bisschen rumgespielt und hab die Unterscheidung zwischen dem Doppel- und dem Einzelklick nicht hinbekommen.
Kann zwar auf den Doppelklick reagieren, aber nur bei "ausgeschaltetem" Klick.
Wichtig ist aber der Style des Buttons, BN_DOUBLECLICKED funktioniert nur mit BS_OWNERDRAW or BS_RADIOBUTTON, dran denken und die WIN-SDK-Hilfe befragen.
matze.de - Mi 27.07.05 16:06
Ich hatte nun das Problem in der Listbox, aber das is gelöst, da die ListBox ne eigene Message sendet bei nem Doppelklick auf einen String. Aber wenn man nun auf die Form nen Doppelklick machen will, das bleibt immernoch offen....
mfg matze
jaenicke - Mi 27.07.05 16:24
Warum benutzt du eigentlich nicht die Ereignisse des Formulars?
Es gibt doch onDblClick und onClick!
matze.de - Mi 27.07.05 16:36
:D jaenicke Wir sprechen hier von nonVCL, da is das ned ganz so einfach.
mfg matze
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!