GUI Controls

  • Ich habe mich nun seit langer Zeit wieder etwas mehr mit AutoIt beschäftigt und hab mir da auch gleich etwas großes vorgenommen... ;)
    Nur habe ich so einiges vergessen und hoffe nun auf Hilfe eurerseits.

    Nun zum Problem.
    Ich bin gerade dabei mir ein kleines Spiel zu scripten, bin noch nicht weit, aber schon auf die ersten Probleme gestoßen...

    Hier vorerst der Script:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Include <String.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $Form1 = GUICreate("frogiih's World", 818, 559, 289, 108)
    $Progress1 = GUICtrlCreateProgress(0, 528, 814, 9)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $button_gesinnung = GUICtrlCreateButton("Gesinnung", 736, 120, 75, 25)
    $button_fertigkeiten = GUICtrlCreateButton("Fertigkeiten", 736, 96, 75, 25)
    $button_option = GUICtrlCreateButton("Optionen", 736, 72, 75, 25)

    [/autoit] [autoit][/autoit] [autoit]

    $action = GUICtrlCreatePic("", 8, 152, 545, 369)
    $pic_map = GUICtrlCreatePic("", 8, 8, 180, 132)
    $pic_head = GUICtrlCreatePic("", 192, 8, 356, 132)
    $Group1 = GUICtrlCreateGroup("Auswahl", 552, 144, 265, 377)

    [/autoit] [autoit][/autoit] [autoit]

    $MenuItem_acc = GUICtrlCreateMenu("Account")
    $MenuItem_cre_acc = GUICtrlCreateMenuItem("Create Account", $MenuItem_acc)
    $MenuItem_login = GUICtrlCreateMenuItem("Log In", $MenuItem_acc)
    $MenuItem_help = GUICtrlCreateMenu("Help")
    $MenuItem_how = GUICtrlCreateMenuItem("How To Play", $MenuItem_help)

    [/autoit] [autoit][/autoit] [autoit]

    $txt_name = GUICtrlCreateLabel("Name:", 560, 80, 35, 17)
    $txt_Rasse = GUICtrlCreateLabel("Rasse:", 560, 100, 37, 17)
    $txt_geschlecht = GUICtrlCreateLabel("Geschlecht", 560, 120, 58, 17)

    [/autoit] [autoit][/autoit] [autoit]

    $input_name = GUICtrlCreateInput("-", 624, 80, 105, 21, BitOR($ES_CENTER,$ES_AUTOHSCROLL,$ES_READONLY), 0)
    $input_rasse = GUICtrlCreateInput("-", 624, 100, 105, 21, BitOR($ES_CENTER,$ES_AUTOHSCROLL,$ES_READONLY), 0)
    $input_geschlecht = GUICtrlCreateInput("-", 624, 120, 105, 21,BitOR($ES_CENTER,$ES_AUTOHSCROLL,$ES_READONLY), 0)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $MenuItem_cre_acc
    $cre_input_id = GUICtrlCreateInput("ID", 584, 232, 209, 21)
    $cre_input_pw = GUICtrlCreateInput("Passwort", 584, 264, 209, 21)
    $txt_cre_acc = GUICtrlCreateLabel("Create Account", 616, 192, 139, 28)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
    $button_cancel = GUICtrlCreateButton("Cancel", 712, 464, 75, 25)
    $button_confirm = GUICtrlCreateButton("Confirm", 592, 464, 75, 25)
    FileWrite("ID.ini", GUICtrlRead($cre_input_id))
    FileWrite("Passwort.ini", GUICtrlRead($cre_input_pw))
    $geschlecht_M = GUICtrlCreateRadio("Männlich", 584, 290, 113, 17)
    $geschlecht_W = GUICtrlCreateRadio("Weiblich", 704, 290, 113, 17)
    $Group2 = GUICtrlCreateGroup("Rasse", 584, 312, 209, 129)
    $radio_rasse1 = GUICtrlCreateRadio("Rasse1", 600, 335, 113, 17)
    $radio_rasse2 = GUICtrlCreateRadio("Rasse2", 600, 359, 113, 17)
    $radio_rasse3 = GUICtrlCreateRadio("Rasse3", 600, 383, 113, 17)
    $radio_rasse4 = GUICtrlCreateRadio("Rasse4", 600, 407, 113, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

    Case $MenuItem_login
    $txt_login = GUICtrlCreateLabel("Join the Game!", 616, 192, 139, 28)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
    $input_id = GUICtrlCreateInput("ID", 584, 248, 209, 21)
    $input_pw = GUICtrlCreateInput("Passwort", 584, 280, 209, 21)
    $checkbox_save = GUICtrlCreateCheckbox("Save ID and Passwort", 664, 312, 137, 17)
    $button_join = GUICtrlCreateButton("Join", 592, 352, 75, 25)
    $input_name = GUICtrlCreateInput(Fileread("ID.ini"), 624, 80, 105, 21, BitOR($ES_CENTER,$ES_AUTOHSCROLL,$ES_READONLY), 0)
    $button_cancel2 = GUICtrlCreateButton("Cancel", 712, 352, 75, 25)

    Case $button_gesinnung
    $Inhalt = GUICtrlCreatePic("", 560, 152, 252, 364)
    Case $button_fertigkeiten
    $Inhalt = GUICtrlCreatePic("", 560, 152, 252, 364)
    Case $button_option
    $Inhalt = GUICtrlCreatePic("", 560, 152, 252, 364)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Ich habe mit dem Account erstellen & Einloggen begonnen.

    1. Problem: Ich gehe auf Account erstellen, dann erscheint rechts ein Feld mit Input's und buttons etc.
    Jedoch sollen an dieser Stelle auch andere Dinge hin, wie zB Das "Log In", also wenn ich zuerst auf Creat klicke, dann auf LogIn überlappen sich die einzelnen Ansichten. Also bräuchte ich etwas, das die Buttons, Input's etc einfach "weglöscht" und dann das gesuchte an dessen Stelle setzt.

    2. Problem: Sobald ich auf "Create Account" gehe erscheinen die gewünschten Sachen, wie zB die radios oder die Buttons.
    Wenn man Beispielsweise auf "Confirm" klickt, soll eine MsgBox kommen.
    Jedoch kommt diese MsgBox sofort, wenn man auf Create Account geht.
    Also habe ich eine neue Case mit dem gewünschten button errichtet und dort die Funktion nocheinmal druntergschrieben, jedoch ist dieser dann noch nicht zugewiesen...


    Ich hoffe ihr könnt mir weiterhelfen,
    grüße.

    2 Mal editiert, zuletzt von ExTeSs (28. Januar 2011 um 18:35)

  • Ich würde die Controls nicht überlappend erzeugen, dass kann für Verwirrung sorgen. Außerdem würde ich die Controls nicht während das Script läuft löschen und neu erzeugen, sondern nur deaktivieren oder verstecken mit GUICtrlSetState.

  • hm...
    kann ich die denn dann einfach aufzählen?
    Oder muss ich dann jeden einzelnen wieder ausschreiben?

    4 Mal editiert, zuletzt von ExTeSs (28. Januar 2011 um 14:37)

  • Am Besten erstellst du ein Array mit den IDs, dann kannst du es durchlaufen lassen.

  • Am Besten erstellst du ein Array mit den IDs, dann kannst du es durchlaufen lassen.


    Ist mir gerade auch einegfallen... Danke.. :D
    Dann aber noch etwas zu dem Punkt, wenn ich sie jetzt gelöscht habe, funktioniert es.
    Dieses soll aber auch funktionieren, wenn ich nicht vorher auf Create Account war, denn wenn ich sofort auf Log In gehe, sind die Variablen nicht zugewiesen...
    Also wie lässt sich dieses am besten klären?
    Per If-Schleife? Wenn ja, mit welchem Befehl?

  • Es gibt mehrere Möglichkeiten, eine wäre die Controls schon am anfang zu erstellen mit dem Status unsichtbar. Dann wären die Inputs alle = "", wenn man sie nicht ausfüllt bzw direkt auf Log In klickt.
    Eine andere wäre dem Array alles "" zuzuweisen. Man könnte das dann auch durch z.B. abspeichern der LogIn Daten direkt ausfüllen lassen, wie die Inputs.

  • könntest du mir evtl ein Beispiel zeigen?
    Denn sry, aber ich hab davon gerade kaum was verstanden :wacko:

  • Zu der 2. Frage:
    Dazu müsstest du anstatt

    Spoiler anzeigen
    [autoit]

    Case $MenuItem_cre_acc
    $cre_input_id = GUICtrlCreateInput("ID", 584, 232, 209, 21)
    $cre_input_pw = GUICtrlCreateInput("Passwort", 584, 264, 209, 21)
    $txt_cre_acc = GUICtrlCreateLabel("Create Account", 616, 192, 139, 28)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
    $button_cancel = GUICtrlCreateButton("Cancel", 712, 464, 75, 25)
    $button_confirm = GUICtrlCreateButton("Confirm", 592, 464, 75, 25)
    FileWrite("ID.ini", GUICtrlRead($cre_input_id))
    FileWrite("Passwort.ini", GUICtrlRead($cre_input_pw))
    $geschlecht_M = GUICtrlCreateRadio("Männlich", 584, 290, 113, 17)
    $geschlecht_W = GUICtrlCreateRadio("Weiblich", 704, 290, 113, 17)
    $Group2 = GUICtrlCreateGroup("Rasse", 584, 312, 209, 129)
    $radio_rasse1 = GUICtrlCreateRadio("Rasse1", 600, 335, 113, 17)
    $radio_rasse2 = GUICtrlCreateRadio("Rasse2", 600, 359, 113, 17)
    $radio_rasse3 = GUICtrlCreateRadio("Rasse3", 600, 383, 113, 17)
    $radio_rasse4 = GUICtrlCreateRadio("Rasse4", 600, 407, 113, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

    [/autoit]


    Zum Beispiel

    Spoiler anzeigen
    [autoit]

    Case $MenuItem_cre_acc
    $cre_input_id = GUICtrlCreateInput("ID", 584, 232, 209, 21)
    $cre_input_pw = GUICtrlCreateInput("Passwort", 584, 264, 209, 21)
    $txt_cre_acc = GUICtrlCreateLabel("Create Account", 616, 192, 139, 28)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
    $button_cancel = GUICtrlCreateButton("Cancel", 712, 464, 75, 25)
    $button_confirm = GUICtrlCreateButton("Confirm", 592, 464, 75, 25)
    $geschlecht_M = GUICtrlCreateRadio("Männlich", 584, 290, 113, 17)
    $geschlecht_W = GUICtrlCreateRadio("Weiblich", 704, 290, 113, 17)
    $Group2 = GUICtrlCreateGroup("Rasse", 584, 312, 209, 129)
    $radio_rasse1 = GUICtrlCreateRadio("Rasse1", 600, 335, 113, 17)
    $radio_rasse2 = GUICtrlCreateRadio("Rasse2", 600, 359, 113, 17)
    $radio_rasse3 = GUICtrlCreateRadio("Rasse3", 600, 383, 113, 17)
    $radio_rasse4 = GUICtrlCreateRadio("Rasse4", 600, 407, 113, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

    [/autoit] [autoit][/autoit] [autoit]

    ;... Rest des Skripts

    [/autoit] [autoit][/autoit] [autoit]

    Func CreateAccount()
    $WA = 1
    While $WA = 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $button_confirm
    FileWrite("ID.ini", GUICtrlRead($cre_input_id))
    FileWrite("Passwort.ini", GUICtrlRead($cre_input_pw))
    MsgBox(0, "", "Text der kommen soll")
    $WA = 0
    EndSwitch
    WEnd

    [/autoit]


    schreiben.
    So müsste es (meiner meinung nach) klappen.

    P.S.: Setzt dein Skript doch das nächste Mal in einen Spoiler und wähle eine bessere Überschrift als "Hilfe..." ;)

  • So, hab die Controls am Anfang plaziert & versteckt.
    Sobald man nun auf Log In oder Create Account klickt, werden diese sichtbar.

    Somit hat sich das 2. Problem nun geklärt, trotzdem Danke Bär, deine Tipps werd ich mir zu Herzen nehmen :thumbup:

    Jedoch ist trotzdem noch das Problem da, dass wenn ich auf Create Account und dann auf Log In klicke, dass beide Controls noch da sind...

  • alles klärchen ;)
    kann geclosed werden.

    3 Mal editiert, zuletzt von ExTeSs (28. Januar 2011 um 18:35)