GUI Fenster aktuallisieren?

  • Da ich mich nicht gut mit GUI-Fenstern auskenne, kann ich folgenes Problem nicht lösen :(
    Das Program soll so aussehen (das habe ich zumindest noch hinbekommen):
    [Blockierte Grafik: http://xxluke.xx.funpic.de/Bla.jpg]
    Der Bereich Rechts ist egal. Aber in der Group "Programme" habe ich meine Probleme.
    Man soll auf ein Programm aus der Liste klicken und dann auf "Wählen". Dann soll unten nicht mehr "Kein Programm ausgewählt" stehen, und die Buttons sollen dementsprechend auch entweder Disabled sein, oder das ausgewählte Programm starten.
    Wie funktioniert das jetzt, dass sobald man auf den Programmnamen geklickt hat, sich die Buttons (1)/der Text(2) verändern? Kann man das eigentlich auch so machen, dass man nicht extra auf "Auswählen" klicken muss(3)?
    Mit der AutoIt-Hilfe werde ich irgentwie auch nicht schlauer.

    [autoit]

    #include <ButtonConstants.au3>
    #include <DateTimeConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListBoxConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    ;--------Den folgenen Abschnitt weiß ich--------
    $Hauptfenster = GUICreate("Program1", 513, 358, 195, 126)
    $Willkomen = GUICtrlCreateLabel("Moin!", 8, 8, 190, 28)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
    $Text = GUICtrlCreateLabel("Hier kommt noch was:", 304, 232, 162, 17)
    $Text = GUICtrlCreateLabel("...", 304, 264, 192, 81)
    GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
    $Kalender = GUICtrlCreateMonthCal("2009/10/01", 304, 40, 180, 164)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Kalender_Text = GUICtrlCreateLabel("Kalender:", 304, 16, 81, 17)
    $MainGroup = GUICtrlCreateGroup("Programme", 8, 40, 281, 313)
    ;--------Aber jetzt nicht mehr :( -------------
    $Programme = GUICtrlCreateList("", 16, 64, 209, 162) ;Liste
    GUICtrlSetData($Programme, "Programm 1")
    GUICtrlSetData($Programme, "Programm 2")
    $Selectet_Pro = GUICtrlCreateLabel("Kein Programm ausgewählt!", 16, 248, 247, 17)
    $Starten = GUICtrlCreateButton("Starten", 16, 272, 169, 41, 0)
    $Hilfe = GUICtrlCreateButton("Hilfe", 192, 272, 89, 41, 0)
    $Beschreibung = GUICtrlCreateButton("Beschreibung", 16, 320, 129, 25, 0)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Erstellt = GUICtrlCreateButton("Erstellt", 152, 320, 129, 25, 0)
    $Auswaehlen = GUICtrlCreateButton("Wählen", 232, 64, 49, 161, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $Auswaehlen
    MsgBox(0,"","'Auswählen' wurde geklickt")
    ;--------------------Und die kann ich wieder selber-----------
    Case $msg = $Starten
    MsgBox(0,"","'Starten' wurde geklickt")
    Case $msg = $Hilfe
    MsgBox(0,"","'Hilfe' wurde geklickt")
    Case $msg = $Erstellt
    MsgBox(0,"","'Erstellt' wurde geklickt")
    Case $msg = $Beschreibung
    MsgBox(0,"","'Beschreibung' wurde geklickt")
    EndSelect
    WEnd

    [/autoit]
  • [autoit]

    GUICtrlSetData($Selectet_Pro, "Jetzt wurde "&GUICtrlRead(GUICtrlRead($Programme))&" ausgewählt")
    GUICtrlSetState($Starten, $GUI_DISABLE) ;deaktiviert den button = grau und nicht anklickbar
    GUICtrlSetState($Starten, $GUI_ENABLE) ;aktiviert den button

    [/autoit]
    Zitat

    dass man nicht extra auf "Auswählen" klicken muss(3)?

    [autoit]

    Case $msg = $Programme

    [/autoit]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • So kannst du es machen, damit du feststellen kannst, wenn sich die Auswahl ändert

    Spoiler anzeigen
    [autoit]

    #include <GuiListBox.au3>
    #include <GUIConstantsEx.au3>
    #include <ListBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    #Region ### START Koda GUI section ### Form=
    ;--------Den folgenen Abschnitt weiß ich--------
    $Hauptfenster = GUICreate("Program1", 513, 358, 195, 126)
    $Willkomen = GUICtrlCreateLabel("Moin!", 8, 8, 190, 28)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
    $Text = GUICtrlCreateLabel("Hier kommt noch was:", 304, 232, 162, 17)
    $Text = GUICtrlCreateLabel("...", 304, 264, 192, 81)
    GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
    $Kalender = GUICtrlCreateMonthCal("2009/10/01", 304, 40, 180, 164)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Kalender_Text = GUICtrlCreateLabel("Kalender:", 304, 16, 81, 17)
    $MainGroup = GUICtrlCreateGroup("Programme", 8, 40, 281, 313)
    ;--------Aber jetzt nicht mehr :( -------------
    $Programme = GUICtrlCreateList("", 16, 64, 209, 162) ;Liste
    GUICtrlSetData($Programme, "Programm 1")
    GUICtrlSetData($Programme, "Programm 2")
    $Selectet_Pro = GUICtrlCreateLabel("Kein Programm ausgewählt!", 16, 248, 247, 17)
    $Starten = GUICtrlCreateButton("Starten", 16, 272, 169, 41, 0)
    $Hilfe = GUICtrlCreateButton("Hilfe", 192, 272, 89, 41, 0)
    $Beschreibung = GUICtrlCreateButton("Beschreibung", 16, 320, 129, 25, 0)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Erstellt = GUICtrlCreateButton("Erstellt", 152, 320, 129, 25, 0)
    $Auswaehlen = GUICtrlCreateButton("Wählen", 232, 64, 49, 161, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $Auswaehlen
    MsgBox(0, "", "'Auswählen' wurde geklickt")
    ;--------------------Und die kann ich wieder selber-----------
    Case $msg = $Starten
    MsgBox(0, "", "'Starten' wurde geklickt")
    Case $msg = $Hilfe
    MsgBox(0, "", "'Hilfe' wurde geklickt")
    Case $msg = $Erstellt
    MsgBox(0, "", "'Erstellt' wurde geklickt")
    Case $msg = $Beschreibung
    MsgBox(0, "", "'Beschreibung' wurde geklickt")
    EndSelect
    WEnd

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

    ;Funktion die bei einer Änderung der Auswahl reagiert
    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($Programme) Then $hWndListBox = GUICtrlGetHandle($Programme)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Niederwertiges Wort (WORD)
    $iCode = BitShift($iwParam, 16) ; Höherwertiges Wort (WORD)

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

    Switch $hWndFrom
    Case $Programme, $hWndListBox
    Switch $iCode
    Case $LBN_SELCHANGE ; Wird gesendet, wenn die Auswahl in einer ListBox geändert wurde
    $aus = _GUICtrlListBox_GetCurSel($Programme) ;Index der Auswahl
    $Text = _GUICtrlListBox_GetText($Programme, $aus) ;Text der Auswahl
    If $aus <> -1 Then ;falls ein Programm angeklickt wurde
    GUICtrlSetData($Selectet_Pro, $Text & " ausgewählt")
    Else
    GUICtrlSetData($Selectet_Pro, "nix")
    EndIf
    MsgBox(0, 0, "Programm starten")
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]

    Schau dir dazu mal die _GuictrlListBox Funktionen an

  • Hallo Luke4321,

    noch eine Möglichkeit (wenn auch nicht so elegant/ausbaufähig, wie die von Tweaky:(

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <DateTimeConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListBoxConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Global $ProgOld = " "

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

    #Region ### START Koda GUI section ### Form=
    ;--------Den folgenen Abschnitt weiß ich--------
    $Hauptfenster = GUICreate("Program1", 513, 358, 195, 126)
    $Willkomen = GUICtrlCreateLabel("Moin!", 8, 8, 190, 28)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
    $Text = GUICtrlCreateLabel("Hier kommt noch was:", 304, 232, 162, 17)
    $Text = GUICtrlCreateLabel("...", 304, 264, 192, 81)
    GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
    $Kalender = GUICtrlCreateMonthCal("2009/10/01", 304, 40, 180, 164)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Kalender_Text = GUICtrlCreateLabel("Kalender:", 304, 16, 81, 17)
    $MainGroup = GUICtrlCreateGroup("Programme", 8, 40, 281, 313)
    ;--------Aber jetzt nicht mehr :( -------------
    $Programme = GUICtrlCreateList("", 16, 64, 209, 162) ;Liste
    GUICtrlSetData($Programme, "Programm 1")
    GUICtrlSetData($Programme, "Programm 2")
    $Selectet_Pro = GUICtrlCreateLabel("Kein Programm ausgewählt!", 16, 248, 247, 17)
    $Starten = GUICtrlCreateButton("Starten", 16, 272, 169, 41, 0)
    $Hilfe = GUICtrlCreateButton("Hilfe", 192, 272, 89, 41, 0)
    $Beschreibung = GUICtrlCreateButton("Beschreibung", 16, 320, 129, 25, 0)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Erstellt = GUICtrlCreateButton("Erstellt", 152, 320, 129, 25, 0)
    $Auswaehlen = GUICtrlCreateButton("Wählen", 232, 64, 49, 161, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)

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

    #EndRegion ### END Koda GUI section ###

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

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()
    $s = GUICtrlRead($Programme)
    ;ConsoleWrite("Alte Auswahl: " & $ProgOld & " neue Auswahl: " & $s & @CRLF)
    If $ProgOld <> $s Then
    If GUICtrlRead($Programme) = "" Then
    GUICtrlSetState($Auswaehlen, $GUI_DISABLE)
    GUICtrlSetData($Selectet_Pro,"Kein Programm ausgewählt!")
    Else
    GUICtrlSetState($Auswaehlen, $GUI_ENABLE)
    GUICtrlSetData($Selectet_Pro,"ausgewählt: " & $s)
    EndIf
    $ProgOld = $s
    EndIf
    Select
    Case $msg = $Auswaehlen
    MsgBox(0, "", "'Auswählen' wurde geklickt")
    ;--------------------Und die kann ich wieder selber-----------
    Case $msg = $Starten
    MsgBox(0, "", "'Starten' wurde geklickt")
    Case $msg = $Hilfe
    MsgBox(0, "", "'Hilfe' wurde geklickt")
    Case $msg = $Erstellt
    MsgBox(0, "", "'Erstellt' wurde geklickt")
    Case $msg = $Beschreibung
    MsgBox(0, "", "'Beschreibung' wurde geklickt")
    EndSelect
    WEnd

    [/autoit]


    mfg (Auto)Bert

  • Hab ich was verpasst oder kann GUIGetMsg keinen klick mehr ins listview erkennen? Bei meinem letzten proggie ging das ncoh... solltest aber vorher noch abfragen ob der listvieweintrag einen index <> 0 hat...
    autoBert Das was du da gemacht hast gibt aber nur den index zurück... wenn du den Wert haben willst musst du GUICtrlRead doppelt verwenden...

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Hallo FireFlyer,

    mit dem Klick auf ListBox (nicht ListView) hast du recht, dieser wird von GuiGetMsg() erkannt, deshalb angepasstes Skript:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <DateTimeConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListBoxConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    ;--------Den folgenen Abschnitt weiß ich--------
    $Hauptfenster = GUICreate("Program1", 513, 358, 195, 126)
    $Willkomen = GUICtrlCreateLabel("Moin!", 8, 8, 190, 28)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
    $Text = GUICtrlCreateLabel("Hier kommt noch was:", 304, 232, 162, 17)
    $Text = GUICtrlCreateLabel("...", 304, 264, 192, 81)
    GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
    $Kalender = GUICtrlCreateMonthCal("2009/10/01", 304, 40, 180, 164)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Kalender_Text = GUICtrlCreateLabel("Kalender:", 304, 16, 81, 17)
    $MainGroup = GUICtrlCreateGroup("Programme", 8, 40, 281, 313)
    ;--------Aber jetzt nicht mehr :( -------------
    $Programme = GUICtrlCreateList("", 16, 64, 209, 162) ;Liste
    GUICtrlSetData($Programme, "Programm 1")
    GUICtrlSetData($Programme, "Programm 2")
    $Selectet_Pro = GUICtrlCreateLabel("Kein Programm ausgewählt!", 16, 248, 247, 17)
    $Starten = GUICtrlCreateButton("Starten", 16, 272, 169, 41, 0)
    $Hilfe = GUICtrlCreateButton("Hilfe", 192, 272, 89, 41, 0)
    $Beschreibung = GUICtrlCreateButton("Beschreibung", 16, 320, 129, 25, 0)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Erstellt = GUICtrlCreateButton("Erstellt", 152, 320, 129, 25, 0)
    $Auswaehlen = GUICtrlCreateButton("Wählen", 232, 64, 49, 161, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)

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

    #EndRegion ### END Koda GUI section ###

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

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()
    Select
    Case $msg = $Programme
    If GUICtrlRead($Programme) = "" Then
    GUICtrlSetState($Auswaehlen, $GUI_DISABLE)
    GUICtrlSetData($Selectet_Pro,"Kein Programm ausgewählt!")
    Else
    GUICtrlSetState($Auswaehlen, $GUI_ENABLE)
    GUICtrlSetData($Selectet_Pro,"ausgewählt: " & GUICtrlRead($Programme))
    EndIf
    Case $msg = $Auswaehlen
    MsgBox(0, "", "'Auswählen' wurde geklickt")
    ;--------------------Und die kann ich wieder selber-----------
    Case $msg = $Starten
    MsgBox(0, "", "'Starten' wurde geklickt")
    Case $msg = $Hilfe
    MsgBox(0, "", "'Hilfe' wurde geklickt")
    Case $msg = $Erstellt
    MsgBox(0, "", "'Erstellt' wurde geklickt")
    Case $msg = $Beschreibung
    MsgBox(0, "", "'Beschreibung' wurde geklickt")
    EndSelect
    WEnd

    [/autoit]


    GuiCtrlRead liest aus der ListBox aber tatsächlich den Text der ausgewählt ist, darfst es gerne testen ;)

    mfg (Auto)Bert