GUICtrlCreateList deaktivieren wenn Checkbox aktiviert

  • Hi Leute,

    ich bin neu hier im Forum und habe ein kleines Problem.

    Ich habe miir eine GUI mit AutoIT geschrieben.
    Jetzt möchte ich, dass wenn eine Checkbox aktiviert wurde, ein GUICtrlCreateList Feld deaktiviert wird.
    Allerdings bekomme ich das noch nicht so wirklich gebacken. ;(

    Auszug aus meinem Code:

    Code
    $isall = GUICtrlCreateCheckbox("Select all", 8, 90, 90, 41)
    $hListBox = GUICtrlCreateList("", 144, 45, 185, 71)
    
    
    If $isall = $GUI_CHECKED Then
    	GUISetState(-1, $GUI_DISABLE)
    Else
    	GUISetState()
    EndIf

    Kann man mir mal bitte die Augen öffnen.

    Danke und Gruß
    Xabbu

    Einmal editiert, zuletzt von xabbu (29. Juni 2010 um 20:24) aus folgendem Grund: gelöst. Danke für die schnelle Hilfe!

  • so sollte es gehn:

    [autoit]

    If bitand(guictrlread($isall),$GUI_CHECKED)=$GUI_CHECKED Then
    GUICtrlSetState($hListBox, $GUI_DISABLE)
    Else
    GUICtrlSetState($hListBox, $GUI_Enable)
    EndIf

    [/autoit]

    wenn du nicht weißt wo du es einsetzen musst dann bitte den ganzen Code posten ;)

  • Hier ist ein Beispielcode der das "Problem" aufklären sollte:

    [autoit]

    #include <GUIConstantsEx.au3>

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

    $Form1 = GUICreate("List + Checkbox", 228, 217)
    $List1 = GUICtrlCreateList("", 8, 8, 209, 175)
    GUICtrlSetData($List1,"Aktiviert!")
    GUICtrlSetData($List1,"Deaktiviert!")
    $Checkbox1 = GUICtrlCreateCheckbox("List Toggle", 16, 192, 193, 17)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Checkbox1
    If GUICtrlRead($Checkbox1) = $Gui_Checked Then
    GUICtrlSetData($List1,"Aktiviert!")
    GUICtrlSetState($List1,$Gui_Enable)
    Else
    GUICtrlSetData($List1,"Deaktiviert!")
    GUICtrlSetState($List1,$Gui_Disable)
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Danke für den Hinweis :)
    Sonst hab ich immer nur mit einem Status gearbeitet (bisher keine Fehler), werd dann aber
    wohl auf deine Methode umsteigen! :thumbup:

    PS: Plural von Status = Statusse oder Status (Langes U) :P

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Danke schön für die schnellen Antworten, aber irgendwie raffe ich es noch nicht.

    Das mit dem BitAnd habe ich noch nicht so richtig verstanden, werde ich mir aber mal näher ansehen.

    Schnitzel, wo muß das dann jetzt hin?

    Hier mal das ganze Script:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=ruoff.ico
    #AutoIt3Wrapper_outfile=connector.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_Comment=Connector by Terra-IT
    #AutoIt3Wrapper_Res_Description=Connector zum verbinden von ausländischen Filialen ohne die MasterGUI zu verwenden
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.1
    #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=p
    #AutoIt3Wrapper_Res_LegalCopyright=Terra-IT
    #AutoIt3Wrapper_Res_SaveSource=y
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Res_Field=Made By|Soeren Mindorf
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ; *** Author: S. Mindorf 27.06.2010 ***
    ; *** Version 1.0 *Rewrite*, now with double click

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

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

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

    $version = "1.0 (27.06.2010)"
    $user = @UserName

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

    $Form1 = GUICreate("Connector", 381, 236, 306, 216)
    $help = GUICtrlCreateMenu("?")
    $hilfe = GUICtrlCreateMenuItem("Hilfe", $help)
    $about = GUICtrlCreateMenuItem("Info", $help)
    $OK = GUICtrlCreateButton("OK", 152, 160, 90, 41, 0)
    $Cancel = GUICtrlCreateButton("Cancel", 248, 160, 90, 41, 0)
    $Label1 = GUICtrlCreateLabel("Wähle den Server aus:", 8, 45, 113, 17)
    $isdebug = GUICtrlCreateCheckbox("GUI Debug",8,60,90,41)
    $isall = GUICtrlCreateCheckbox("Select all", 8, 90, 90, 41)

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

    $h1 = "Dieses Programm dient zur schnellen Verbindung zum Server."
    $h2 = "Die ini-Datei befindet sich in %appdata% und muss wie folgt aussehen: [Serverip] server=servername,...,..."

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    $var = IniRead( @AppDataDir& "/connector.ini", "Serverip", "server", "NotFound")
    $IP = StringSplit( $var, "," )

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

    $hListBox = GUICtrlCreateList("", 144, 45, 185, 71)
    GUISetState(@SW_SHOW)

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

    $Serverlst = $hListBox
    GUICtrlSetLimit(-1,200); to limit horizontal scrollin

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

    If $IP[0] = 1 Then;
    MsgBox(0, "Fehler", "Es befinden sich keine Server in der ini" )
    Exit
    Else
    For $i = 1 To $IP[0]
    _GUICtrlListBox_AddString($hListBox, '' & $IP[$i])
    Next
    EndIf

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Cancel; Cancel wurde gedrückt
    Exit
    Case $OK; OK wurde gedrückt
    SEP ()
    Exit
    Case $about
    MsgBox(0, "About", "Erstellt von Soeren Mindorf" & @LF & $version)
    Case $hilfe
    MsgBox(0, "Hilfe", $h1 & @LF & $h2)
    EndSwitch
    WEnd

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

    ;$hListBox = GUICtrlCreateList("", 144, 45, 185, 71)

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($hListBox) Then $hWndListBox = GUICtrlGetHandle($hListBox)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $hListBox, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    ;MsgBox(0, "Doppelklick", "Doppelklick Funktion start")
    SEP ()
    Exit
    ; case 1
    ; ConsoleWrite("Click" & @CRLF)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

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

    Func SEP()
    MsgBox(0, "in Funktion SEP", "Funktion SEP")
    If GUICtrlRead($isdebug) = 1 Then
    MsgBox(0, "Debug ist an!", "Debug")
    If GUICtrlRead($Serverlst) = "big.terra-it.de" then
    MsgBox(0, "big", "big")
    Else
    MsgBox(0, "alte Version", GUICtrlRead($Serverlst))
    EndIf
    Else
    if GUICtrlRead($Serverlst) = "big.terra-it.de" then
    MsgBox(0, "big1", "big1")
    Else
    MsgBox(0, "alte GUI Version", "Alte GUI", 3)
    Endif
    Endif
    EndFunc

    [/autoit]

    Gruß
    Xabbu

  • PS: Plural von Status = Statusse oder Status (Langes U) :P

    ja laut Duden falsch, laut Umgangssprache aber richtig ;)

    Zitat von AutoBert

    da XovoxKingdom GuiCtrlRead benutzt, ist das kein Problem. Anders wäre es bei GuiCtrlGetState.

    ups hast natürlich recht^^
    habs wohl verwechselt...

    @xabbu

    so vielleicht?

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=ruoff.ico
    #AutoIt3Wrapper_Outfile=connector.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_Comment=Connector by Terra-IT
    #AutoIt3Wrapper_Res_Description=Connector zum verbinden von ausländischen Filialen ohne die MasterGUI zu verwenden
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.1
    #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=p
    #AutoIt3Wrapper_Res_LegalCopyright=Terra-IT
    #AutoIt3Wrapper_Res_SaveSource=y
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Res_Field=Made By|Soeren Mindorf
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ; *** Author: S. Mindorf 27.06.2010 ***
    ; *** Version 1.0 *Rewrite*, now with double click

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

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

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

    $version = "1.0 (27.06.2010)"
    $user = @UserName

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

    $Form1 = GUICreate("Connector", 381, 236, 306, 216)
    $help = GUICtrlCreateMenu("?")
    $hilfe = GUICtrlCreateMenuItem("Hilfe", $help)
    $about = GUICtrlCreateMenuItem("Info", $help)
    $OK = GUICtrlCreateButton("OK", 152, 160, 90, 41, 0)
    $Cancel = GUICtrlCreateButton("Cancel", 248, 160, 90, 41, 0)
    $Label1 = GUICtrlCreateLabel("Wähle den Server aus:", 8, 45, 113, 17)
    $isdebug = GUICtrlCreateCheckbox("GUI Debug", 8, 60, 90, 41)
    $isall = GUICtrlCreateCheckbox("Select all", 8, 90, 90, 41)

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

    $h1 = "Dieses Programm dient zur schnellen Verbindung zum Server."
    $h2 = "Die ini-Datei befindet sich in %appdata% und muss wie folgt aussehen: [Serverip] server=servername,...,..."

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    $var = IniRead(@AppDataDir & "/connector.ini", "Serverip", "server", "NotFound")
    $IP = StringSplit($var, ",")

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

    $hListBox = GUICtrlCreateList("", 144, 45, 185, 71)
    GUISetState(@SW_SHOW)

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

    $Serverlst = $hListBox
    GUICtrlSetLimit(-1, 200); to limit horizontal scrollin

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

    If $IP[0] = 1 Then;
    MsgBox(0, "Fehler", "Es befinden sich keine Server in der ini")
    Exit
    Else
    For $i = 1 To $IP[0]
    _GUICtrlListBox_AddString($hListBox, '' & $IP[$i])
    Next
    EndIf

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Cancel; Cancel wurde gedrückt
    Exit
    Case $OK; OK wurde gedrückt
    SEP()
    Exit
    Case $about
    MsgBox(0, "About", "Erstellt von Soeren Mindorf" & @LF & $version)
    Case $hilfe
    MsgBox(0, "Hilfe", $h1 & @LF & $h2)
    Case $isall
    If GUICtrlRead($isall) = $Gui_Checked Then
    GUICtrlSetState($hListBox,$GUI_ENABLE)
    Else
    GUICtrlSetState($hListBox,$GUI_DISABLE)
    EndIf
    EndSwitch
    WEnd

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

    ;$hListBox = GUICtrlCreateList("", 144, 45, 185, 71)

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($hListBox) Then $hWndListBox = GUICtrlGetHandle($hListBox)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $hListBox, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    ;MsgBox(0, "Doppelklick", "Doppelklick Funktion start")
    SEP()
    Exit
    ; case 1
    ; ConsoleWrite("Click" & @CRLF)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

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

    Func SEP()
    MsgBox(0, "in Funktion SEP", "Funktion SEP")
    If GUICtrlRead($isdebug) = 1 Then
    MsgBox(0, "Debug ist an!", "Debug")
    If GUICtrlRead($Serverlst) = "big.terra-it.de" Then
    MsgBox(0, "big", "big")
    Else
    MsgBox(0, "alte Version", GUICtrlRead($Serverlst))
    EndIf
    Else
    If GUICtrlRead($Serverlst) = "big.terra-it.de" Then
    MsgBox(0, "big1", "big1")
    Else
    MsgBox(0, "alte GUI Version", "Alte GUI", 3)
    EndIf
    EndIf
    EndFunc ;==>SEP

    [/autoit]
  • Hallo Schnitzel,

    danke, aber leider war es das noch nicht 100%. :(

    Ich muß erst "Select all" einmal aktivieren, ohne das die Liste deaktiviert wird.
    Wenn ich dann deaktiviere und aktiviere klappt es.

    Hast Du noch eine Idee?

    Gruß
    Xabbu

  • Dann deselektiere es per Skript:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=ruoff.ico
    #AutoIt3Wrapper_Outfile=connector.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_Comment=Connector by Terra-IT
    #AutoIt3Wrapper_Res_Description=Connector zum verbinden von ausländischen Filialen ohne die MasterGUI zu verwenden
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.1
    #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=p
    #AutoIt3Wrapper_Res_LegalCopyright=Terra-IT
    #AutoIt3Wrapper_Res_SaveSource=y
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Res_Field=Made By|Soeren Mindorf
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ; *** Author: S. Mindorf 27.06.2010 ***
    ; *** Version 1.0 *Rewrite*, now with double click

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

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

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

    $version = "1.0 (27.06.2010)"
    $user = @UserName

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

    $Form1 = GUICreate("Connector", 381, 236, 306, 216)
    $help = GUICtrlCreateMenu("?")
    $hilfe = GUICtrlCreateMenuItem("Hilfe", $help)
    $about = GUICtrlCreateMenuItem("Info", $help)
    $OK = GUICtrlCreateButton("OK", 152, 160, 90, 41, 0)
    $Cancel = GUICtrlCreateButton("Cancel", 248, 160, 90, 41, 0)
    $Label1 = GUICtrlCreateLabel("Wähle den Server aus:", 8, 45, 113, 17)
    $isdebug = GUICtrlCreateCheckbox("GUI Debug", 8, 60, 90, 41)
    $isall = GUICtrlCreateCheckbox("Select all", 8, 90, 90, 41)
    $h1 = "Dieses Programm dient zur schnellen Verbindung zum Server."
    $h2 = "Die ini-Datei befindet sich in %appdata% und muss wie folgt aussehen: [Serverip] server=servername,...,..."

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    $var = IniRead(@AppDataDir & "/connector.ini", "Serverip", "server", "NotFound")
    $IP = StringSplit($var, ",")

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

    $hListBox = GUICtrlCreateList("", 144, 45, 185, 71)
    GUICtrlSetState(-1,$GUI_DISABLE)
    GUISetState(@SW_SHOW)

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

    $Serverlst = $hListBox
    GUICtrlSetLimit(-1, 200); to limit horizontal scrollin

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

    If $IP[0] = 1 Then;
    MsgBox(0, "Fehler", "Es befinden sich keine Server in der ini")
    Exit
    Else
    For $i = 1 To $IP[0]
    _GUICtrlListBox_AddString($hListBox, '' & $IP[$i])
    Next
    EndIf

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Cancel; Cancel wurde gedrückt
    Exit
    Case $OK; OK wurde gedrückt
    SEP()
    Exit
    Case $about
    MsgBox(0, "About", "Erstellt von Soeren Mindorf" & @LF & $version)
    Case $hilfe
    MsgBox(0, "Hilfe", $h1 & @LF & $h2)
    Case $isall
    If GUICtrlRead($isall) = $Gui_Checked Then
    GUICtrlSetState($hListBox,$GUI_ENABLE)
    Else
    GUICtrlSetState($hListBox,$GUI_DISABLE)
    EndIf
    EndSwitch
    WEnd

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

    ;$hListBox = GUICtrlCreateList("", 144, 45, 185, 71)

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($hListBox) Then $hWndListBox = GUICtrlGetHandle($hListBox)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $hListBox, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    ;MsgBox(0, "Doppelklick", "Doppelklick Funktion start")
    SEP()
    Exit
    ; case 1
    ; ConsoleWrite("Click" & @CRLF)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

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

    Func SEP()
    MsgBox(0, "in Funktion SEP", "Funktion SEP")
    If GUICtrlRead($isdebug) = 1 Then
    MsgBox(0, "Debug ist an!", "Debug")
    If GUICtrlRead($Serverlst) = "big.terra-it.de" Then
    MsgBox(0, "big", "big")
    Else
    MsgBox(0, "alte Version", GUICtrlRead($Serverlst))
    EndIf
    Else
    If GUICtrlRead($Serverlst) = "big.terra-it.de" Then
    MsgBox(0, "big1", "big1")
    Else
    MsgBox(0, "alte GUI Version", "Alte GUI", 3)
    EndIf
    EndIf
    EndFunc ;==>SEP

    [/autoit]

    mfg (Auto)Bert

  • Hallo AutoBert,

    das ist ja auch nicht gewollt, es soll ja erst dann deselekitert werden, wenn "Select all" aktiviert wurde.
    Vorher soll es ja wählbar bleiben.

    Nochmal zur Versändigung.
    Ich möchte mich entwerder mit einem ausgewählten Server verbinden, oder halt mit allen.
    Aber Vorrang soll die Einzelauswahl bleiben.

    Der Ansatz von Schnitzel ist ja schon fast genau richtig nur dass ich "Select all" zweimal anwählen muß.
    Kann man das irgendwie lösen?

    Danke und Gruß
    Xabbu

  • Hallo Xabbu,

    dann schau dir die Hilfe zu dem von mir vewendeten

    [autoit]

    GUICtrlSetState

    [/autoit]

    an inkl. der Status-Tabelle und wende die Funktion auf $isall an (bei Programmstart bereits angecheckt). Falls du das auch nicht willst, musst du mit Schnitzel 's Version leben,

    mfg (Auto)Bert

  • Hallo (Auto)Bert,

    Danke für die Antworten.
    Nur zum Verständnis

    Warum greift die If-Schleife erst beim 2. Mal?

    Danke und Gruß
    Xabbu

  • Sie greift natürlich schon beim ersten mal.

    aber da mit dem ersten klicken die checkbox ja markiert wird, wird das ausgeführt.
    Und da die Liste schon Enabled ist ändert sich nichts.

    GUICtrlSetState($hListBox,$GUI_ENABLE)

  • Hallo Schnitzel, hallo (Auto)Bert,

    danke für Eure Hilfe, ich glaube das es jetzt funktioniert.

    Ich habe die Änderungen von Schiztel übernommen und wie folgt geändert:

    [autoit]

    Case $isall
    If GUICtrlRead($isall) = $Gui_Checked Then
    GUICtrlSetState($hListBox,$GUI_DISABLE)
    Else
    GUICtrlSetState($hListBox,$GUI_ENABLE)
    EndIf

    [/autoit]

    Jetzt geht es so, wie es soll.

    Danke für Eure schnelle Hilfe und die Erklärungen. :thumbup:

    Gruß
    Xabbu