• Offizieller Beitrag

    EDIT 2020-04-15

    Fast vergessen: Natürlich muss man auch ein bestehendes Control für einen Accelerator verwenden können, nicht nur Dummies.

    EDIT 2020-04-17:

    Nach den berechtigten Hinweisen von Bitnugger habe ich nun doch aus der eigentlichen kleinen Hilfsfunktion eine komplexe UDF gemacht. Ich lasse mal die alte Version der Vollständigkeit halber im Post.

    Dadurch ergibt sich nun auch eine größere Funktionsvielfalt.

    • _Accelerator_Create
      Erstellt einen neuen Accelerator (standardmäßig mit Dummy-Ctrl, optional für eine übergebene Ctrl-ID)
    • _Accelerator_GetID
      Gibt die ID für einen übergebenen Hotkey zurück
    • _Accelerator_GetHotkey
      Gibt den Hotkey für eine übergebene ID zurück
    • _Accelerator_ChangeHotkey
      Verbindet einen neuen Hotkey mit der übergebenen Accelerator-ID
    • _Accelerator_Delete
      Löscht einen Accelerator für die übergebene ID oder alle Accelerator für die übergebene GUI

    Details wie immer in den Funktionsheadern.
    Hier ein Bsp.:


    alte Version

    Hier habe ich die Erstellung von Dummy-Controls und ihre Anbindung an Accelerator-Keys mal in eine Funktion zusammengeführt. Finde ich etwas übersichtlicher.

    Hier mal beide Varianten im direkten Vergleich:

    Edit: Hinweis von alpines übernommen.

  • Da sieht man mal wieder ein Standardkonstrukt :D

    Bool vor der Schleife erzeugen, in der Schleife prüfen und dann rausspringen und später prüfen wofür man es braucht.

    Du hättest hier ruhig das $bExists komplett weglassen können und einfach direkt aus der Funktion returnen können wenn du deine Funktion so eng zusammenstauchst, du verwendest es später ja nicht mehr. Aber gut, Stilsache.

    Ich würde dir vielleicht noch raten dich an die Namenskonvention zu halten, damit das ein wenig deckungsgleich mit UDFs ist.

    _GUIDummy_CreateWithAccelerator() oder sowas.

    • Offizieller Beitrag

    Bool vor der Schleife erzeugen, in der Schleife prüfen und dann rausspringen und später prüfen wofür man es braucht.

    Du hättest hier ruhig das $bExists komplett weglassen können und einfach direkt aus der Funktion returnen können wenn du deine Funktion so eng zusammenstauchst, du verwendest es später ja nicht mehr. Aber gut, Stilsache.

    Hehe, da hast du völlig recht. Ich hatte da noch irgendeinen anderen Gedanken im Kopf, der es nötig machte die Schleife kpl. zu durchlaufen. Der Gedanke verflog - aber das Konstrukt blieb. ^^

  • If $aAccelerators[$i][0] = $_HotKey Then Return SetError(1,0,0)

    Da ein Accelerator ja an eine GUI gebunden ist, kannst du hier nicht einfach nur prüfen, ob der Accelerator bereits verwendet wird. Du musst prüfen, ob der Accelerator bereits für das angegebene Fenster verwendet wird.

    Zudem sollten Accelerators für ein Fenster wieder aus dem Array gelöscht werden, wenn das Fenster oder das Control nicht (mehr) existiert. Du musst dir also nicht nur die Accelerators merken, sondern auch die Handles der Fenster, zu denen sie gehören.

    $_HotKey ...wäre $_Accelerator hier nicht passender?

    Was passiert übrigens mit dem Accelerator, wenn ich ein Dummy Control mit GUICtrlDelete($ID_1) eliminiere (und danach z.B. ein Edit Controls erzeuge)?

  • BugFix 17. April 2020 um 13:26

    Hat den Titel des Themas von „_GuiCreateDummyAccelerator“ zu „Accelerators UDF“ geändert.
    • Offizieller Beitrag

    Da ein Accelerator ja an eine GUI gebunden ist, kannst du hier nicht einfach nur prüfen, ob der Accelerator bereits verwendet wird. Du musst prüfen, ob der Accelerator bereits für das angegebene Fenster verwendet wird.

    Zudem sollten Accelerators für ein Fenster wieder aus dem Array gelöscht werden, wenn das Fenster oder das Control nicht (mehr) existiert. Du musst dir also nicht nur die Accelerators merken, sondern auch die Handles der Fenster, zu denen sie gehören.

    $_HotKey ...wäre $_Accelerator hier nicht passender?

    Was passiert übrigens mit dem Accelerator, wenn ich ein Dummy Control mit GUICtrlDelete($ID_1) eliminiere (und danach z.B. ein Edit Controls erzeuge)?

    Habe deine Hinweise umgesetzt und nun doch eine komplexe UDF erstellt. s. Post 1

  • Habe deine Hinweise umgesetzt und nun doch eine komplexe UDF erstellt.

    Super!

    C&P-Fehler?

    Func __AM_GetFromAccArray(ByRef $_aAccTmp, $_index, $_vAsk, $_sAction='getID') ; $_sAction: 'getHK', 'getHK'

    Soll wohl...

    Func __AM_GetFromAccArray(ByRef $_aAccTmp, $_index, $_vAsk, $_sAction='getID') ; $_sAction: 'getID', 'getHK'