Wie erstelle ich eine GUI ?

  • Hallo,

    wie erstelle ich eine GUI?
    Und zwar geht es mir um die einfache Grundform einer GUI
    mit der "GUIcreate"- Anweisung.
    In der AutoIt-Hilfe oder im Tutorial sind die Beispiele leider oft zu speziell.
    Man müßte an den Scriptvorschlägen meist etwas ändern,
    für Anfänger ist das leider nicht immer leicht zu machen.

    MfG Osterhase

  • [autoit]

    ; Beispiel 1
    #include <GUIConstants.au3>

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

    GUICreate("My GUI") ; Legt ein Dialogfenster an, das zentriert angezeigt wird
    GUISetState (@SW_SHOW) ; zeigt ein leeres Dialogfenster an

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

    ; GUI starten bis der Dialog geschlossen wird
    While 1
    $msg = GUIGetMsg()

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    Wend

    [/autoit]

    Eigendlich ganz Einfach, genauso steht er Code in der Hilfe Datei

    mfg
    Toby

    P.S. Vielleicht Hilft es dir ja, wenn du dir die einzelne Befehle nochmal in der Hilfe Datei anguckst.

    Edit:
    Ja jetzt ist da eine While Schleife drin, aber irgendwie muss man dem GUI ja klar machen, dass er sich offen hält, sonst würde er sich ja sofort wieder schließen.

  • hi,
    ich würde dir raten koda zu benutzen (siehe unter scite > tools)
    da kannst du die elemente genau positionieren und dann einen autoit code generieren lassen ;)
    mfg
    autoit-freak

  • Danke Toby,

    aber da steht:
    ; GUI starten bis der Dialog geschlossen wird

    Ich möchte aber die GUI starten und im Vordergrund halten,
    bis ein anderes Fenster geschlossen wird.
    Beim Schließen dieses anderen Fensters soll Die GUI geschlossen werden,
    nicht nach einem Dialog.

    MfG Osterhase

  • hi

    [autoit]

    $gui=guicreate("...")
    ; inhalt ...
    guisetstate()

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

    while winexists("fenster")
    winsetontop($gui,"",1) ;ist an der spitze aller fenster...
    wend
    guidelete($gui)

    [/autoit]

    hab ich dich richtig verstanden?
    cya

  • @deutsch-autoit
    Ja, das Ding ist nicht schlecht, aber den Code den Koda alleine nur für ein GUI anlegt ist größe wie meiner, hier mal der von Koda:

    [autoit]

    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 452, 192, 125)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    @Osterhase, dann sag das doch, im ersten Beitrag von dir Stand was ganz anderes!
    Hier wird dir geholfen:
    https://autoit.de/index.php?page=Thread&amp;threadID=8773

    EDIT:
    Sorry, habe garnicht gesehen, dass der Beitrag auch schon von dir kahm.
    Also:

    [autoit]

    ; Beispiel 1
    #include <GUIConstants.au3>

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

    GUICreate("My GUI") ; Legt ein Dialogfenster an, das zentriert angezeigt wird
    GUISetState (@SW_SHOW) ; zeigt ein leeres Dialogfenster an

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

    ; GUI starten bis das Fenster koda geschlossen wird
    While 1
    If Not WinExists ( "koda" ) Then
    GuiDelete()
    EndIf
    Wend

    [/autoit]

    Einmal editiert, zuletzt von Toby-82 (24. November 2008 um 22:02)

  • du brauchst nur das zwischen den regions (lilane comments)
    also nur
    $Form1 = GUICreate("Form1", 633, 452, 192, 125)
    GUISetState(@SW_SHOW)

    der rest gehört nicht mehr zum gui anzeigen...
    das mit dem include is nur falls du besonderes für diese gui brauchst...
    aber ich mag keine includes... vergrößert die datei überflüssig

    und das mit der whileschleife ist:
    While 1
    $nMsg = GUIGetMsg()
    if $nMsg=-3 then Exit
    WEnd

    -3 heisst wenn man auf den schliesbsutton drückt...
    also wenn man au fschliessbutton drückt dann exit (beende programm)

  • Danke autoit-freak,

    ich habe das "Koda"- Hilfsprogramm erst heute entdeckt.
    Scite ist für Anfänger sehr umfangreich.
    Für mich ein Zusatzprogramm in das ich mich auch erst einarbeiten müßte.

    Was ich will, müßte doch auch mit der "GUIcreate"- Anweisung gehen.

    MfG Osterhase

  • Was ich will, müßte doch auch mit der "GUIcreate"- Anweisung gehen.


    @Osterhase
    Schau doch mal meinen Beitrag oben, da steht es drin.
    Du kannst es genauso übernehmen, muss nur den Fensternamen koda mit deinem Fenster austauschen.

  • Vielen Dank Toby,

    ich werde das mal ausprobieren, wie auch die anderen Vorschläge hier.

    Danke an alle und - bis dann erstmal.

    MfG Osterhase :)

  • Hallo,

    ich hab' das alles ausprobiert, und bin bis jetzt so weit gekommen:

    Spoiler anzeigen

    Jetzt hätte ich noch gern, daß direkt nach den Namen "Peter" bzw. "Klaus"
    (also in die gleiche Zeile, Scriptzeile 38 bzw.44) das aktuelle Datum eingefügt wird.
    Ich nehme an, daß das irgendwie mit einer Funktion geht ?

    Kann mir jemand helfen?

    MfG Osterhase :)

    2 Mal editiert, zuletzt von Osterhase (25. November 2008 um 21:29)

  • Danke BugFix,
    funktioniert einwandfrei! :)

    Noch was: Wie mache ich es, daß, wenn ich die GUI bzw. das Fenster
    "Macromedia Flash Player 6" in die Taskleiste minimiere,
    auch das Fenster bzw. die GUI minimiert wird.
    Genauso soll es sich verhalten, wenn die GUI bzw.
    das Fenster aus der Taskleiste wieder hochgeholt wird.

    Die GUI und das Fenster sollen sozusagen aneinander "kleben".

    MfG Osterhase

  • [autoit]

    if wingetstate("blabla")==23 then guisetstate(@sw_minimize)

    [/autoit]

    23 steht fürs minimieren
    cya

    • Offizieller Beitrag
    [autoit]

    if wingetstate("blabla")==23 then guisetstate(@sw_minimize)

    [/autoit]

    23 steht fürs minimieren
    cya


    Das ist nur bedingt richtig. Ein Fenster kann als Statuswert eine Kombination von mehreren Werten annehmen. Und 23 ist nicht minimiert, sondern: Win ist minimiert UND Win existiert UND Win ist sichtbar UND Win ist enabled.

    Statusabfragen immer mit BitAnd auf den gewünschten Status:

    [autoit]

    If BitAND(WinGetState("Fenster-Titel oder GUI-ID"), 16) Then ; Fenster wurde minimiert
    WinSetState("Fenster 2", '', @SW_MINIMIZE)
    ElseIf Not BitAND("Fenster-Titel oder GUI-ID", 16) Then ; Fenster wurde wiederhergestellt
    WinSetState("Fenster 2", '', @SW_RESTORE)
    EndIf

    [/autoit]
  • @ deutsch-autoit,

    bei mir hat das aber nur mit "(@SW_SHOWMINIMIZED)" funktioniert:

    [autoit]


    ; Wenn das Fenster "Macromedia Flash Player 6" minimiert ist, wird die GUI minimiert
    If WinGetState("Macromedia Flash Player 6")=23 Then GUISetState(@SW_SHOWMINIMIZED)

    ; Wenn das Fenster "Macromedia Flash Player 6" minimiert ist, wird die GUI minimiert,
    ; auch wenn schon ein Name eingegeben wurde
    If WinGetState("Macromedia Flash Player 6")=31 Then GUISetState(@SW_SHOWMINIMIZED)

    [/autoit]

    dennoch Danke
    MfG Osterhase :)

  • @ BugFix
    Prima, genau das was ich wollte.

    Jetzt habe ich noch ein paar Fragen:

    1. Wie mache ich es, daß, wenn ich mit der Maus auf eine bestimmte Position des Fensters
    klicke, der Mauszeiger mit "Mousemove" an eine andere Position geschoben wird
    ?
    Ist das wieder was mit BitAND?

    2. Wie bekomme ich den AutoIt-Eintrag aus der Taskleiste (nicht aus dem systray) weg?

    3. Wie blockiere ich das "Verkleinern"-Symbol (nicht das zum Minimieren) oben rechts im Fenster?

    4. Wie kann ich die Namenseingaben mit Hotkeys machen, so daß, wenn ich z.B. "K" drücke,
    "Klaus" an das Fenster gesendet wird? Also das ganze Skript genauso, bloß ohne GUI.
    (Das wäre dann sicherlich ein anderer thread, auch wenn die Überschrift hier jetzt schon nicht mehr ganz richtig ist.
    Ich würde den thread hier auch umbenennen, wenn ich wüßte wie er besser heißen könnte.)

    Ich habe Deinen Beitrag " Wie editiere ich meinen Post richtig." gelesen.
    Was bedeutet:"- Text mit Einrückungen als Code, dann bleiben die Tabulatorsprünge erhalten"?
    (Hätte ich die Frage besser dort stellen sollen?)

    Quellcode kann ich hier leider nicht herauskopieren, wenn ich ihn wie in dem Beitrag angegeben editiere.
    Ist das so richtig oder mache ich was falsch?

    Danke für die Hilfe, auch im voraus.

    MfG Osterhase :)

    4 Mal editiert, zuletzt von Osterhase (26. November 2008 um 23:48)

  • hi
    erstell einfach einen label mit keinem text...
    $flaeche=guictrlcreatelabel("",10,10,100,100)

    und dann checkst du in einer while schleife ob geklickt wurde
    if $gmsg=$flaeche then mousemove(0,0) ; oder so ähnlich

    oder meinst du was anderes?

    BugFix : ja das weiss ich schon, aber ich wollte es einfach ausdrücken...
    ist ja klar, dass es visible ist und enabled ^^
    aber danke für deine korrektur


    edit:
    zu 2. meinst du das mit dem minimiert den minimize-button?
    wenn ja, dann:
    guicreate("test",100,100,default,default,default,0x80)

    0x80 macht draus nen tool-fenster

    systray is ja #notrayicon, aber danach suchst du nicht

    zu 3.:
    guicreate("test",100,100,default,default,0x8000)

    den style bekommst du am besten mit koda raus..
    beim object inspector steht ganz unten "stile"
    dort kannst du z.B. minimize button ausschalten und dann den quellcode sehen (F9)

    zu 4.:
    entweder machst du mit hotkeys und einer funktion
    wo dann z.B. ein global variable geändert wird in $var="Klaus"
    und die gui liest das dann oder such nach _ispressed und #include <misc.au3>
    da kannst du checken, welche taste gedrückt wurde usw


    zu das mit dem eindrücken...
    du sollst eine codebox machen:

    Code
    code


    damit auch eindrückungen erhalten bleiben, z.B. tabs:

    Code
    eingerückt
            wenig "
       noch weniger
                                                                 sehr viel... :P

    wenn du das ganz normal so machst, geht das nicht (ohne codebox gehts nicht)

    Einmal editiert, zuletzt von deutsch-autoit (27. November 2008 um 20:29)