ListView erstellen mit doppeltem Rahmen und Checkbox

  • Hallo zusammen
    ich versuche ein ListView zu erstellen mit doppeltem Rahmen ($WS_BORDER) und Check-Boxen ($LVS_EX_CHECKBOXES).
    Es wird bei mir nicht korrekt angezeigt wenn ich beide Styles verwende. (Es wird lediglich 1 Rahmen beim ListView erzeugt)

    Spoiler anzeigen

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <WindowsConstants.au3>

    Dim $gui,$hListView,$listviewitem_1

    $gui = GuiCreate('',600,400)
    ;$hListView = GUICtrlCreateListView('Spalte 1 ',50,100,100,250,$WS_BORDER)
    $hListView = GUICtrlCreateListView('Spalte 1 ',50,100,100,250,$WS_BORDER,$LVS_EX_CHECKBOXES)

    GUISetState(@SW_SHOW)

    For $i = 1 to 10
    $listviewitem_1 = GUICtrlCreateListViewItem("Zeile " & $i, $hListView)
    Next

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $Gui_Event_Close()
    Exit
    EndSelect
    WEnd

    MfG
    johny

    2 Mal editiert, zuletzt von johny1099 (12. Dezember 2013 um 12:40)

  • Hallo!

    Du versuchst einen "WS_EX_CLIENTEDGE"-Style mit einem "WS_EX_WINDOWEDGE"-Style zu kombinieren. Aus diesem Grund musst du zu "$LVS_EX_CHECKBOXES" den Wert "$WS_EX_OVERLAPPEDWINDOW" dazurechnen (über BitOr oder durch simple Addition) um dein Problem zu beheben.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <WindowsConstants.au3>

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

    Dim $gui, $hListView, $listviewitem_1

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

    $gui = GUICreate('', 600, 400)
    ;$hListView = GUICtrlCreateListView('Spalte 1 ',50,100,100,250,$WS_BORDER)
    $hListView = GUICtrlCreateListView('Spalte 1 ', 50, 100, 100, 250, $WS_BORDER, $LVS_EX_CHECKBOXES + $WS_EX_OVERLAPPEDWINDOW)

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

    GUISetState(@SW_SHOW)

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

    For $i = 1 To 10
    $listviewitem_1 = GUICtrlCreateListViewItem("Zeile " & $i, $hListView)
    Next

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $Gui_Event_Close()
    Exit
    EndSelect
    WEnd

    [/autoit]

    [php]
    <?php
    function getRandom() {
    return 3; //chosen by a fair dice roll - guaranteed to be random
    }
    ?>
    [/php]

  • Hallo

    danke für den Tipp. Es funktioniert korrekt. Ich habe nun noch ein Icon hinzugefügt. Wie kann ich das Icon in Spalte 2 bekommen ?

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <WindowsConstants.au3>
    Dim $gui, $hListView, $listviewitem_1
    $gui = GUICreate('', 600, 400)
    $hListView = GUICtrlCreateListView('Spalte 1 |Spalte 2 ', 50, 100, 200, 250, $WS_BORDER, $LVS_EX_CHECKBOXES + $WS_EX_OVERLAPPEDWINDOW)
    GUISetState(@SW_SHOW)
    For $i = 1 To 10
    $listviewitem_1 = GUICtrlCreateListViewItem("Zeile " & $i, $hListView)
    GUICtrlSetImage($listviewitem_1, "shell32.dll", 22)
    Next
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $Gui_Event_Close()
    Exit
    EndSelect
    WEnd

    [/autoit]


    MfG

    johny

    Einmal editiert, zuletzt von johny1099 (10. Dezember 2013 um 10:25)

    • Offizieller Beitrag

    Wie kann ich das Icon in Spalte 2 bekommen ?


    Diese Frage wurde gestern oder vorgestern erst gestellt und beantwortet. ;) Einfach mal im Forum auch mitlesen.
    Icon sind nur in Column 0 möglich -- aber: du kannst die ColumnOrder ändern ;). Schau dir einfach die Befehle in der Listview-UDF an bzw. suche nach der Frage im Forum.

  • Hallo BugFix

    sorry für die weitere Frage. Aber das Beispiel von gestern hatte nur ein Icon (ohne Checkbox) . Daher konnte ich dann die Sortierung verwenden. Da ich nun die Checkbox in Spalte 1 habe, möchte ich gerne das Icon in einer separaten Spalte. Aber so wie Du schreibst kann ich nur in Spalte 1 Icon hinzufügen. Habe ich das richtig verstanden?

    • Offizieller Beitrag

    Achso, du willst Checkbox UND Icon - das hatte ich übersehen. Meines Wissens sind Beides Elemente, die nur in der ersten Spalte untergebracht werden können. Adhoc fällt mir jetzt nicht ein, wie man das austricksen kann. Eventuell ist mit Ownerdraw was zu Reißen - habe ich in der Form aber bisher nicht probiert. Durchsuch mal das EN-Forum.

  • Hallo johny1099,

    über eine ImageList könntest du sowohl zum Item (Column 0) als auch zu Subitems (Column 1) Items hinzufügen. Allerdings fällt mir gerade kein Weg ein, das Icon aus Column 0 zu entfernen, ohne das von Column 1 ebenfalls zu entfernen. Daher habe ich erst einmal ein "transparentes" Icon verwendet:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>
    #include <WindowsConstants.au3>

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

    Local $hGui, $listview, $hImage
    Local $exStyles = $WS_EX_OVERLAPPEDWINDOW
    Local $extended = $LVS_EX_SUBITEMIMAGES + $LVS_EX_CHECKBOXES
    Local $Styles = $LVS_REPORT + $WS_BORDER

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

    $hGui = GUICreate("", 600, 400)
    $listview = _GUICtrlListView_Create($hGui, "", 50, 100, 200, 250, $Styles, $exStyles)
    _GUICtrlListView_SetExtendedListViewStyle($listview, $extended)
    GUISetState()

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

    $hImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 51)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 22)
    _GUICtrlListView_SetImageList($listview, $hImage, 1)

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

    _GUICtrlListView_AddColumn($listview, "Spalte 1", 120)
    _GUICtrlListView_AddColumn($listview, "Spalte 2", 100)

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

    _GUICtrlListView_AddItem($listview, "Erstes Item", 0)
    _GUICtrlListView_AddSubItem($listview, 0, "Erstes Subitem", 1, 1)

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

    [/autoit]

    Hoffe, dass dich das schon weiter bringt. Viel Erfolg

    [php]
    <?php
    function getRandom() {
    return 3; //chosen by a fair dice roll - guaranteed to be random
    }
    ?>
    [/php]

  • Hallo Optical Toxin

    vielen Dank für den Tipp. Gibt es noch eine Möglichkeit das Icon in der Spalte 2 zu zentrieren?

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>
    #include <WindowsConstants.au3>
    Local $hGui, $listview, $hImage
    Local $exStyles = $WS_EX_OVERLAPPEDWINDOW
    Local $extended = $LVS_EX_SUBITEMIMAGES + $LVS_EX_CHECKBOXES
    Local $Styles = $LVS_REPORT + $WS_BORDER
    $hGui = GUICreate("", 600, 400)
    $listview = _GUICtrlListView_Create($hGui, "", 50, 100, 200, 250, $Styles, $exStyles)
    _GUICtrlListView_SetExtendedListViewStyle($listview, $extended)
    GUISetState()
    $hImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 51)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 22)
    _GUICtrlListView_SetImageList($listview, $hImage, 1)
    _GUICtrlListView_AddColumn($listview, "Spalte 1", 120)
    _GUICtrlListView_AddColumn($listview, "Spalte 2", 100)
    _GUICtrlListView_AddItem($listview, "Erstes Item", 0)
    _GUICtrlListView_AddSubItem($listview, 0, "", 1, 1)
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

    [/autoit]