piterek Posted January 16, 2011 Share Posted January 16, 2011 Hi all Is it possible to create ListView control (using _GUICtrlListView_Create) with >> "hidden" << scrollbar ?? In ListView table styles there is only "$LBS_DISABLENOSCROLL". Is there some way to only hide a scrollbar ? Link to comment Share on other sites More sharing options...
C45Y Posted January 16, 2011 Share Posted January 16, 2011 Hi all Is it possible to create ListView control (using _GUICtrlListView_Create) with >> "hidden" << scrollbar ?? In ListView table styles there is only "$LBS_DISABLENOSCROLL". Is there some way to only hide a scrollbar ?you could try playing around with display positions, like setting the dimensions off the edge of the gui.thats the only way i can think of, possibly a dll call but i dont have time to search msdn right now.good luck http://twentylinesofcode.blogspot.comLittle apps n crap. can be fun Link to comment Share on other sites More sharing options...
piterek Posted January 16, 2011 Author Share Posted January 16, 2011 (edited) OK... so maybe another questionI want to add string to ListBox in two text parts.example:|1. Song title a 2:15| |2. Song title abc 3:14| |3. Song title abcde 4:09| |99. Song title ab 3:33| etc...Song title is a first part and song lenght is a second but it must be at the end of string. This has the same look as in Winamp playlist...It's look like columns but i need to do this in LISTBOX (no ListView) Edited January 16, 2011 by piterek Link to comment Share on other sites More sharing options...
C45Y Posted January 16, 2011 Share Posted January 16, 2011 ....look into StringFormat ( "format control", var1 [, ... var32] ) one of the examples is a right-justification ...as for the scroll bars i had a look around and found an answer for you, have a look at this example expandcollapse popup#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <StructureConstants.au3> #include <GUIScrollBars.au3> #include <ScrollBarConstants.au3> Opt("MustDeclareVars", 1) Global $iMemo _Main() Func _Main() Local $GUIMsg, $hGUI $hGUI = GUICreate("ScrollBar Example", 400, 400, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_SIZEBOX)) $iMemo = GUICtrlCreateEdit("", 2, 2, 380, 380, BitOR($WS_HSCROLL, $WS_VSCROLL)) GUICtrlSetResizing($iMemo, $GUI_DOCKALL) GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New") GUISetBkColor(0x88AABB) GUISetState() _GUIScrollBars_Init($hGUI) _GUIScrollBars_SetScrollInfoPos($hGUI, $SB_HORZ, 30) MemoWrite("Horizontal" & @CRLF & "--------------------------------------") MemoWrite("nPage....: " & _GUIScrollBars_GetScrollInfoPage($hGUI, $SB_HORZ)) MemoWrite("nPos.....: " & _GUIScrollBars_GetScrollInfoPos($hGUI, $SB_HORZ)) MemoWrite("nMin.....: " & _GUIScrollBars_GetScrollInfoMin($hGUI, $SB_HORZ)) MemoWrite("nMax.....: " & _GUIScrollBars_GetScrollInfoMax($hGUI, $SB_HORZ)) MemoWrite("nTrackPos: " & _GUIScrollBars_GetScrollInfoTrackPos($hGUI, $SB_HORZ)) Sleep ( 3000 ) MemoWrite(@CRLF & "Vertical" & @CRLF & "--------------------------------------") MemoWrite("nPage....: " & _GUIScrollBars_GetScrollInfoPage($hGUI, $SB_VERT)) MemoWrite("nPos.....: " & _GUIScrollBars_GetScrollInfoPos($hGUI, $SB_VERT)) MemoWrite("nMin.....: " & _GUIScrollBars_GetScrollInfoMin($hGUI, $SB_VERT)) MemoWrite("nMax.....: " & _GUIScrollBars_GetScrollInfoMax($hGUI, $SB_VERT)) MemoWrite("nTrackPos: " & _GUIScrollBars_GetScrollInfoTrackPos($hGUI, $SB_VERT)) _GUIScrollBars_SetScrollInfoPos($hGUI, $SB_HORZ, 0) While 1 $GUIMsg = GUIGetMsg() Switch $GUIMsg Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd Exit EndFunc ;==>_Main ; Write a line to the memo control Func MemoWrite($sMessage) GUICtrlSetData($iMemo, $sMessage & @CRLF, 1) EndFunc ;==>MemoWrite http://twentylinesofcode.blogspot.comLittle apps n crap. can be fun Link to comment Share on other sites More sharing options...
rover Posted January 16, 2011 Share Posted January 16, 2011 Hi all Is it possible to create ListView control (using _GUICtrlListView_Create) with >> "hidden" << scrollbar ?? In ListView table styles there is only "$LBS_DISABLENOSCROLL". Is there some way to only hide a scrollbar ? piterek Re: formatting listbox text use LBS_USETABSTOPS style and _GUICtrlListBox_SetTabStops() in listbox UDF hiding listbox scrollbars you can do this, but as usual there are issues... this is a rough unoptimized hack/workaround that introduces new issues... needs improvement or preferably a better way of doing this there are border drawing issues for both listbox/listview. listbox won't mouse scroll until scrolled by keyboard past last visible item. one method I came across removes the listview/listbox WS_VSCROLL style in the WM_NCCALCSIZE message handler with setwindowlong. - mouse scrolling no longer works, unless SWP_FRAMECHANGED flag removed in WM_WINDOWPOSCHANGING message. a method I came across accidentally a few months ago, while trying some things with a subclassed listview. removes SWP_FRAMECHANGED flag in WM_WINDOWPOSCHANGING message. flag is removed before listview is shown, and when restored from minimize. this does not work on an existing visible listview. allows scrolling to last item, keyboard and mouse scrolling work, no visible scrollbars Issues: listview you must limit column resizing to prevent columns from being dragged past the listview right border you cannot restore the scrollbars then rehide them. A sliver of the scrollbar is visible and erases the listview border when vertically scrolling or horizontally scrolling (column resizing). when the gui is minimized then restored, this is repainted. as this effectively blocks listview frame drawing, either a new frame needs to be drawn or the existing frame removed. not tested with resizeable gui/listview the alternative is to repaint the frame by finding the right command and location to paint the listview when the columns are adjusted or the listview is vertically scrolled. If that can be done without causing flicker. or enlarge the listview past the gui border and use transparentlabels to cover the listview border issues: listbox outlined item other than selected item sometimes appears in listbox mouse won't scroll list until top index item is one greater than visible items on restore from minimize, scrolling stops again until selected item one greater than visible items expandcollapse popup#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 #include <ListViewConstants.au3> #include <WindowsConstants.au3> #include <Constants.au3> #include <GuiConstantsEx.au3> #include <GuiListView.au3> #include <GUIListBox.au3> #Include <GuiScrollBars.au3> #include <ScrollBarConstants.au3> Opt('MustDeclareVars', 1) Global $hGui, $hListView, $hList, $iDLLUser32 = DllOpen("user32.dll") Global $wProcNewLV, $wProcOldLV, $wProcNewLB, $wProcOldLB Example_UDF_Created() Func Example_UDF_Created() $hGui = GUICreate("Scrollable ListView/ListBox without scrollbars", 600, 550, -1, -1) Local $cListView = GUICtrlCreateListView("", 2, 2, 596, 293) Local $exStyles = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER) $hListView = GUICtrlGetHandle($cListView) _GUICtrlListView_SetExtendedListViewStyle($hListView, $exStyles) ;subclass listview $wProcNewLV = DllCallbackRegister("_LVWndProc", "ptr", "hwnd;uint;wparam;lparam") $wProcOldLV = _WinAPI_SetWindowLong($hListView, $GWL_WNDPROC, DllCallbackGetPtr($wProcNewLV)) _GUICtrlListView_InsertColumn($cListView, 0, "Column 1", 100) _GUICtrlListView_InsertColumn($cListView, 1, "Column 2", 100) _GUICtrlListView_InsertColumn($cListView, 2, "Column 3", 100) _GUICtrlListView_InsertColumn($cListView, 3, "Column 4", 396) For $i = 0 To 41 _GUICtrlListView_AddItem($cListView, "Row " & $i + 1 & ": Col 1") _GUICtrlListView_AddSubItem($cListView, $i, "Row " & $i + 1 & ": Col 2", 1) _GUICtrlListView_AddSubItem($cListView, $i, "Row " & $i + 1 & ": Col 3", 2) _GUICtrlListView_AddSubItem($cListView, $i, "Row " & $i + 1 & ": Col 4", 3) Next Local $sTxt For $i = 0 To 50 $sTxt &= "Line " & $i & "|" Next Local $cList = GUICtrlCreateList("", 2, 320, 596, 200) GUICtrlSetData(-1, $sTxt) Local $hList = GUICtrlGetHandle(-1) ;works without this, but seems to remove sliver of scrollbar button on right edge _GUIScrollBars_EnableScrollBar($hList, $SB_BOTH, $ESB_DISABLE_BOTH) _GUIScrollBars_ShowScrollBar($hList, $SB_BOTH, False) ;subclass listbox $wProcNewLB = DllCallbackRegister("_LBWndProc", "ptr", "hwnd;uint;wparam;lparam") $wProcOldLB = _WinAPI_SetWindowLong($hList, $GWL_WNDPROC, DllCallbackGetPtr($wProcNewLB)) ;mouse won't scroll list until top index item is one greater than visible items _GUICtrlListBox_SetTopIndex($hList, 15);set to item one greater than visible items _GUICtrlListBox_SetTopIndex($hList, 0);rest back to first item - scrolling by mouse now works ;on restore from minimize, scrolling stops again until selected item one greater than visible items ;_WinAPI_SetWindowPos($hList, 0, 0, 0, 0, 0, BitOR($SWP_FRAMECHANGED, $SWP_NOMOVE, $SWP_NOSIZE, $SWP_NOZORDER)) GUISetState() Do Until GUIGetMsg() = $GUI_EVENT_CLOSE _Exit() EndFunc Func _Exit() If $wProcOldLV Then _WinAPI_SetWindowLong($hListView, $GWL_WNDPROC, $wProcOldLV) If $wProcOldLB Then _WinAPI_SetWindowLong($hList, $GWL_WNDPROC, $wProcOldLB) GUIDelete($hGui);prevents crash on exit caused by DllCallbackFree() DllClose($iDLLUser32) If $wProcNewLV Then DllCallbackFree($wProcNewLV) If $wProcNewLB Then DllCallbackFree($wProcNewLB) Exit EndFunc Func _LVWndProc($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg, $wParam, $lParam Switch $Msg Case $WM_NCCALCSIZE _RemoveVHScroll($hWnd) Case $WM_WINDOWPOSCHANGING Local $tWINDOWPOS = DllStructCreate($tagWINDOWPOS, $lParam) ;uncomment for mouse scrolling - no mouse scrolling without, but border is not erased (vertical key scrolling flickers visibly)) DllStructSetData($tWINDOWPOS, "Flags", _ BitAND(DllStructGetData($tWINDOWPOS, "Flags"), BitNOT($SWP_FRAMECHANGED))) EndSwitch ;pass the unhandled messages to default WindowProc Local $aResult = DllCall($iDLLUser32, "lresult", "CallWindowProcW", "ptr", _ $wProcOldLV, "hwnd", $hWnd, "uint", $Msg, "wparam", $wParam, "lparam", $lParam) If @error Then Return -1 Return $aResult[0] EndFunc ;==>_LVWndProc Func _LBWndProc($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg, $wParam, $lParam Switch $Msg Case $WM_NCCALCSIZE _RemoveVHScroll($hWnd) ;listview will add these styles again when restored from minimize Case $WM_WINDOWPOSCHANGING Local $tWINDOWPOS = DllStructCreate($tagWINDOWPOS, $lParam) DllStructSetData($tWINDOWPOS, "Flags", _ BitAND(DllStructGetData($tWINDOWPOS, "Flags"), BitNOT($SWP_FRAMECHANGED))) EndSwitch ;pass the unhandled messages to default WindowProc Local $aResult = DllCall($iDLLUser32, "lresult", "CallWindowProcW", "ptr", _ $wProcOldLB, "hwnd", $hWnd, "uint", $Msg, "wparam", $wParam, "lparam", $lParam) If @error Then Return -1 Return $aResult[0] EndFunc ;==>_LBWndProc Func _RemoveVHScroll($hWnd) Local $iLVStyle = _WinAPI_GetWindowLong($hWnd, $GWL_STYLE) $iLVStyle = BitAND($iLVStyle, BitNOT($WS_VSCROLL)) $iLVStyle = BitAND($iLVStyle, BitNOT($WS_HSCROLL)) _WinAPI_SetWindowLong($hWnd, $GWL_STYLE, $iLVStyle) EndFunc I see fascists... Link to comment Share on other sites More sharing options...
PartyPooper Posted June 21, 2011 Share Posted June 21, 2011 This seemed to work for me when I wanted to disable the scroll bars for a listview: #include <TreeviewConstants.au3> ... GUICtrlCreateListView("Header", 10, 10, 125, 307, BitOR($LVS_REPORT, $LVS_SINGLESEL, $LVS_NOSORTHEADER, $TVS_NOSCROLL)) Link to comment Share on other sites More sharing options...
rover Posted June 21, 2011 Share Posted June 21, 2011 This seemed to work for me when I wanted to disable the scroll bars for a listview: #include <TreeviewConstants.au3> ... GUICtrlCreateListView("Header", 10, 10, 125, 307, BitOR($LVS_REPORT, $LVS_SINGLESEL, $LVS_NOSORTHEADER, $TVS_NOSCROLL)) LVS_NOSCROLL, not TVS_NOSCROLL. They do have the same value, but TVS_NOSCROLL is a treeview style. Using that style not only removes the scrollbar, but also prevents scrolling through more items than can be displayed. This example script shows that using LVS_NOSCROLL prevents scrolling by keyboard arrow/home/end/up/dn keys or mouse wheel through more items than can be displayed in the listview. #include <GUIConstantsEx.au3> #include <ListViewConstants.au3> Opt('MustDeclareVars', 1) Example() Func Example() Local $listview, $cLabel, $iBuffer GUICreate("Scroll listview items", 220, 250, 100, 200) $listview = GUICtrlCreateListView("col1|col2|col3 ", 10, 10, 200, 150, BitOR($LVS_REPORT, $LVS_SINGLESEL, $LVS_NOSORTHEADER, $LVS_NOSCROLL)) For $i = 0 To 59 GUICtrlCreateListViewItem("item"&$i&"|col2|col3", $listview) Next $cLabel = GUICtrlCreateLabel("Item Count: " & GUICtrlSendMsg($listview, $LVM_GETITEMCOUNT, 0, 0), 10, 170, 100, 16) GUISetState() Do For $iIdx = 0 To 59 If GUICtrlSendMsg($listview, $LVM_GETITEMSTATE, $iIdx, $LVIS_SELECTED) Then If $iBuffer <> $iIdx Then $iBuffer = $iIdx GUICtrlSetData($cLabel, "Item Selected: " & $iIdx) EndIf EndIf Next Until GUIGetMsg() = $GUI_EVENT_CLOSE EndFunc ;==>Example I see fascists... Link to comment Share on other sites More sharing options...
Belini Posted March 13, 2012 Share Posted March 13, 2012 Sorry for reviving the topic, the more I have a problem. UDF using the scroll bar is removed if you have many more items and press right or left arrow, move the list. I do not want the list by moving horizontally, can anyone help? Example: expandcollapse popup#include <ListViewConstants.au3> #include <WindowsConstants.au3> #include <Constants.au3> #include <GuiConstantsEx.au3> #include <GuiListView.au3> #include <GuiScrollBars.au3> #include <ScrollBarConstants.au3> Global $hGui, $hListView, $hList, $iDLLUser32 = DllOpen("user32.dll") Global $wProcNewLV, $wProcOldLV $hGui = GUICreate("Scrollable ListView/ListBox without scrollbars", 240, 110, -1, -1) Local $cListView = GUICtrlCreateListView("", 2, 2, 210, 100, $LVS_NOCOLUMNHEADER, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES)) Local $exStyles = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER) $hListView = GUICtrlGetHandle($cListView) tira_barra($cListView) ; Add columns _GUICtrlListView_InsertColumn($cListView, 0, "Column 1", 100) _GUICtrlListView_InsertColumn($cListView, 1, "Column 2", 100) ; Add items _GUICtrlListView_AddItem($cListView, "Row 1: Col 1") _GUICtrlListView_AddItem($cListView, "Row 2: Col 1") _GUICtrlListView_AddItem($cListView, "Row 3: Col 1") _GUICtrlListView_AddItem($cListView, "Row 4: Col 1") _GUICtrlListView_AddItem($cListView, "Row 6: Col 1") _GUICtrlListView_AddItem($cListView, "Row 7: Col 1") _GUICtrlListView_AddItem($cListView, "Row 8: Col 1") _GUICtrlListView_AddItem($cListView, "Row 9: Col 1") _GUICtrlListView_AddItem($cListView, "Row 10: Col 1") _GUICtrlListView_AddItem($cListView, "Row 11: Col 1") _GUICtrlListView_AddItem($cListView, "Row 12: Col 1") _GUICtrlListView_AddItem($cListView, "Row 13: Col 1") GUISetState() GUISetState() Do Until GUIGetMsg() = $GUI_EVENT_CLOSE _Exit() Func tira_barra($cListView) $wProcNewLV = DllCallbackRegister("_LVWndProc", "ptr", "hwnd;uint;wparam;lparam") $wProcOldLV = _WinAPI_SetWindowLong($hListView, $GWL_WNDPROC, DllCallbackGetPtr($wProcNewLV)) EndFunc ;==>tira_barra Func _Exit() If $wProcOldLV Then _WinAPI_SetWindowLong($hListView, $GWL_WNDPROC, $wProcOldLV) GUIDelete($hGui);prevents crash on exit caused by DllCallbackFree() DllClose($iDLLUser32) Exit EndFunc ;==>_Exit Func _LVWndProc($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg, $wParam, $lParam Switch $Msg Case $WM_NCCALCSIZE _RemoveVHScroll($hWnd) Case $WM_WINDOWPOSCHANGING Local $tWINDOWPOS = DllStructCreate($tagWINDOWPOS, $lParam) ;uncomment for mouse scrolling - no mouse scrolling without, but border is not erased (vertical key scrolling flickers visibly)) DllStructSetData($tWINDOWPOS, "Flags", _ BitAND(DllStructGetData($tWINDOWPOS, "Flags"), BitNOT($SWP_FRAMECHANGED))) EndSwitch ;pass the unhandled messages to default WindowProc Local $aResult = DllCall($iDLLUser32, "lresult", "CallWindowProcW", "ptr", _ $wProcOldLV, "hwnd", $hWnd, "uint", $Msg, "wparam", $wParam, "lparam", $lParam) If @error Then Return -1 Return $aResult[0] EndFunc ;==>_LVWndProc Func _RemoveVHScroll($hWnd) Local $iLVStyle = _WinAPI_GetWindowLong($hWnd, $GWL_STYLE) $iLVStyle = BitAND($iLVStyle, BitNOT($WS_VSCROLL)) $iLVStyle = BitAND($iLVStyle, BitNOT($WS_HSCROLL)) _WinAPI_SetWindowLong($hWnd, $GWL_STYLE, $iLVStyle) EndFunc ;==>_RemoveVHScroll My Codes: Â Virtual Key Code UDF: http://www.autoitscript.com/forum/topic/138246-virtual-key-code-udf/ GuiSplashTextOn.au3: http://www.autoitscript.com/forum/topic/143542-guisplashtexton-udf/ Menu versions of Autoit: http://www.autoitscript.com/forum/topic/137435-menu-versions-of-autoit/#entry962011 Selects first folder of letters: ]http://www.autoitscript.com/forum/topic/144780-select-folders-by-letter/#entry1021708/spoiler] List files and folders with long addresses.: http://www.autoitscript.com/forum/topic/144910-list-files-and-folders-with-long-addresses/#entry102 Â 2926 Program JUKEBOX made in Autoit:some functions:http://www.youtube.com/watch?v=WJ2tC2fD5Qs Navigation to search:http://www.youtube.com/watch?v=lblwOFIbgtQ Â Â Link to comment Share on other sites More sharing options...
rover Posted March 15, 2012 Share Posted March 15, 2012 This hacked listview was my dump on the forum, so I guess I should be the one to deal with it. I spent a bit more time on this soon after posting the above code, I've cleaned it up and added a few more things, I'll post it shortly It works smoothly without any scrollbar artifacts. arrow key/pgup/pgdn/home/end and mouse wheel scrolling To block horiz scrolling return 0 for the WM_KEYDOWN message if wParam = VK_RIGHT (0x27) I see fascists... Link to comment Share on other sites More sharing options...
rover Posted March 15, 2012 Share Posted March 15, 2012 (edited) You were adding extended window and listview styles together when creating the listview.The extended style listview parameter should only be used for $WS_EX_xxxx extended stylesUsing it for both $WS_EX_xxxx and $LVS_EX_xxxxx extended styles is asking for trouble,as the combined styles can equal another $WS_EX_xxxx style or an invalid one.This is the updated scrollable scrollbarless listviewRight arrow key blocked in WM_KEYDOWN message and vertical scrolling by keys or mouse wheel.NOTE: The listview style $LVS_EX_GRIDLINES introduces glitchy missing grid lines when mouse wheel scrolling, this is a known listview bug.Using the LVN_ENDSCROLL notification in WM_NOTIFY to invalidate the listview clears this up.Edit: fixed last two 'known' issuesTwo remaining issuesSlight flicker when initially mouse scrolling from top or bottom - FixedMouse scrolling tends to leave blank space at the bottom, key scrolling does not,probably because of hidden horiz scrollbar and need for vertical scrollbar synchronization - FixedEdit: If not using XP, you could remove the WM_NOTIFY message handler, listview performance is much better in Win7, no flickering, (minor flicker with pg up/dn)(possibly same for Vista with this mod, but untested)enjoyexpandcollapse popup#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 ;coded by rover 2k12 ;http://www.autoitscript.com/forum/topic/124308-listview-without-scrollbar/page__view__findpost__p__971386 #include <ListViewConstants.au3> #include <WindowsConstants.au3> #include <Constants.au3> #include <GuiConstantsEx.au3> #include <GuiListView.au3> #include <GuiScrollBars.au3> #include <ScrollBarConstants.au3> Opt("MustDeclareVars", 1) Global $wProcOldLV, $tSCROLLINFO Global $cListView, $hListView, $iDLLUser32 = DllOpen("user32.dll") _Main() Func _Main() Local $hGui, $Msg, $iExStyles, $iCB $hGui = GUICreate("Scrollable ListView /wo scrollbars", 240, 116, -1, -1) GUISetBkColor(0x494949) ;advisable to only add $WS_EX_xxxx extended styles here, use SetExtendedListViewStyle for extended listview styles ;$cListView = GUICtrlCreateListView("", 2, 2, 210, 100, $LVS_NOCOLUMNHEADER, 0) ; flat, no borders $WS_EX_TRANSPARENT $cListView = GUICtrlCreateListView("", 2, 2, 204, 100, $LVS_NOCOLUMNHEADER) ; ($WS_EX_CLIENTEDGE default listview extended style) ;$cListView = GUICtrlCreateListView("", 2, 2, 210, 100, $LVS_NOCOLUMNHEADER, $WS_EX_DLGMODALFRAME) ; raised border edge ;$cListView = GUICtrlCreateListView("", 2, 2, 210, 100, $LVS_NOCOLUMNHEADER, $WS_EX_STATICEDGE) ; sunken border $iExStyles = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER) ;$LVS_EX_DOUBLEBUFFER required for flicker control ;use this instead of adding extended styles when creating listview _GUICtrlListView_SetExtendedListViewStyle($cListView, $iExStyles) GUICtrlSetFont(-1, 8.5) ;fixed font size (themes can change font size) $wProcOldLV = _InitializeLV($cListView, $iCB, $tSCROLLINFO) ;set font before adjusting listview size to number of items displayable - Note: initialize before adding items or scrollbar will show $hListView = GUICtrlGetHandle($cListView) GUICtrlSetBkColor(-1, 0x494949) GUICtrlSetColor(-1, 0xDADADA) ; Add columns _GUICtrlListView_InsertColumn($cListView, 0, "Column 1", 100) _GUICtrlListView_InsertColumn($cListView, 1, "Column 2", 100) ; Add items For $i = 0 To 100 _GUICtrlListView_AddItem($cListView, "Row " & $i & " : Col 1") Next ;refreshes gridlines and prevents flicker when arrow/pg-up/dn key scrolling and mouse wheel scrolling (combined with $LVS_EX_DOUBLEBUFFER) GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY") ;can be removed in Win7 (maybe Vista as well) listview performance better than XP (or add OS check and include if XP) GUISetState() While 1 $Msg = GUIGetMsg() Switch $Msg Case $GUI_EVENT_CLOSE _Exit($hListView, $hGui, $iCB, $wProcOldLV) EndSwitch WEnd EndFunc ;==>_Main Func _InitializeLV($cLV, ByRef $iCallback, ByRef $tInfo) ;coded by rover 2k12 ;http://www.autoitscript.com/forum/topic/124308-listview-without-scrollbar/page__view__findpost__p__971386 ;create struct for setting mouse scrolling limit $tInfo = DllStructCreate($tagSCROLLINFO) DllStructSetData($tInfo, "cbSize", DllStructGetSize($tInfo)) DllStructSetData($tInfo, "fMask", BitOR($SIF_RANGE, $SIF_TRACKPOS)) Local $hLV = GUICtrlGetHandle($cLV) Local $aPos = ControlGetPos($hLV, "", $hLV) ;adjust listview size for number of items that can be shown Local $iY = _GUICtrlListView_ApproximateViewHeight($cLV, _GUICtrlListView_GetCounterPage($cLV)) GUICtrlSetPos($cLV, $aPos[0], $aPos[1], $aPos[2], $iY + 4) $iCallback = DllCallbackRegister("_LVWndProc", "ptr", "hwnd;uint;wparam;lparam") Return _WinAPI_SetWindowLong($hLV, $GWL_WNDPROC, DllCallbackGetPtr($iCallback)) EndFunc ;==>_InitializeLV Func _Exit($hLV, $hWnd, $iCallback, $pProcOldLV) If IsInt($pProcOldLV) And IsHWnd($hLV) Then _WinAPI_SetWindowLong($hLV, $GWL_WNDPROC, $pProcOldLV) If IsHWnd($hWnd) Then GUIDelete($hWnd);prevents crash on exit caused by DllCallbackFree() If $iCallback Then DllCallbackFree($iCallback) If $iDLLUser32 Then DllClose($iDLLUser32) Exit EndFunc ;==>_Exit Func _LVWndProc($hWnd, $Msg, $wParam, $lParam) ;coded by rover 2k11 ;http://www.autoitscript.com/forum/topic/124308-listview-without-scrollbar/page__view__findpost__p__971386 #forceref $hWnd, $Msg, $wParam, $lParam Switch $Msg Case $WM_KEYDOWN ;horiz scrolling disabled If $wParam = 0x27 Then Return 0 ;VK_RIGHT Case $WM_MOUSEWHEEL ;if using mouse wheel scrolling ;Modified code from _Scrollbars_WM_MOUSEWHEEL() in GUIScrollbars_Ex UDF by Melba23 If Not BitAND($wParam, 0x0000FFFF) Then ; Move Vert scrollbar Local $iDirn = $SB_LINEDOWN, $iDelta = BitShift($wParam, 16) ; Mouse wheel movement direction If $iDelta > 0 Then $iDirn = $SB_LINEUP Local $iCnt = GUICtrlSendMsg($cListView, $LVM_GETCOUNTPERPAGE, 0, 0) ;get number of displayable items that fit in listview DllCall($iDLLUser32, "bool", "GetScrollInfo", "hwnd", $hWnd, "int", $SB_VERT, "struct*", $tSCROLLINFO) ; >= 3.3.8.x ;DllCall($iDLLUser32, "int", "GetScrollInfo", "hwnd", $hWnd, "int", $SB_VERT, "ptr", DllStructGetPtr($tSCROLLINFO)) ; < 3.3.8.x Local $iMax = DllStructGetData($tSCROLLINFO, "nMax") Local $iTrkPos = DllStructGetData($tSCROLLINFO, "nTrackPos") If (($iTrkPos + $iCnt) <= $iMax) Or ($iDelta > 0) Then GUICtrlSendMsg($cListView, $WM_VSCROLL, $iDirn, 0) EndIf Case $WM_WINDOWPOSCHANGING DllCall($iDLLUser32, "int", "ShowScrollBar", "hwnd", $hWnd, "int", $SB_BOTH, "int", 0);Hide scrollbars Local $tWINDOWPOS = DllStructCreate($tagWINDOWPOS, $lParam) ;prevents major flicker on scrolling DllStructSetData($tWINDOWPOS, "Flags", BitXOR(DllStructGetData($tWINDOWPOS, "Flags"), $SWP_FRAMECHANGED)) EndSwitch ;pass the unhandled messages to default WindowProc Local $aResult = DllCall($iDLLUser32, "lresult", "CallWindowProcW", "ptr", _ $wProcOldLV, "hwnd", $hWnd, "uint", $Msg, "wparam", $wParam, "lparam", $lParam) If @error Then Return -1 Return $aResult[0] EndFunc ;==>_LVWndProc Func _WM_NOTIFY($hWnd, $Msg, $wParam, $lParam) ;coded by rover 2k12 ;http://www.autoitscript.com/forum/topic/124308-listview-without-scrollbar/page__view__findpost__p__971386 #forceref $hWnd, $Msg, $wParam Local $tNMHDR, $hWndFrom, $iCode $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hWndFrom = DllStructGetData($tNMHDR, "hWndFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hListView Switch $iCode ;fix painting issues with scrolling, gridlines, item add/delete Case $LVN_DELETEITEM ;prevent flicker on item deletion DllCall($iDLLUser32, 'int', 'InvalidateRect', 'hwnd', $hWndFrom, 'ptr', 0, 'int', 1) Case $LVN_BEGINSCROLL ;fixes slight flicker when initially mouse scrolling from top or bottom, or mouse scrolling after any keypress DllCall($iDLLUser32, "lresult", "SendMessageW", "hwnd", $hWnd, "uint", $WM_SETREDRAW, "wparam", 0, "lparam", 0) ;disable screen painting at onset of scrolling Case $LVN_ENDSCROLL, $LVN_ITEMCHANGED ;prevent scrolling flicker (fixes gridline bug) DllCall($iDLLUser32, "lresult", "SendMessageW", "hwnd", $hWnd, "uint", $WM_SETREDRAW, "wparam", 1, "lparam", 0) ;enable screen painting at end of scrolling DllCall($iDLLUser32, 'int', 'InvalidateRect', 'hwnd', $hWndFrom, 'ptr', 0, 'int', 1) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>_WM_NOTIFY Edited March 16, 2012 by rover I see fascists... Link to comment Share on other sites More sharing options...
Belini Posted March 16, 2012 Share Posted March 16, 2012 Excellent Rover I'll put in my script, thanks. My Codes: Â Virtual Key Code UDF: http://www.autoitscript.com/forum/topic/138246-virtual-key-code-udf/ GuiSplashTextOn.au3: http://www.autoitscript.com/forum/topic/143542-guisplashtexton-udf/ Menu versions of Autoit: http://www.autoitscript.com/forum/topic/137435-menu-versions-of-autoit/#entry962011 Selects first folder of letters: ]http://www.autoitscript.com/forum/topic/144780-select-folders-by-letter/#entry1021708/spoiler] List files and folders with long addresses.: http://www.autoitscript.com/forum/topic/144910-list-files-and-folders-with-long-addresses/#entry102 Â 2926 Program JUKEBOX made in Autoit:some functions:http://www.youtube.com/watch?v=WJ2tC2fD5Qs Navigation to search:http://www.youtube.com/watch?v=lblwOFIbgtQ Â Â Link to comment Share on other sites More sharing options...
rover Posted March 16, 2012 Share Posted March 16, 2012 One last patch to fix those two issues just a minute... I see fascists... Link to comment Share on other sites More sharing options...
rover Posted March 16, 2012 Share Posted March 16, 2012 Post #10 updated with two fixes This code can have a custom themed scrollbar or themed scroll up/dn buttons added I have an example of that, maybe I'll post it in examples if there is interest. I see fascists... Link to comment Share on other sites More sharing options...
Belini Posted March 16, 2012 Share Posted March 16, 2012 With this code is possible to withdraw the bars 2 or 3 in the same listview gui? My Codes: Â Virtual Key Code UDF: http://www.autoitscript.com/forum/topic/138246-virtual-key-code-udf/ GuiSplashTextOn.au3: http://www.autoitscript.com/forum/topic/143542-guisplashtexton-udf/ Menu versions of Autoit: http://www.autoitscript.com/forum/topic/137435-menu-versions-of-autoit/#entry962011 Selects first folder of letters: ]http://www.autoitscript.com/forum/topic/144780-select-folders-by-letter/#entry1021708/spoiler] List files and folders with long addresses.: http://www.autoitscript.com/forum/topic/144910-list-files-and-folders-with-long-addresses/#entry102 Â 2926 Program JUKEBOX made in Autoit:some functions:http://www.youtube.com/watch?v=WJ2tC2fD5Qs Navigation to search:http://www.youtube.com/watch?v=lblwOFIbgtQ Â Â Link to comment Share on other sites More sharing options...
rover Posted March 16, 2012 Share Posted March 16, 2012 With this code is possible to withdraw the bars 2 or 3 in the same listview gui?can you elaborate further on that?When you say withdraw do you mean remove?what bars?, do you mean rows or columns? I see fascists... Link to comment Share on other sites More sharing options...
rover Posted March 16, 2012 Share Posted March 16, 2012 O.K. I see what you mean, the gridlines. That style sets a fixed grid for the whole listview. However, you could use the UDF group functions to create a header for a group of items I see fascists... Link to comment Share on other sites More sharing options...
rover Posted March 16, 2012 Share Posted March 16, 2012 What you want with the edited gridlines has to be done by some kind of transparency or painting over the listvew. That is beyond the scope of the modification here, look on the forum for ideas. Just did some more testing in Win 7 x64 I coded this in XP (more bugs and poor performance) to eliminate flickering. Listview performance in Win 7 is much better If you won't be running run this on XP and you don't see any flicker or can live with the slight flicker when scrolling with pg up/dn then remove the WM_NOTIFY message handler and GuiRegisterMsg() line or include the WM_NOTIFY message handler and add an OS check . If XP Then GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY") If using your own message handler then set a flag to run the functions in the message handler if XP I see fascists... Link to comment Share on other sites More sharing options...
Belini Posted March 16, 2012 Share Posted March 16, 2012 (edited) can you elaborate further on that? When you say withdraw do you mean remove? what bars?, do you mean rows or columns? Remove all listview scroll bar that is in the gui. Edited March 16, 2012 by Belini My Codes: Â Virtual Key Code UDF: http://www.autoitscript.com/forum/topic/138246-virtual-key-code-udf/ GuiSplashTextOn.au3: http://www.autoitscript.com/forum/topic/143542-guisplashtexton-udf/ Menu versions of Autoit: http://www.autoitscript.com/forum/topic/137435-menu-versions-of-autoit/#entry962011 Selects first folder of letters: ]http://www.autoitscript.com/forum/topic/144780-select-folders-by-letter/#entry1021708/spoiler] List files and folders with long addresses.: http://www.autoitscript.com/forum/topic/144910-list-files-and-folders-with-long-addresses/#entry102 Â 2926 Program JUKEBOX made in Autoit:some functions:http://www.youtube.com/watch?v=WJ2tC2fD5Qs Navigation to search:http://www.youtube.com/watch?v=lblwOFIbgtQ Â Â Link to comment Share on other sites More sharing options...
rover Posted March 16, 2012 Share Posted March 16, 2012 (edited) What OS are you trying this on?What AutoIt version?Is that the code I posted, or have you changed something?Edit: I see what the problem is, this code uses the latest AutoIt 3.3.8,1The bool type is not in older AutoIt versions, so the hide scrollbar call fails,and one of the dll calls uses the new "struct*" param instead of "ptr" with DllStructGetPtr()so the mouse scrolling won't work in an older version without changesEdit: rewordingLet me guess, that's Win2000, not XP with classic (no theme) style.I have XP x86 and Win 7 x64, and with or without a theme there are no scrollbars in XP or Win 7This is coded using Unicode AutoIt, the API calls are all Unicode not Ansi.Unlikely it would work on Win2k without an older AutoIt version and a downgrading of the code to Ansi and dllcall/struct changesFor performance, these lines are called with a dll pseudo handle, instead of using the UDF versions, so there are differences in the 3.3.8.x/3.3.9.x versionsTry changing these lines in _LVWndProc()DllCall($iDLLUser32, "int", "GetScrollInfo", "hwnd", $hWnd, "int", $SB_VERT, "ptr", DllStructGetPtr($tSCROLLINFO)) DllCall($iDLLUser32, "int", "ShowScrollBar", "hwnd", $hWnd, "int", $SB_BOTH, "int", 0)Replace bool with lparam or lresult for return type in SendMessageW in WM_NOTIFY (_GUICtrlListView_BeginUpdate / _GUICtrlListView_EndUpdate)I don't know where I copied that sendmessage from with bool for return?DllCall($iDLLUser32, "lresult", "SendMessageW", "hwnd", $hWnd, "uint", $WM_SETREDRAW, "wparam", 0, "lparam", 0) Edited March 16, 2012 by rover I see fascists... Link to comment Share on other sites More sharing options...
Belini Posted March 16, 2012 Share Posted March 16, 2012 I did not explain right, the script is working well. I remove the scrollbars of all listview that has the GUI. My Codes: Â Virtual Key Code UDF: http://www.autoitscript.com/forum/topic/138246-virtual-key-code-udf/ GuiSplashTextOn.au3: http://www.autoitscript.com/forum/topic/143542-guisplashtexton-udf/ Menu versions of Autoit: http://www.autoitscript.com/forum/topic/137435-menu-versions-of-autoit/#entry962011 Selects first folder of letters: ]http://www.autoitscript.com/forum/topic/144780-select-folders-by-letter/#entry1021708/spoiler] List files and folders with long addresses.: http://www.autoitscript.com/forum/topic/144910-list-files-and-folders-with-long-addresses/#entry102 Â 2926 Program JUKEBOX made in Autoit:some functions:http://www.youtube.com/watch?v=WJ2tC2fD5Qs Navigation to search:http://www.youtube.com/watch?v=lblwOFIbgtQ Â Â Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now