Eventhandler, Click, Doppelclick, Dreifachclick, links-rechts-flip, rechts-links-flip

  • Hallo Interessierte,

    ziemlich bald hat es mich genervt, dass die Eventverarbeitung mit AutoIt recht mühselig ist. Will man 'mal schnell' einen doppelclick abfangen, oder auch nur einfach einen Click auf ein Control, z.B. Listview, verarbeiten, ist man länger mit dem Drum-Herum beschäftigt, als mit dem eigentlichen Thema.
    Genug der Vorworte, hab mich mal hingesetzt und eine Erweiterung geschrieben. Sie ist nicht ausgereift, nicht als abgeschlossen zu bezeichnen, aber ich hoffe trotzdem, dass sie euch gefällt - kann aber auch ernüchternde Kritik ertragen :).

    Nach includen von Eventhandler.au3 stehen folgende Funktionen zur Verfügung:
    _GUISetOnEvent($event, $function, $winhandle)
    _GUICtrlSetOnEvent($event, $function, $winhandle, $ctrlhandle)
    Beim Erzeugen einer GUI kann man die Definition der listener mit den o.g. Funktionen vornehmen. Das lästige 'Drum-Herum' sollte somit entfallen ;). Viel Spaß damit.

    !Achtung! Getestet ist diese Erweiterung jedoch mit den wenigsten Controls! Diese Erweiterung funktioniert momentan nur mit aktivierter OnEvent-Funktionsanmeldung (Opt("GUIOnEventMode", 1) ; Zum OnEvent-Mode wechseln)

    Bitte bei Fragen, Problemen oder allerlei Kritik um Posts.

    1. Nach Tipp von BugFix, neuere Version eingefügt:

    2. Beispieldatei hinzugefügt:

  • Erstmal gut geworden.

    Aber

    ziemlich bald hat es mich genervt, dass die Eventverarbeitung mit AutoIt recht mühselig ist. Will man 'mal schnell' doppelclick abfangen, oder auch nur einfach ein Click auf ein Listview verarbeiten, ist man länger mit dem Drum-Herum beschäftigt, als mit dem eigentlichen Thema.


    Da gibts ne wunderschöne UDF (Link)

  • Mensch, und ich dachte ich wär vorreitend mit der Idee :( . Aber die genannte UDF funktioniert im MessegeLoop-Mode, das tröstet ;) .

    Ich hoffe, dass nicht der Eindruck entstanden ist, es ließe sich in meiner UDF nur das Listview damit bedienen. Im Bereich Beschreibung ist die Beschreibung etwas ausführlicher.

    • Offizieller Beitrag

    Folgendes sollte man so nicht in einer externen Funktion machen:

    [autoit]

    Opt("GUIOnEventMode", 1) ; Zum OnEvent-Mode wechseln
    Opt("MouseCoordMode", 2) ; relative Mauskoordinaten zur Anwendungsfläche

    [/autoit]

    Damit kannst du dem Benutzer deiner Funktion das Skript zerschießen.
    Gehe immer davon aus, dass der Nutzer eine andere Option verwendet und diese zwingend notwendig für sein Programm ist.
    Das realisierst du so:

    [autoit]

    Local $optOld1, $optOld2

    [/autoit][autoit][/autoit][autoit]

    ; === vor Skriptzeile, dass diese Option erfordert:
    $optOld1 = Opt("GUIOnEventMode", 1) ; Zum OnEvent-Mode wechseln
    ; Code mit dieser Option
    ; ...
    ; === Zurücksetzen zur vorherigen Option:
    Opt("GUIOnEventMode", $optOld1)

    [/autoit][autoit][/autoit][autoit]

    ; === identisch für zweite Option

    [/autoit][autoit][/autoit][autoit]

    ; === vor Skriptzeile, dass diese Option erfordert:
    $optOld2 = Opt("MouseCoordMode", 2) ; relative Mauskoordinaten zur Anwendungsfläche
    ; Code mit dieser Option
    ; ...
    ; === Zurücksetzen zur vorherigen Option:
    Opt("MouseCoordMode", $optOld2)

    [/autoit]
  • hallo BugFix,

    guter Tipp, danke. Die Option MouseCoordMode lässt sich gut umsetzen, aber die Definition des OnEvent-Mode ist funktionell (so weit ich es verstehe) erforderlich. Aber dennoch hat sie in der UDF nichts verloren. Danke

    Daher diesen Umstand berichtigt und im 1. Post die aktuelle Datei hinzugefügt.