AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Zweiten Klick von Doubleklick verhindern / ignorieren

Zweiten Klick von Doubleklick verhindern / ignorieren

Ein Thema von Getox · begonnen am 8. Jan 2020 · letzter Beitrag vom 10. Jan 2020
Antwort Antwort
Seite 3 von 3     123
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
821 Beiträge
 
Delphi 6 Professional
 
#21

AW: Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 9. Jan 2020, 13:41
Hmm..

eine Alternative:

Das neue Formular NICHT im OnClick des Buttons erzeugen und Anzeigen!

Im OnClick ein PostMessage mit einer eigenen Message-ID an das aktuelle Form-Handle schicken. Und dann erst im MessageHandler-Funktion das neue Formular erzeugen und anzeigen.

Da die Message des PostMessage ans Ende der Messages gepackt wird und mit der Abarbeitung der vorherigen Messages weiter gemacht wird, werden zunächst noch alle anderen Messages (u.a. DblClick) abgearbeitet und dann erst deine Form-Message für das neue Formular.
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
162 Beiträge
 
Delphi 10.3 Rio
 
#22

AW: Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 9. Jan 2020, 13:58
Das ändert so ziemlich gar nichts.

Es geht sich ja nicht direkt um den Doppelklick ansich.
Mit einer eigenen Windows-Nachricht verlagert sich das Problem nur. Trotzdem wird der zweite Klick auf dem neuen Formular ausgeführt.
Chris
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)
Online

Registriert seit: 29. Mai 2002
37.444 Beiträge
 
Delphi 2006 Professional
 
#23

AW: Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 9. Jan 2020, 14:23
Also einfach die Checkbox etwas anders platzieren im zweiten Formular, halte ich auch für die einfachste und beste Lösung. Besser als das Gefrickel mit Timern, Sleep und dem verbiegen von irgendwelchen Nachricht. Warum einfach, wenn es kompliziert geht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
562 Beiträge
 
Delphi 10.3 Rio
 
#24

AW: Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 9. Jan 2020, 21:38
[QUOTE=himitsu;1454748]
Es gibt auch die Möglichkeit die Maus zu verschieben.

z.B. kann man im Windows eine Funktion aktivieren, wo bei Dialogen die Maus direkt auf den Default-Button verschoben wird. (aber schnell wieder aus, denn das machte mich voll wuschig).
Und es gibt SetMousePos. Evtl. einfach temporär damit den Mauscursor irgendwo hin schicken.

Ich nutze das immer mit der aktuellen Mausposition wenn ich die Zeigerform ändern will, Windows das aber nicht gleich übernimmt.
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: Region Bern CH
338 Beiträge
 
Delphi 10.3 Rio
 
#25

AW: Zweiten Klick von Doubleklick verhindern / ignorieren

  Alt 10. Jan 2020, 09:37
Knall doch ein TApplicationEvents auf dein Hauptformular.

Dann kannst du die Zeit der Mausklicks auswerten:

Wenn du in deiner Applikation nach einem Mauslinks-Klick auf ein Element während einer gewissen Zeit (im Beispiel unten 500ms) einen zweiten Mauslinks-Klick auf ein anderes Element verhindern willst, dann könntest du dies so tun:

Delphi-Quellcode:
var lmt : Cardinal;
    lhwnd : HWND;

procedure TForm175.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if Msg.message = WM_LBUTTONDOWN then
  begin
    if Msg.hwnd <> lhwnd then
    begin
      if Msg.time - lmt <= 500 then handled := true;
    end;

    lmt := Msg.time;
    lhwnd := Msg.hwnd;
  end;
end;
Wenn du in deiner Applikation nur für deinen Spezialfall diese Klicks verhindern willst, dann verwende die Handles der beteiligten Elemente.

Und wenn du Mauslinks Klicks ignorieren willst, welche während der Verarbeitung von irgendwas getätigt worden sind, dann merkst du dir für dieses Intervall I die Start- und Endezeit (GetTickCount) und prüfst in ApplicationEvents1Message ob die Msg.time in I liegt.

Wenn du unter Umständen generell alle Mausevents ignorieren willst, dann prüfe ob ( Msg.message >= WM_MOUSEFIRST ) and ( Msg.message <= WM_MOUSELAST ).


Message Queues
Michael Gasser
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf