Komplette GUI als "Button"

  • Ich hoffe ich kann meine Idee verständlich beschreiben:

    Ich möchte ein Fenster mit Daten ohne Buttons anzeigen und wenn man irgendwo ins Fenster klickt, sollen die Buttons erscheinen - also vorher versteckt. Und auf Klick auf einen Button sollen diese wieder ausgeblendet werden. Geht das?

    :)

  • Guten Abend HansJ54 👋 ,

    das geht, ja. Es ist am Ende egal ob du auf Labels (Texte) in der GUI klickst oder auf ein Bild oder auf einen Button.
    Sobald der Klick auf das jeweilige Element der GUI (oder auf die GUI selbst) registriert wird, kannst du darauf reagieren und deine Buttons einblenden.

    Wie weit bist du denn bis jetzt? Hast du bereits Code den du uns zeigen kannst?

    Viele Grüße
    Sven

  • Meinst Du soetwas?

    Zur Zeit sind die Buttons beim Start versteckt. Klicks Du einmal in die GUI erscheinen die Buttons, beim zweiten klicken in die GUI sind diese wieder weg.

    edit: funktioniert jetzt:
    Jetzt muss man es nur noch hinbekommen, das es nicht nur einmal funktioniert das die Buttons erscheinen und wieder weg sind. Vielleicht kann da jemand anderes helfen. Wenn es denn das gesuchte ist.

    edit: funktioniert jetzt auch:
    Das schließen der GUI funktioniert noch nicht über das Kreuz. Muss noch angepasst werden. Aber jetzt nicht mehr um diese Zeit. ;)

    Spoiler anzeigen

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    5 Mal editiert, zuletzt von SOLVE-SMART (4. Februar 2024 um 09:49)

  • ich würde in Größe der Gui ein transparentes Label erstellen das ontop steht. Mit einem klick wird das label befeuert und du kannst es deaktivieren und die buttons anzeigen. wenn du auf einen button klickst aktivierst du das label wieder und setzt die button auf hide

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • hier noch ein Beispiel in einfacher Form als Alternative.

    Bei Alina werden die Controls der Button aber jedesmal neu erstellt. Das ist nicht unbedingt ideal. ;)

    Das kann man sicher auch in eine Funktion packen, wie Alina das schon gezeigt hat, wenn es mehrere Buttons sind.

    Da bietet sich dann auch an, die Buttons alle hintereinander zu erstellen.
    Dann kann man die auch in einer For $i = $Button1 To $Buttonx ...
    durchlaufen lassen

    hier noch eine Alternative für viele Buttons:

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Einmal editiert, zuletzt von Schnuffel (4. Februar 2024 um 10:54)

  • Schnuffel

    Meine Nachtlösung war als Ansatz gedacht. ;)

    Je nachdem wie "fit" er im scripten ist wird er sich für die erste oder zweite Lsg. von Dir entscheiden.
    Ich weiß ja auch nicht, was er genau vor hat und wie viele Buttons er später in dem GUI haben wird.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Ich möchte ein Fenster mit Daten ohne Buttons anzeigen und wenn man irgendwo ins Fenster klickt, sollen die Buttons erscheinen - also vorher versteckt. Und auf Klick auf einen Button sollen diese wieder ausgeblendet werden. Geht das?

    Moin,

    das ließe sich eventuell auch mit einem Contextmenü -> GUICtrlCreateContextMenu mit wenig Aufwand lösen.

  • Kurz mein Ziel (und ich versuche immer gleichzeitig beim Programmieren zu lernen):
    Ich habe an unser Balkonkraftwerk eine Shelly PM Mini angeschlossen und frage die Werte getaktet ab (vermeide damit die Deye-Cloud). Habe dafür eine GUI programmiert, die auf unserem Server läuft. Um von zuhause reinschauen zu können ohne Verbindung zum Server lade ich jede Minute einen Screenshot auf eine Webseite hoch. Aus optischen Gründen gefallen mir dabei die 4 Buttons unten rechts nicht. Könnte sie vor dem Screenshot kurz ausschalten, aber auch so wäre die Optik besser ohne. Daher die Idee, sie auszublenden und auf Mausklick irgendwo auf der GUI einblenden. Ist nicht "lebensnotwendig", aber nice to know wie das geht.

    Erste Änderung: vor dem Screenshot Buttons ausblenden und nachher zurück (Schnuffel Nr. 2):

    Das mit dem Label drüberlegen klappt noch nicht, suche das Problem.

    :)

    Einmal editiert, zuletzt von HansJ54 (5. Februar 2024 um 21:14)

  • Hi HansJ54 👋 ,

    also wenn es dir wirklich nur um die vier Buttons geht, die am Anfang ausgeblendet sein sollen und per Klick auf die GUI eingeblendet werden sollen, dann sollte dir das folgende Beispiel helfen:


    💡 Wichtig: Die _ToggleButtons() Funktion wird per Maus-Klick ausgelöst, tut aber nichts wenn die Buttons geklickt werden. Also dies ist als Ausnahme definiert und kann erweitert werden. Denn du möchtest ja die Buttons nichts ausblenden wenn du darauf klickst (nehme ich an).

    Wenn du Fragen haben solltest, frag' gern 🤝 .

    Viele Grüße
    Sven

    Visuelle Darstellung als GIF
  • Wenn du es eh als Webseite haben moechtest, wuerde ich eher die Infos als JSON-Datei hochladen und eine Webseite erstellen, mit der du die json datei auslesen und das ganze dann auch (huebscher) darstellen kannst.

    Webseite:

    Json data.json:

    Das ganze spart Datenvolumen beim Hochladen und aktualisiert sich automatisch alle 10 Sekunden. Du musst also nurnoch statt dem Screenshot die JSON Textdatei hochladen ;)

  • Danke an Solve-Smart, funktioniert einwandfrei.

    Und Kanashius bietet die Rettung, da sich ein kleines für mich unlösbares Problem ergeben hat: Screenshots funktionieren anscheinend nicht, wenn der Sperrbildschirm aktiv ist. Habe mich jetzt 2 Nächte lang gewundert, dass, wie ich nachher feststellte, immer der gleiche Screenshot hochgeladen wurde. Ich vermute, dass ein Screenshot im Sperrbildschirm grundsätzlich nicht möglich ist!?
    Also werde ich das umstellen auf Hochladen der Daten - ist nur wieder Neuland für mich.
    Nicht wundern, über die fehlenden neuen Screenshots bei Nacht (sind ja eigentlich nicht so interessant außer Spannung und Hz), die Screenshots funktionieren natürlich auch tagsüber nur, wenn das Script auf dem offenen Bildschirm läuft.

    Und der Link im Footer ist defekt: Meine Website: Kanashius Website (einige meiner Programme sind auch hier zu finden)

    :)

    2 Mal editiert, zuletzt von HansJ54 (6. Februar 2024 um 17:49)

  • Noch eine Bitte: wie erzeuge ich den JSON-String am geschicktesten? Aktuell setze ich ihn einfach als Textstring mit den Namen und Werten zusammen, aber da bietet AutoIt doch sicher eine bessere Lösung. Ich habe mich schon mit der JSON.au3 beschäftigt, aber finde nichts Passendes. Mir schwebt eine Idee vor von einem Array, in dem die Namen der Variablen als Index und zugeordnet die jeweiligen Werte stehen.

    Ist kein wichtiges Problem, dient auch nur meiner "Weiterbildung" 8)

    :)

  • Ich wuerde eine Map nutzen. Damit bildet man Json sehr gut ab, und du hast nur eine Variable, die du speichern musst und im ganzen Script ueberall verwenden kannst.


    Edit: Changed Bool to lowercase (thanks for the hint AspirinJunkie)