Combobox mit Checkbox

  • Hallo Hamm00,

    mir ist kein Stil bekannt, der es ermöglicht in einer ComboBox auch CheckBoxen anzuzeigen, du müsstest dir also ein eigenes Control schreiben bzw. dich mit einer anderen Lösung zb.: Edit-Control + PIc-Control + ListVie-Control etwas ähnliches nachbauen,

    mfg (Auto)Bert

  • huhu

    Da ich heute auch vor dem Problem, stand bastel ich mir grad was.

    Ich wollt den jetzigen stand schon mal mit euch Teilen.
    es ist aber noch Work in Process ^^
    Ich poste den jetzt schon, weil ich erst ma Feierabend mache.
    Morgen gehts weiter^^

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <GuiEdit.au3>

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

    AdlibRegister("CheckActive", 100)
    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus
    $hGui = GUICreate("E_Runde", 400, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Ende")

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

    Global $bNumber = 0
    Global $iCCB = 3
    Dim $aCombo[6] = [10, 30, 380, -1, -1, -1]
    Dim $aText[$iCCB] = ["CheckBox 1", "CheckBox 2", "CheckBox 3"]

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

    Global $testarray = ComboCheckBox($hGui, $iCCB, $aCombo, $aText)

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

    GUICtrlCreateLabel("Kategorie", 10, 10, -1, 15)
    Global $cTyp = GUICtrlCreateInput("", 10, 80, 40, 20)
    GUICtrlCreateLabel("Typ", 10, 60, -1, 15)
    Global $cThema = GUICtrlCreateInput("", 60, 80, 330, 20)
    GUICtrlCreateLabel("Thema", 60, 60, -1, 15)
    Global $cAufgabe = GUICtrlCreateEdit("", 10, 140, 380, 100, BitOR($ES_MULTILINE, $ES_WANTRETURN, $WS_VSCROLL))
    GUICtrlCreateLabel("Aufgaben/Ereignisse", 10, 120, -1, 15)

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

    Global $bPaste = GUICtrlCreateButton("Einfügen", 40, 250, 150)
    Global $bWeiter = GUICtrlCreateButton("Überspringen", 210, 250, 150)
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, 'Click')
    GUICtrlSetOnEvent($bPaste, "bPaste")
    GUICtrlSetOnEvent($bWeiter, "bWeiter")
    GUISetState(@SW_SHOW, $hGui)

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

    While 1
    $bEndLoop = False
    While $bEndLoop == False
    Sleep(100)
    WEnd
    WEnd

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

    Func bWeiter()
    MsgBox(0,"","Weiter")
    $bEndLoop = True
    EndFunc

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

    Func bPaste()
    MsgBox(0,"","Paste")
    $bEndLoop = True
    EndFunc

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

    Func ComboCheckBox($hPreviousGUI, $iNumber, $aCombo, $aText)
    Local $cCCB[$iNumber+2]
    Local $aPos = WinGetPos($hPreviousGUI)

    GUISwitch($hPreviousGUI)

    If $aCombo[4] < 0 Then $aCombo[4] = 0

    $cCCB[0] = GUICtrlCreateInput("click here to choose", $aCombo[0], $aCombo[1], $aCombo[2], $aCombo[3], BitOR($ES_READONLY, $aCombo[4]), $aCombo[5])
    If $aCombo[3] < 0 Then $aCombo[3] = 300
    $cCCB[1] = GUICreate("ComboCheckbox",$aCombo[2] ,$aCombo[3] , $aPos[0] + $aCombo[0] + 3, $aPos[1] + $aCombo[1] + 20, $WS_POPUPWINDOW)
    GUISetBkColor(0xFFFFFF)

    For $y = 1 To $iNumber
    $cCCB[$y + 1] = GUICtrlCreateCheckbox($aText[$y -1], 10, $y * 20)
    Next

    GUISwitch($hPreviousGUI)
    Return $cCCB
    EndFunc

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

    Func Click()
    $cursor = GUIGetCursorInfo($hGui)
    If $cursor[4] = $testarray[0] Then
    GUISetState(@SW_SHOW, $testarray[1])
    EndIf

    EndFunc

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

    Func CheckActive()
    If Not WinActive($testarray[1]) Then
    GUISetState(@SW_Hide, $testarray[1])
    $sControl = ""
    $iControls = 0
    For $z = 1 To $iCCB
    If GUICtrlRead($testarray[$z+1]) == 1 Then
    $sControl &= GUICtrlRead($testarray[$z+1], 1) & ", "
    $iControls += 1
    EndIf
    Next

    If $sControl == "" Then
    $sControl = "click here to choose"
    Else
    If $bNumber <> 1 Then
    $sControl = StringTrimRight($sControl, 2)
    Else
    $sControl = $iControls & " are checked"
    EndIf
    EndIf

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

    GUICtrlSetData($testarray[0], $sControl)
    EndIf
    EndFunc

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

    Func Ende()
    Exit
    EndFunc

    [/autoit]
  • Es ist zwar nicht so formschön aber du köntest eine Listview umfunktionieren.
    So ungefähr.

    Spoiler anzeigen
    [autoit]

    #include <GUIListview.au3>
    #include <ListviewConstants.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("", 633, 454, 192, 114)
    $ListView1 = GUICtrlCreateListView("", 128, 48, 241, 50, BitOR($LVS_REPORT,$LVS_SINGLESEL,$WS_VSCROLL),$LVS_EX_CHECKBOXES)
    _GUICtrlListView_addColumn(GUICtrlGetHandle($ListView1),"",220)

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

    For $x = 1 to 10
    GUICtrlCreateListViewItem($x,$ListView1)
    Next

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

    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit

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

    EndSwitch
    WEnd

    [/autoit]
  • Wie soll ich denn darauf kommen? Darauf kommt man doch nur, wenn man das schon iwo gesehn hat :P

    Und zu deinem Vorschlag.
    Ich habs jetzt mal testhalber umgebaut... mich stört im moment noch sehr, dass wenn ich ich 2 anklicken will er wieder zuklappt, nachdem ich den ersten angeklickt haben...
    wenn ich GUICtrlSetState($hOwnCombo, $GUI_HIDE) rausnehme dann geht die gar nimmer weg es sein denn ich klick auf den button .. auch doof...

    und was mir auch noch fehlt ist, wenn ich den namen anklicke, dann nicht der haken gesetzt wird.

    EDIT: das mit dem makieren konnte ich durch folgende Zeile beheben:
    _GUICtrlListView_SetItemChecked($hOwnCombo, _GUICtrlListView_GetSelectedIndices($hOwnCombo))

    bzw folgendes damit das mit dem deselektieren auch klappt:

    [autoit]

    If Not _GUICtrlListView_GetItemChecked($hOwnCombo, _GUICtrlListView_GetSelectedIndices($hOwnCombo)) Then
    _GUICtrlListView_SetItemChecked($hOwnCombo, _GUICtrlListView_GetSelectedIndices($hOwnCombo))
    Else
    _GUICtrlListView_SetItemChecked($hOwnCombo, _GUICtrlListView_GetSelectedIndices($hOwnCombo), False)
    EndIf

    [/autoit]

    bleibt noch das verschwinden der Auswahl bei "wegklicken" und nicht verschwinden beim Anklicken eines Items

    2 Mal editiert, zuletzt von Kijan (12. Oktober 2010 um 11:45)