Bild in eine GUI einfügen

  • Guten Abend liebes Forum,
    ich schlage mich seit mehreren Stunden mit dem Problem herum, das ich es nicht schaffe ein Bild in eine GUI hinzufügen.
    Ich versuche es mit;
    GUICtrlCreatePic,
    aber sagen tut er immer, wenn ich das Script starten will
    "C:\Users\Lars\Desktop\1\GUI.au3" (6) : ==> Unknown function name.:
    GUICtrlCreatePic(Nawi-Logo2.JPEG, -1, -1)
    GUICtrlCreatePic(^ ERROR
    >Exit code: 1 Time: 0.08888
    Ich habe es probiert in dem ich das Bild von png. in jpg. geändert habe.
    Das Script und das Bild auf dem Desktop liegen gehabt zuhabe.
    Und das Script und das Bild in einen Ordner verschoben habe.

    Doch leider finde ich das Problem nicht!
    Auch die AutoIt-Hilfe hat nicht weitergeholfen und das Internet auch nicht.
    Vllt. übersehe ich den Fehler oder mir ist wieder ein Befehl aus C++ hereingerutscht der da gar nichts zu suchen hat.

  • Ist es möglich in einer MsgBox ein UpDown-Menü einzubauen?
    Und wo finde ich die Control-ID für die GUICtrl.. Befehle?

  • Also statt Button-->MsgBox+Updown-Menü
    lieber Button-->neue GUI+Updown-Menü.
    Dazu müsste ich lediglich nocheinmal GUICreate eingeben in mein Script oder?
    Wenn ich Werte aus dem UpDown-Menü speichern möchte, kan ich diese auch als Variabel angeben oder?
    $save1 = Inputbox( "xxx", "xxx")
    weil das mit der .ini habe ich noch nicht ganz verstanden.
    Ist dieser noch erhalten nach dem schließen des Scripts und erneutem Aufrufen?

    Einmal editiert, zuletzt von [An]Ion (29. Dezember 2015 um 22:57)

    • Offizieller Beitrag

    Und wo finde ich die Control-ID für die GUICtrl.. Befehle?

    Das ist der Wert der bei GUICtrlCreate... zurückgegeben wird.
    Beispiel:

    AutoIt
    $Button = GUICtrlCreateButton("B1", 10, 100, 100, 20)

    $Button enthällt die ControlID


    Zitat von [An]Ion

    Also statt Button-->MsgBox+Updown-Menü
    lieber Button-->neue GUI+Updown-Menü.
    Dazu müsste ich lediglich nocheinmal GUICreate eingeben in mein Script oder?
    Wenn ich Werte aus dem UpDown-Menü speichern möchte, kan ich diese auch als Variabel angeben oder?
    $save1 = Inputbox( "xxx", "xxx")

    Keine Ahnung was du damit meinst.
    Was willst du eigentlich genau machen mit einem UP-/Down Control und das ganze in einer MessageBox?
    Was soll da ausgewählt werden?


    Zitat von [An]Ion

    Ist dieser noch erhalten nach dem schließen des Scripts und erneutem Aufrufen?

    Wenn du Werte dauerhaft speichern willst, must du diese in eine INI schreiben und später wieder lesen.

  • Eine bekannte hat mich gebeten für ihren kleinen Sohn ein Spiel zu Programmieren.
    Doch schon von Anfang an dachte ich mir das, dass mit C++ ein ziemlicher Arbeitsaufwand wäre, hab ich mich kurzerhand für AutoIt entschieden, da sich GUI's leichter erstellen lassen.
    Es sollte ein einfaches 2D Strategiespiel werden wo der Junge Freude dran hat. Seine Mutter hat mir das Konzept erklärt worum es darin gehen sollte.
    Nur gestaltet sich AutoIt im Gegensatz zu C++ als ziemlich Unterschiedlich.
    Idee war eigentlich mit einer geöffneten MsgBox und einem UpDown-Menü, die Anzahl der Soldaten/oder der Auszubildenden Soldaten auszuwählen, diesen Wert Speichern und später irgendwo anzeigen zu lassen.
    Also ein 0815-prinzip von Strategiespielen.
    Und mit .ini's habe ich bisher noch nicht gearbeitet, und auch in der Hilfe zu AutoIt steht mir manchmal noch ein Fragezeichen über dem Kopf.
    Ich weiß ein spiel zu Programmieren, obwohl man noch nicht einmal die Materie richtig kennt ist ziemlich hoch gegriffen.
    Und im Script hängt und hakt es immer wieder mal, aber ich bin optimistisch und such dann andere Wege.

    • Offizieller Beitrag

    Eine MessageBox/ExtraGui in C++ zu erstellen ist gemessen an AutoIt eine Qual unter C++.
    Ich bin nicht der C++ Freak, aber auch unter C++ kann man nicht so einfach eine MsgBox um ein Up-/Downcontrol erweiter, weil es ein Standarddialog ist.
    Aber ohne Grundkenntnisse wirst du auch bei einer so kleinen Aufgabe (GUI mit Input , UP-/DownControl und 1-2 Buttons) in AutoIt scheitern.
    Wenn ich dir jetzt solch eine GUI als Funktion vorwerfe, wirst du nichts lernen und beim nächsten noch so kleinen Vorhaben nachfragen.

    Btw, wenn du C++ kannst, dann sollte dir soch ein Problem wie das Rausfinden der CtrlId eigentlich keine Probleme machen.
    Jedes Beispiel in der Hilfe zu den GUICtrlSet... Befehlen benutzt die ControlID und man sollte schon wissen, wie Variablen zugeordnet werden.
    Gemessen an allen anderen Programmiersprachen, ist die AutoIt Hilfe eine der besten überhaut.

    PS: Wenn du willst werde ich dir eine Funktion schreiben um eine MsgBox ähnliche GUI zu verwalten, aber die GUI dazu musst du schon selber erstellen.
    Dies ist ein Hilfeforum und kein mach mir mal eben Forum ;)
    Die Verwaltung der GUI werde ich dir programmieren, aber nur mit der entsprechenden Vorarbeit von dir.

  • Das Script ist schon angefangen, GUI läuft einigermaßen
    Bei C++ war es meine Aufgabe lediglich Batch-Dateien zu Schreiben die verschiedene Programme und Script's aus Bibliotheken ausführen sollten.
    Mit C++ haben wir immer nur im cmd gearbeitet und die Funktionen wurden mit einfachen Befehlen wie z.B (1,Daten, Informationen,Bibliothek, ausführen, öffnen usw.) ausgeführt.
    Beim jetzigen Script harkt es an ein paar ecken und enden. Hierbei habe ich schon etwas mehr zu tun als "gebe das ein um das zu bekommen". Möchte ungern mit Inputboxen arbeiten, sonst kriegt der Junge beim Spielen noch ein schreibrappel.
    Es läuft meistens alles gut, nur mit dem Verknüpfen von Funktionen und Delokalisieren gibt es Probleme.
    Theorie:
    Auf Button klicken --> Fenster öffnet sich --> Anzahl der Soldaten etc. Auswählen per Updown-Menü/Inputbox --> Button drücken für ausführen (z.B Anzahl der Truppen ausbilden) --> zurück zum Spiel.
    Praxis:
    Script starten --> beide Fenster offen+Fenster lassen sich nicht mehr schließen(Außer über Task-Manager)
    An solchen Sachen hapert es meistens.
    Und ich möchte keines Wegs ein "mach mal für mich". Empfinde ich als sinnlos, dann kann ich ihm gleich Anno 1602-2205 kaufen oder einen Programmierer anheuern.
    Sinn ist es auch mich weiter zu bilden und es macht ja auch Spaß zu Scripten und nach Fehlern zu suchen, aber irgendwann ist man festgefahren und braucht Hilfe.
    Ich kann mal das erabeitete hier reinstellen, wird aber für entsetzen sorgen wie es aussieht.(hab da so meine eigene Ordnung)

    • Offizieller Beitrag

    Dann zeig doch her, was du bis jetzt gemacht hast.

    Da mit gerade langweiligwar, habe ich dir mal ein 5 Minuten Beispiel gebaut.

  • Anscheinend habe ich mit dem Versuch einer 2 GUI das ganze Script zerschossen.

    • Offizieller Beitrag

    Schau dir mein Script an, da siehst du wie das mit der 2. GUI funktionieren könnte.
    Hab noch ein Paar Kommentare eingebaut

    Vorteil bei dem Beispiel ist, die 2. GUI existiert nur wenn die Funktion aufgerufen wurde.

    Dein letztes Script ist total verhunzt.
    Du wechselst zu OnEnetMode d.H. die Message Loop wird niemals mehr aufgerufen.
    Die 2. GUI hat keine Elemente.
    Die Funktion _show1 ist voll für den A...., was du damit bezwecken willst geht mir nicht in den Kopf.
    Davon angesehen estellst du die Funktion in deiner Hauptschleife und beendest die Funktion nicht (EndFunc)
    Funktionen gehören nicht in die Schleife sondern z.B. an das Scriptende

  • Danke das Script hilft weiter, auch wenn ich bei manchen Sachen noch überlege.
    Und genau das meinte ich das ich bei diesem Script immer von Schema C++ ausgehe und es genau so aussieht wie bei einer .bat.
    Und gegeen Ende habe ich den Überblick verloren und die ganzen Funktionen nicht mehr weitergearbeitet oder vollendet.

    • Offizieller Beitrag

    Schau dir im Portal mal die Box wichtige Links an, speziell der 1. und 2. Link.
    Erstmal Grundlagen pauken ;)
    Wenn du Fragen zu meinem Scriptbeispiel hast, frag einfach.

  • Kann bei dem Script auch der Button durch einen Wert aus einem UpDown-Menü ersetzt werden.
    Ich hab eine Variabel, anstat vor enem Button, vor den Wert aus der ComboBox gepackt.
    Doch Reagieren will er nicht. Und wenn ich die Variabel vor den GUICtrlCreateCombo-Befehl setze spring schnell eine neue GUI auf aber beide GUI's schließen sich daraufhin, bei allen.

    • Offizieller Beitrag

    Kann bei dem Script auch der Button durch einen Wert aus einem UpDown-Menü ersetzt werden.

    Welcher Button? Beschreib mal genauer.


    Zitat von [An]Ion

    Ich hab eine Variabel, anstat vor enem Button, vor den Wert aus der ComboBox gepackt.

    Hä? Was? Sprechen wir die selbe Sprache? Ich versteh kein Wort was du vorhast.


    Zitat von [An]Ion

    Doch Reagieren will er nicht. Und wenn ich die Variabel vor den GUICtrlCreateCombo-Befehl setze spring schnell eine neue GUI auf aber beide GUI's schließen sich daraufhin, bei allen.

    Das selbe wie vorher. Was? Wo?


    :Glaskugel:

    Ich kenne zwar HarryPotter, aber ich kann nicht hellsehen. Wo ist dein Script? Wo genau in diesem Script soll was passieren?

  • In deine Script war es der Button "Ausbilden", bei mir habe ich versucht den Button durch einen Wert aus dem UpDown-Menü zu ersetzen.

    Bei dir im Script war es die Variabel $Button vor GUICtrlCreateButton
    Ich habe versucht die Variabel umzukehren mit $Kas vor GUICtrlSetData


    • Offizieller Beitrag

    Also nochmal:
    Auf welchem Button soll die Anzahl angezeigt werden? (Varname)
    Wann soll dieser Wert angezeigt werden? (Nach welcher Aktion?)
    Was willst du mit der Zuweisung $Kas = GUICtrlSetData(-1, "Kaserne") erreichen?
    Diese Zuweisung ist Bullshit. Die Rückgabe ist immer 0 bei Misserfolg,1 bei Erfolg oder -1 bei fehlerhaften Daten ,jenachdem was GUICtrlSetData zurückgibt.
    Nicht einfach irgendwas zusammentippen, sondern die Hilfe mal genauer lesen.

    Btw, dieser Codeblock wird niemals zur ausgeführt:

    AutoIt
    While 1
       Select
       	 Case $msg = $Kas
    			$iauskas = _AusbildungKaserne("Soldatenausbildung", "Anzahl der Soldaten")
    			If $iauskas > 1 Then MsgBox(0, "Soldatenanzahl zur Ausbildung", $iauskas)
    			   EndSelect
    			WEnd
    ;---------------;

    Der Code Steht nach deiner Hautschleife und diese verlässt du durch Exit, was dein Script beendet.
    Zum Glück wird diese Schleife nicht ausgefüht weil $Kas den Wert 1 hat und gleichzusetzen mit $Button1 ist.
    Controlids werden fortlaufend nummeriert und 1 entspricht dem 1. Control welches du erstellt hast.

  • Ich glaub ich muss mich erstmals entschuldigen.
    Ich habe mich gestern Abend und heute Morgen hingesetzt und habe nochmal durch alle meine Bücher durchgelesen und festgestellt das sich C++ Erfahrungen mit den erstellen von Scripten in AutoIt doch sehr beißt.
    Ich dachte mit AutoIt müsste ich eine Handvoll neue Befehle etc lernen, da ich ja aus C++ soviel "hätte" übernehmen können.
    Aber anscheinend sind es doch ein paar mehr Befehle die mir noch Fremd sind und die Verknüpfung von Funktionen gestaltet sich in AutoIt auch ganz anders als in C++.
    Ich werde mir mal ein paar Scripte anschauen und versuchen sie selber per Wiki und der Hilfe auseinander zu nehmen und die Verknüpfungen der Funktionen so besser verstehen zu können.