Announcement

Collapse
No announcement yet.

Wie kann ich den Mauspuffer leeren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie kann ich den Mauspuffer leeren

    Hallo zusammen,

    ich habe eine Delphi-Anwendung geschrieben, bei der das Problem auftritt, dass nach einem Doppelklick auf ein TSpeedbutton der hinterlegte Ablauf zwei mal durchlaufen wird. Wie kann ich den Mauspuffer leeren, bzw. dies verhindern?

    Vielen Dank

    Gerd

  • #2
    Hallo Gerd,<br>ich schlage Dir folgendes vor:<br>

    procedure TForm1.SpeedButton1Click(Sender : TObject);<br>
    begin<br>
    SpeedButton1.Enabled:=False;<br>
    end;<br><br>Jetzt mußt Du Dir nur noch überlegen, wann Du den Speedbutton.Enabled wieder auf True setzen möchtest.<br>:-) Jens Schuman

    Comment


    • #3
      Hallo,

      es muss duch eine andere Möglichkeit geben, den Mauspuffer zu leeren??

      G. Paulu

      Comment


      • #4
        Hi

        Nein kann es garnicht, da es keinen Mausepuffer gibt. Ich weiß nicht was Du meinst aber ALLE Mouseevents werden NICHT zwischengespeichert.

        Es gibt einen Messagequeue der kann Mouseereignisse enthalten, sollte er aber nicht, da in diesem Queue nur Messages die mit PostMessage() versandt wurden stehen. Mouse Messages werden generell mit SendMessage verschickt.

        Nun, bei einem Doppelklick wird ja auch ZWEIMAL geklickt, logisch. Es gäbe die Möglichkeit des ControlStyle des SpeedButtons zu ändern.
        Btn.ControlStyle := Btn.ControlStyle - [ csDoubleClicks ];

        Gruß Hage

        Comment


        • #5
          Ähm!<br>
          Wenn mein Windows wieder mal etwas schläft und ich wie wild (also wie ein Anwender) in meinem Formular herumklicke werden doch alle Mouse-Events verarbeitet. Diese Ereignisse müssen doch während der Schlafphase irgendwo gepuffert worden sein?!? Oder!?!<br>
          BYE BERND <br&gt

          Comment


          • #6
            Hallo,

            ich denke Hagen hat recht. Es gibt in dem Sinne keinen "Mauspuffer" - wenn sich eine Anwendung, wie du beschrieben hast, im "sleep-Zustand" befindet, empfängt Windows (z.B.) diese Nachrichten trotzdem und verarbeitet diese erst später.

            So in etwa stelle ich mir das zumindest vor, denn von einem Puffer für Maus-Events habe ich noch nichts gehört.

            Tschüss..

            Comment


            • #7
              Hallo,

              diese Aussage impliziert eigentlich, dass es irgendwo einen Puffer geben muss,denn sonst könnten diese alten Klicks nicht abgearbeitet werden. Zumal bei mir mit dem Speedbutton-Klick ein Prüfvorgang gestartet wird, der ca. 2 Minuten dauert, und bei dem auf andere Registerseiten geblättert wird. Trotzdem hat der Speedbutton irgendwo in den Tiefen noch das Wissen, dass er eigentlich 2 mal angeklickt wurde und fängt noch mal an zu prüfen.

              Gruß Ger

              Comment


              • #8
                Hi

                SpeedButton.ControlStyle := SpeedButton.ControlStyle - [csDoubleClicks];

                Hab ich oben schon mal geschrieben.

                Es gibt nur einen Tastaturpuffer. Das die Mauseevents nicht verlorengehen liegt daran das der Mousedriver intern einen Queue besitzt. Dieser ist KEIN Buffer, und kann nicht geleert werden. Das liegt daran das die absoluten Mousekoordinaten dort gespeichert sind, die Zuordnung zu dem korrekten Fenster des USER Interfaces existiert dort noch nicht. Logisch, bei Verzögerungen kann ja das vor der Verzögerung korrekte Inputfenster ja nach der Verzögerung schon eine andere Position besitzen oder garnicht mehr existieren.

                Gruß Hage

                Comment

                Working...
                X