GUI Label zwischen variabeln wechseln

  • Guten Morgen :)

    Ich habe ein GUI erstellt, welches lediglich ein Label ausgeben soll, welches Deaktiviert bzw Aktiviert anzeigen soll.

    Man drückt einen Knopf und er soll zwischen den beiden wechseln.

    Das GUI bleibt soweit stehen, nur wird mir im Label kein Text ausgeworfen, normalerweise müsste dort doch zumindest "0" stehen?

    Liebe grüße

    Raydok

    Spoiler anzeigen
  • Das GUI bleibt soweit stehen, nur wird mir im Label kein Text ausgeworfen, normalerweise müsste dort doch zumindest "0" stehen?

    Das Setzen des Label-Wertes ist an deine Variable $abfrage mit Startwert 0 gebunden. (Den Wert änderst du übrigens nie - somit kann sich auch der Inhalt des Labels nicht ändern.)

    Im Messag-Loop prüfst du ob $abfrage < 0 ist oder > 1! Da der Startwert aber unverändert 0 ist, trifft keine Bedingung zu und es wird auch kein Wert im Label gesetzt.

  • Okay, danke schonmal für den Hinweis. Habe es jetzt überarbeitet und die Abfrage geändert, zusätzlich habe ich testweise eine Funktion eingebaut um per Tastendruck das Label zu ändern.

    Das Fenster reagiert nicht mehr wenn ich es schließen möchte. Die Variable wird auch nicht verändert?

    Edit: Das Label zeigt mir jetzt "Deaktiviert" an

    Edit2: Okay, kann es daran liegen, dass die eigentliche Funktion im GuiGetMsg bereich steht?

    Spoiler anzeigen

    Einmal editiert, zuletzt von Raydok (16. August 2022 um 08:49)

  • 1. Setze mal in Zeile 12 einen "Default" Wert für das Label

    2. Deine Variable ist keine GuI message

    3. deine Variable ändert sich ja nicht, dann funktioniert deine Abfrage nicht

    Bugfix war schneller ;)

    Wgen deinem F7:

    Mach es mal so:

  • Moombas

    Es geht darum.

    Code
    $abfrage = not $abfrage

    Das es richtig ist, zweifel ich nicht an. Schließlich funktioniert es ja fehlerfrei.

    Aber vom Verständnis her hätte ich Klärungsbedarf.
    Wenn ich aus dem beiden Teilen der Gleichung folgendes mache, verstehst Du evtl. meine Gedankengänge: $_rot = nicht $_rot. Würde doch bedeuten, das rot und nichtrot die gleiche Wertigkeit hat und dann verstehe ich nicht, wieso man dann noch einen Vergleich macht. Ich verstehe das irgendwie nicht. Da ist irgendwo eine Hirndindung die nicht bei mir freigeschaltet ist. HILFE !!! X/

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Alina : Das "=" ist ja nur die Zuweisung, also du weist der Variable (in diesem Fall) sein Gegenteil zu

    Code
    $abfrage = not $abfrage
    ;ist das Gleiche wie
    $puffer = not $abfrage
    $abfrage = $puffer

    Rot ist zudem kein gutes Beispiel. Konzentriere dich nicht auf das "not" im wörtlichen und eine mathematische Gleichung.

    Im Prinzip wird hierbei das Komplement (Gegenteil) gesetzt (https://de.wikipedia.org/wiki/Nicht-Gatter#:~:text=Ein%20Nicht%2DGatter%20(englisch%3A,Es%20entspricht%20dem%20logischen%20Nicht.)

    Daher wird aus einem True ein False und anders herum.

    Dein Rot (ich nehme mal RGB an) FF0000 würde somit Türkis 00FFFF werden (ob autoit das so abbilden kann und macht in diesem Fall kann ich nicht sagen)

    Einmal editiert, zuletzt von Moombas (17. August 2022 um 15:18)

  • Moin,

    hier handelt es sich um den logischen Operator Not. Wie die anderen logischen Operatoren (And, Or, warum gibt es kein XOR???) liefert er ausschließlich die Werte True und False. Wie von Moombas verwendet liefert er True, wenn die Variable die Werte False oder 0 enthält oder leer ist, in allen anderen Fällen False. Wenn die Variable $_rot den Wert 0xFF0000 enthält, wird das als True gewertet und Not $_rot ergibt False.

  • Dein Rot (ich nehme mal RGB an) FF0000 würde somit Türkis 00FFFF werden (ob autoit das so abbilden kann und macht in diesem Fall kann ich nicht sagen)

    Da NOT in Autoit ein boolean erwartet und das dann invertiert, wird die Zahl erst zu boolean konvertiert. Da alles außer 0 True ist, wird 0xFF0000 also zu True und dann negiert => Not 0xFF0000 ist also False.

    warum gibt es kein XOR

    XOR ist ein Fall, der sehr selten benötigt wird. Deshalb lohnt es sich nicht, dafür einen eigenen Operator einzuführen. Insbesondere, weil der nicht dem normalen Schema entsprechen würde, dass bei der ersten fehlgeschlagenen/zutreffenden Bedingung beendet werden kann.

    => Kurzschlussauswertung funktioniert nicht: Ist bei einer And Verknüpfung der erste boolean falsch muss der zweite nicht mehr überprüft werden. Selbiges bei Or, wenn der erste bool wahr ist.

    Außerdem kann man XOR einfach mit Not a <> Not b darstellen.