Zeilenabstand bei ListView verkleinern

  • Hallo zusammen

    Ich habe eine Gui mit einem ListView und einem List Control. Hierbei habe ich festgestellt dass der Zeilenabstand beim Listview Control nicht identisch ist mit dem List Control. Gibt es eine Möglichkeit beim ListView Control den Zeilenabstand zu verkleinern, sodass dieser so aussieht wie beim List Control.

    [autoit]

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

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

    GUICreate("", 700, 300, 100, 100)
    $label_listview = GUICtrlCreateLabel("List View Control",100,20,200,25)
    GUICtrlSetFont(-1, 12, 600, 0, "MS Sans Serif")

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

    $label_list = GUICtrlCreateLabel("List Control",470,20,100,25)
    GUICtrlSetFont(-1, 12, 600, 0, "MS Sans Serif")

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

    $listview = GUICtrlCreateListView(" ", 25, 50, 300, 100,BitOR($WS_BORDER,$LVS_NOCOLUMNHEADER,$LVS_EX_FULLROWSELECT,$LVS_SINGLESEL ))

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

    GUICtrlCreateListViewItem("Zeile 1 Ausgabe ==> OK", $listview)
    GUICtrlCreateListViewItem("Zeile 2 Ausgabe ==> OK", $listview)
    GUICtrlCreateListViewItem("Zeile 3 Ausgabe ==> OK", $listview)
    GUICtrlSetFont($listview, 9, 600, 0, "MS Sans Serif")
    GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 0, $LVSCW_AUTOSIZE_USEHEADER)

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

    $list = GUICtrlCreateList("", 380,50, 300, 100)
    GUICtrlSetData($list,"Zeile 1 Ausgabe ==> OK")
    GUICtrlSetData($list,"Zeile 2 Ausgabe ==> OK")
    GUICtrlSetData($list,"Zeile 3 Ausgabe ==> OK")
    GUICtrlSetFont($list, 9, 600, 0, "MS Sans Serif")

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

    $button = GUICtrlCreateButton("Exit",550,250,100,30,$WS_EX_DLGMODALFRAME)

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

    GUISetState(@SW_SHOW)
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    Select
    Case $msg = $button
    Exit
    EndSelect
    WEnd

    [/autoit]

    Gruss
    johny

    Einmal editiert, zuletzt von johny1099 (2. November 2013 um 16:41)

  • http://msdn.microsoft.com/en-us/library/…5(v=vs.85).aspx
    http://msdn.microsoft.com/en-us/library/…4(v=vs.85).aspx

    Spoiler anzeigen
    [autoit]

    Global Const $ODT_LISTVIEW = 102

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

    GUICreate("", 700, 300, 100, 100)
    .
    .
    .
    GUIRegisterMsg($WM_MEASUREITEM, "WM_MEASUREITEM")

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

    $list = GUICtrlCreateList("", 380,50, 300, 100)
    GUICtrlSetData($list,"Zeile 1 Ausgabe ==> OK")
    GUICtrlSetData($list,"Zeile 2 Ausgabe ==> OK")
    GUICtrlSetData($list,"Zeile 3 Ausgabe ==> OK")
    GUICtrlSetFont($list, 9, 600, 0, "MS Sans Serif")
    .
    .
    .
    GUISetState(@SW_SHOW)
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    Select
    Case $msg = $button
    Exit
    EndSelect
    WEnd

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

    Func WM_MEASUREITEM($hWnd, $Msg, $wParam, $lParam)
    Local $tMEASUREITEMS = DllStructCreate("uint cType;uint cID;uint itmID;uint itmW;uint itmH;ulong_ptr itmData", $lParam)
    If DllStructGetData($tMEASUREITEMS, "cType") <> $ODT_LISTVIEW Then Return $GUI_RUNDEFMSG
    DllStructSetData($tMEASUREITEMS, "itmH", 10)
    Return 1
    EndFunc

    [/autoit]

    Ich hab grad kein AutoIt da :)

  • Hallo ic2
    ich habe jetzt folgendes Scripts ausgeführt. Der Zeilenabstand ist jedoch immer noch der gleiche wie vorher.

    Spoiler anzeigen

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

    Global Const $ODT_LISTVIEW = 102

    GUICreate("", 700, 300, 100, 100)
    $label_listview = GUICtrlCreateLabel("List View Control",100,20,200,25)
    GUICtrlSetFont(-1, 12, 600, 0, "MS Sans Serif")
    $label_list = GUICtrlCreateLabel("List Control",470,20,100,25)
    GUICtrlSetFont(-1, 12, 600, 0, "MS Sans Serif")
    $button = GUICtrlCreateButton("Exit",550,250,100,30)
    $label_listview = GUICtrlCreateLabel("List View Control",100,20,200,25)
    GUICtrlSetFont(-1, 12, 600, 0, "MS Sans Serif")
    $label_list = GUICtrlCreateLabel("List Control",470,20,100,25)
    GUICtrlSetFont(-1, 12, 600, 0, "MS Sans Serif")
    $listview = GUICtrlCreateListView(" ", 25, 50, 300, 100,BitOR($WS_BORDER,$LVS_NOCOLUMNHEADER,$LVS_EX_FULLROWSELECT,$LVS_SINGLESEL ))

    GUICtrlCreateListViewItem("Zeile 1 Ausgabe ==> OK", $listview)
    GUICtrlCreateListViewItem("Zeile 2 Ausgabe ==> OK", $listview)
    GUICtrlCreateListViewItem("Zeile 3 Ausgabe ==> OK", $listview)
    GUICtrlSetFont($listview, 9, 600, 0, "MS Sans Serif")
    GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 0, $LVSCW_AUTOSIZE_USEHEADER)

    $list = GUICtrlCreateList("", 380,50, 300, 100)
    GUICtrlSetData($list,"Zeile 1 Ausgabe ==> OK")
    GUICtrlSetData($list,"Zeile 2 Ausgabe ==> OK")
    GUICtrlSetData($list,"Zeile 3 Ausgabe ==> OK")
    GUICtrlSetFont($list, 9, 600, 0, "MS Sans Serif")

    GUIRegisterMsg($WM_MEASUREITEM, "WM_MEASUREITEM")
    GUISetState(@SW_SHOW)

    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    Select
    Case $msg = $button
    Exit
    EndSelect
    WEnd

    Func WM_MEASUREITEM($hWnd, $Msg, $wParam, $lParam)
    Local $tMEASUREITEMS = DllStructCreate("uint cType;uint cID;uint itmID;uint itmW;uint itmH;ulong_ptr itmData", $lParam)
    If DllStructGetData($tMEASUREITEMS, "cType") <> $ODT_LISTVIEW Then Return $GUI_RUNDEFMSG
    DllStructSetData($tMEASUREITEMS, "itmH", 10)
    Return 1
    EndFunc

    Gruss

    johny

  • Spoiler anzeigen
    [autoit]

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

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

    Global Const $ODT_LISTVIEW = 102
    Global Const $ODA_DRAWENTIRE = 0x1
    Global Const $ODS_SELECTED = 0x0001

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

    GUICreate("", 500, 500)

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

    GUIRegisterMsg($WM_MEASUREITEM, "WM_MEASUREITEM")
    GUIRegisterMsg($WM_DRAWITEM, "WM_DRAWITEM")

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

    $hListview = GUICtrlCreateListView("Spalte 1", 5, 5, 490, 490,BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS, $LVS_OWNERDRAWFIXED))
    GUICtrlCreateListViewItem("Zeile 1 Ausgabe ==> OK", $hListview)
    GUICtrlCreateListViewItem("Zeile 2 Ausgabe ==> OK", $hListview)
    GUICtrlCreateListViewItem("Zeile 3 Ausgabe ==> OK", $hListview)
    GUICtrlSendMsg($hListview, $LVM_SETCOLUMNWIDTH, 0, $LVSCW_AUTOSIZE_USEHEADER)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $Msg = GUIGetMsg()
    Select
    Case $Msg = -3
    Exit
    EndSelect
    WEnd

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

    Func WM_MEASUREITEM($hWnd, $Msg, $wParam, $lParam)
    Local $tMEASUREITEMS = DllStructCreate("uint cType;uint cID;uint itmID;uint itmW;uint itmH;ulong_ptr itmData", $lParam)
    If DllStructGetData($tMEASUREITEMS, "cType") <> $ODT_LISTVIEW Then Return $GUI_RUNDEFMSG
    DllStructSetData($tMEASUREITEMS, "itmH", 30)
    Return 1
    EndFunc ;==>WM_MEASUREITEM

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

    Func WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
    Local $tagDRAWITEMSTRUCT, $iBrushColor, $cID, $itmID, $itmAction, $itmState, $hItm, $hDC, $bSelected
    $tagDRAWITEMSTRUCT = DllStructCreate( _
    "uint cType;" & _
    "uint cID;" & _
    "uint itmID;" & _
    "uint itmAction;" & _
    "uint itmState;" & _
    "hwnd hItm;" & _
    "handle hDC;" & _
    "long itmRect[4];" & _
    "ulong_ptr itmData" _
    , $lParam)
    If DllStructGetData($tagDRAWITEMSTRUCT, "cType") <> $ODT_LISTVIEW Then Return $GUI_RUNDEFMSG
    $cID = DllStructGetData($tagDRAWITEMSTRUCT, "cID")
    $itmID = DllStructGetData($tagDRAWITEMSTRUCT, "itmID")
    $itmAction = DllStructGetData($tagDRAWITEMSTRUCT, "itmAction")
    $itmState = DllStructGetData($tagDRAWITEMSTRUCT, "itmState")
    $hItm = DllStructGetData($tagDRAWITEMSTRUCT, "hItm")
    $hDC = DllStructGetData($tagDRAWITEMSTRUCT, "hDC")
    $bSelected = BitAND($itmState, $ODS_SELECTED)
    Switch $cID ; will look for ControlID, not window handle.
    Case $hListview
    Switch $itmAction
    Case $ODA_DRAWENTIRE
    For $i = 0 To _GUICtrlListView_GetColumnCount($hListview) - 1
    Local $iSubItmText = _GUICtrlListView_GetItemText($hListview, $itmID, $i)
    Local $aSubItmRect = _GUICtrlListView_GetSubItemRect($hListview, $itmID, $i)
    Local $iSubItmRect = DllStructCreate("long[4]")
    DllStructSetData($iSubItmRect, 1, $aSubItmRect[0], 1)
    DllStructSetData($iSubItmRect, 1, $aSubItmRect[1], 2)
    DllStructSetData($iSubItmRect, 1, $aSubItmRect[2], 3)
    DllStructSetData($iSubItmRect, 1, $aSubItmRect[3], 4)
    DllCall("user32.dll", "int", "DrawTextW", "hwnd", $hDC, "wstr", $iSubItmText, "int", StringLen($iSubItmText), _
    "ptr", DllStructGetPtr($iSubItmRect), "int", $DT_LEFT)
    Next
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_DRAWITEM

    [/autoit]

    In Zeile 34 passt du die Zeilenhöhe an.