Entwickler-Ecke

Windows API - Doppelklick verweigern, alles als Klick


Kroko - Di 27.03.07 13:28
Titel: Doppelklick verweigern, alles als Klick
Kann man irgendwie den Puffer bzw. das Intervall für eine Doppelklick so manipulieren, dass prakatisch auf meiner Form jeder Doppellick als zwei Klicks ankommt und es keinen Doppelklick mehr gibt?


IngoD7 - Di 27.03.07 14:50

Windowsweit mit SetDoubleClickTime.

Nur für die eigene Anwendung weiß ich jetzt nicht.

Vielleicht kannst du aber ja auch den Doppelklick in Application.OnMessage abfangen ...?


uwewo - Di 27.03.07 15:51

Vielleicht brauche ich dazu ein konkretes Beispiel, aber kannst Du nicht einfach


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormDblClick(Sender: TObject);
begin
  FormClick(Sender);
end;


?????


Jakob Schöttl - Di 27.03.07 16:45

Zitat:
...f meiner Form jeder Doppellick als zwei Klicks ankommt ...


dann müsste es heißen:

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.FormDblClick(Sender: TObject);
begin
  FormClick(Sender);
  FormClick(Sender);
end;


was einfacheres fällt mir auch nicht ein leider...


JayEff - Di 27.03.07 17:08

Bei jedem onDblClick-Ereignis kommt der erste Klick als normales onClick an, das heißt, Jakobs wäre Doppelt-gemoppelt :)
(habs grad ausprobiert...)


Robinator - Di 27.03.07 17:10

user profile iconJayEff hat folgendes geschrieben:
Bei jedem onDblClick-Ereignis kommt der erste Klick als normales onClick an, das heißt, Jakobs wäre Doppelt-gemoppelt :)
(habs grad ausprobiert...)


Hmm, das sollte aber eigentlich nicht so sein, zumindest nach meinem Verständniss

gruss, rob


Jakob Schöttl - Di 27.03.07 17:11

oh ja, hast recht! ich dachte doppelklick würde von Windows automatisch von einfachem Click unterschieden.


JayEff - Di 27.03.07 17:12


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var i: integer;
{...}
Procedure TForm1.FormDblClick(Sender: TObject);
Begin
    inc(i, 2);
    Label1.Caption := IntToStr(i);
End;

Procedure TForm1.FormClick(Sender: TObject);
Begin
    inc(i);
    Label1.Caption := IntToStr(i);
End;

Bei mir wird über einen Doppelklick i um 3 erhöht: einmal durch einen einzelnen, und einmal durch den doppelten Klick :gruebel:


Jakob Schöttl - Di 27.03.07 17:16

ja, hast schon recht...
ich habs zwar mit showmessage ausprobiert, und da geht auch beim einfachen klick schon das fenster auf


Robinator - Di 27.03.07 17:19

Ich dachte, dass, sobald ein OnDblClick event zugewiesen ist, das OnClick event mit Latenz feuert und zwar nur dann, wenn im festgelegten Interval kein weiterer Klick stattgefunden hat. Es kann natürlich sein, dass ich mich irre (wenn ich mir dein Beispiel angucke, liegt es sogar ziehmlich nahe, dass ich mich Irre ;) )

gruß


Motzi - Di 27.03.07 21:04

user profile iconRobinator hat folgendes geschrieben:
Ich dachte, dass, sobald ein OnDblClick event zugewiesen ist, das OnClick event mit Latenz feuert und zwar nur dann, wenn im festgelegten Interval kein weiterer Klick stattgefunden hat. Es kann natürlich sein, dass ich mich irre (wenn ich mir dein Beispiel angucke, liegt es sogar ziehmlich nahe, dass ich mich Irre ;) )

Dem ist nicht so - auch wenn es auf den ersten Blick naheliegend erscheint. Allerdings würde dann jeder einzelne Klick (je nach Einstellung) mit recht großer Verzögerung weitergegeben werden, was dann auch wieder ziemlich blöd wäre.. ;)

Gruß, Motzi