GUISetAccelerators ohne Wirkung

  • Hallo,

    in meinem Programmbeispiel funktioniert die Standart-Steuerung der GUI API, allerdings die Keys, die ich über "GUISetAccelerators" definiert habe, bleiben leider ohne Wirkung.

    Hier mal mein Beispiel:

    In meinem Hauptscript funktioniert nicht mal mehr die Standart-Steuerung der GUI, aber das könnte daran liegen, dass ich zwei Menüpunkte mit E am Anfang habe!?

    Falls jemand weiß, woran das liegen könnte, wäre ich sehr dankbar über einen Hinweis.

    VG

    Einmal editiert, zuletzt von Oscar (25. Januar 2022 um 13:15) aus folgendem Grund: Code-Highlighting auf AutoIt umgestellt.

  • Ich weiß nur das viele Definitionen fehlen.

    Nur "Const" sollte man nicht verwenden, immer zusammen mit Locale oder Globale.

    Du verwendest Locale im Globalen Aspekt, was falsch ist.

    Nur shcon mal als erster Eindruck.

    Edit: Folgendes funktioniert bei mir Einwandfrei.

    Einmal editiert, zuletzt von Moombas (25. Januar 2022 um 13:03)

  • Möp, ich habe die Frage falsch gelesen^^

    Ich habe verstanden das auch die Standard-GUI nicht funzt :rofl:

    Das was Bugfix schreibt ist dann natürlich Goldrichtig (werde es mal oben ergänzen). Dennoch kann ich nur weiterhin darauf hinweisen, die richtige Variablen bzw Konstanten Deklaration zu verwenden.

  • Soo, hab jetzt mal alles geändert und auch die GUI-Erstellung aus meinem eigentlichen Programm eingearbeitet, da in dem Beispiel dann doch alles funktioniert hatte :rock:

    In diesem Beispiel geht es leider nicht, weder die Standart-GUI-Befehle (Alt+F für das File-Menü, usw.), noch die Punkte, die ich selbst definiert habe:

    Achtung: Es funktioniert nur die Menüzeile, die Buttons sind ohne Funktion!

    Warum müssen eigentlich alle Variablen "Global" sein? Ich benutze in den Funktionen eigene Variablen, bzw. übergebe die Variablen an die Funktionen!?

    Einmal editiert, zuletzt von JBO (25. Januar 2022 um 13:46)

  • Alle Variablen und Konstanten, die du außerhalb einer Funktion deklarierst (hier also z.B. alle GUI-Elemente), sind immer Global, egal wie du sie definierst.

    Daher würde ich das immer direkt richtig schreiben, dann gibt es später keine Verwirrung (in deinem ersten Post z.B. waren auch Local dazwischen).

    Einmal editiert, zuletzt von Moombas (25. Januar 2022 um 14:49)

  • Alle Variablen und Konstanten, die du außerhalb einer Funktion deklarierst (hier also z.B. alle GUI-Elemente), sind immer Global, egal wie du sie definierst.

    Daher würde ich das immer direkt richtig schreiben, dann gibt es später keine Verwirrung (in deinem ersten Post z.B. waren auch Local dazwischen).

    OK Danke, werd ich mir angewöhnen müssen :)

  • Mit der Tastenfolge komme ich ins Menü. Also erst Alt und dann F (nicht gleichzeitig).

    Ich könnte mir vorstellen das du dafür auch Abfragen musst, aber wie gesagt ich mche in AutoIt zu wenig mit der GUI, das können andere besser.

  • Mit der Tastenfolge komme ich ins Menü. Also erst Alt und dann F (nicht gleichzeitig).

    Ich könnte mir vorstellen das du dafür auch Abfragen musst, aber wie gesagt ich mche in AutoIt zu wenig mit der GUI, das können andere besser.

    Ja, die Alt-Taste funktioniert, wie sie soll. Allerdings habe ich ein anderes Beispiel, in dem auch die Standart-Tastenkombination funktioniert, also Alt+f z. B.

  • Wie gesagt GUI ist nicht ganz mein Thema. Meine idee wäre HotKeySet() zu nutzen aber ob das die Lösung ist weiß ich nicht.

    Da hab ich auch schon dran gedacht, aber wie bekomm ich die Hotkeys dann abgefragt, wenn GUIGetMsg() jede Tastatureingabe abfängt?

    OK, grade mal was getestet und es scheint nicht an GUIGetMsg() zu liegen, weil GUIGetMsg() gar keine Tastatureingabe erhält, wenn ich z. B. F1 drücke.

    Einmal editiert, zuletzt von JBO (25. Januar 2022 um 16:11)

  • In diesem Beispiel geht es leider nicht, weder die Standart-GUI-Befehle (Alt+F für das File-Menü, usw.), noch die Punkte, die ich selbst definiert habe:

    In so einem Fall sollte man erstmal prüfen, ob GUISetAccelerators auch korrekt ausgeführt wird. Laut Hilfe wird dann eine "1" zurückgegeben.

    Bei Deinem Script ist das nicht der Fall. Warum ist das so?

    Du hast ein Array mit 7 Elementen angelegt, aber nur 6 Elemente initialisiert. Also Fehler "0".

    Wenn Du es so machst, dann funktioniert es:

  • In so einem Fall sollte man erstmal prüfen, ob GUISetAccelerators auch korrekt ausgeführt wird. Laut Hilfe wird dann eine "1" zurückgegeben.

    Bei Deinem Script ist das nicht der Fall. Warum ist das so?

    Du hast ein Array mit 7 Elementen angelegt, aber nur 6 Elemente initialisiert. Also Fehler "0".

    Wenn Du es so machst, dann funktioniert es:

    Oh man! :Face: Da hab ich mich wohl verzählt! Aber da man die lange Zeile nicht schön formatieren kann, hab ich den Überblick verloren :( Oder gibt es eine Möglichkeit, die Zeile in ein übersichtliches Format zu bekommen? Wenn ich bis jetzt immer einen Zeilenumbruch, nach dem Komma hinter einer ] hat das AutoIt angemeckert.


    Danke für den Hinweis!!

  • Oder gibt es eine Möglichkeit, die Zeile in ein übersichtliches Format zu bekommen? Wenn ich bis jetzt immer einen Zeilenumbruch, nach dem Komma hinter einer ] hat das AutoIt angemeckert.

    Ja, die gibt es! Mit dem Unterstrich am Ende der Zeile kann man mehrere Zeilen zusammenfassen:

    AutoIt
    Global $aAccelTable[6][2] = [ _
            ["{F1}", $Help], _
            ["^o", $FileOpenExcelFile], _
            ["^c", $FileCreateExport], _
            ["^x", $FileExit], _
            ["^r", $ExportRawExport], _
            ["^m", $ExportXMLExport] _
            ]
  • Ja, die gibt es! Mit dem Unterstrich am Ende der Zeile kann man mehrere Zeilen zusammenfassen:

    AutoIt
    Global $aAccelTable[6][2] = [ _
            ["{F1}", $Help], _
            ["^o", $FileOpenExcelFile], _
            ["^c", $FileCreateExport], _
            ["^x", $FileExit], _
            ["^r", $ExportRawExport], _
            ["^m", $ExportXMLExport] _
            ]

    ah, super, genau was ich gesucht hab! Danke!

    P.S. Oh, die Leertaste vor dem _ ist wohl wichtig ^^

  • Noch ein Hinweis zum deklarieren plus initialisieren eines Arrays:

    Wenn Du wie hier mehrere Keys zuweisen willst und noch nicht genau weißt, wie viele es werden, so darfst Du die Anzahl auch weglassen. Vorausgesetzt, dass Du das Array beim deklarieren auch gleich initialisierst:

    AutoIt
    Global $aAccelTable[][] = [ _
            ["{F1}", $Help], _
            ["^o", $FileOpenExcelFile], _
            ["^c", $FileCreateExport], _
            ["^x", $FileExit], _
            ["^r", $ExportRawExport], _
            ["^m", $ExportXMLExport] _
            ]

    Der Interpreter weiß in dem Fall, wie groß das Array sein soll.

  • Noch ein Hinweis zum deklarieren plus initialisieren eines Arrays:

    Wenn Du wie hier mehrere Keys zuweisen willst und noch nicht genau weißt, wie viele es werden, so darfst Du die Anzahl auch weglassen. Vorausgesetzt, dass Du das Array beim deklarieren auch gleich initialisierst:

    AutoIt
    Global $aAccelTable[][] = [ _
            ["{F1}", $Help], _
            ["^o", $FileOpenExcelFile], _
            ["^c", $FileCreateExport], _
            ["^x", $FileExit], _
            ["^r", $ExportRawExport], _
            ["^m", $ExportXMLExport] _
            ]

    Der Interpreter weiß in dem Fall, wie groß das Array sein soll.

    Ah ja, stimmt! Das hatte ich nicht berücksichtigt, weil mir "koda" das Menü ursprünglich erstellt hatte und ich hab es dann nur noch ergänzt.

  • weil mir "koda" das Menü ursprünglich erstellt hatte

    Mal als Tipp: Fang gar nicht erst mit Koda an.

    - Die Controlpositionen und -Größen sind mehr als idiotisch (wer setzt ein Ctrl an x=27 (wenn ncht gerade das ein Ergebnis zur gleichmäßigen Aufteilung ist). In der Regel verwendet man doch "glatte" Werte, damit man erforderliche Anpassungen auch schnell auf andere Ctrl umsetzen kann

    - Die Variablennamen sind sinnfrei. $Label1 und $Button5 sind so aussagekräftig wie ein nasser Laubhaufen.

    - Dadurch, dass du also hinterher erstmal sinnvolle Namen vergeben musst, hast du auch keinerlei Zeitersparnis. Wenn du ein paar mal GUI rein per Hand erstellt hast, bist du auch nicht langsamer als mit Koda.

    Also ganz als Anfänger ist es sicher nicht schlecht eine Hilfe zu haben, aber wenn du dann weißt, wie es geht brauchst du die Krücke nicht mehr. 8o

  • Mal als Tipp: Fang gar nicht erst mit Koda an.

    - Die Controlpositionen und -Größen sind mehr als idiotisch (wer setzt ein Ctrl an x=27 (wenn ncht gerade das ein Ergebnis zur gleichmäßigen Aufteilung ist). In der Regel verwendet man doch "glatte" Werte, damit man erforderliche Anpassungen auch schnell auf andere Ctrl umsetzen kann

    - Die Variablennamen sind sinnfrei. $Label1 und $Button5 sind so aussagekräftig wie ein nasser Laubhaufen.

    - Dadurch, dass du also hinterher erstmal sinnvolle Namen vergeben musst, hast du auch keinerlei Zeitersparnis. Wenn du ein paar mal GUI rein per Hand erstellt hast, bist du auch nicht langsamer als mit Koda.

    Also ganz als Anfänger ist es sicher nicht schlecht eine Hilfe zu haben, aber wenn du dann weißt, wie es geht brauchst du die Krücke nicht mehr. 8o

    Ja, das stimmt schon, Koda ist wohl nicht die beste Wahl, aber man kann die Ctrl's ja auch schon in Koda umbenennen, was zwar letztlich auch nicht viel Zeit erspart, aber es wird wenigstens ein recht anständiger Code erzeugt, zumindest was Variablennamen angeht. Was allerdings die Positionen angeht, sollte Koda da eher an einem Raster sich orientieren, ach was die Größen der Ctrl's angeht.

    Ich bin/war ja blutiger Anfänger, was AutoIt angeht (wie man vlt. an meinen Fragen manchmal merkt ^^), darum hab ich mich im Internet umgesehen und bin dabei auf Koda gestoßen. Das ist auch mein erstes Projekt in AutoIt.

  • JBO 26. Januar 2022 um 14:16

    Hat das Label [ gelöst ] hinzugefügt.