James Posted March 8, 2009 Posted March 8, 2009 Hey, I have been looking to resize a ListView, created with _GUICtrlListView_Create() when the window has been maximized. I have other controls working fine but the LV has been causing problems. I have searched and found this: Func WM_SIZE($hWnd, $iMsg, $iwParam, $lParam) Local $iWidth = BitAND($lParam, 0xFFFF) Local $iHeight = BitShift($lParam, 16) _WinAPI_MoveWindow($DriveList, 10, 10, $iWidth - 20, $iHeight - 20, True) _GUICtrlListView_SetColumn($DriveList, 2, "Type", $iWidth - 260) Return $GUI_RUNDEFMSG EndFunc ;==>WM_SIZE But this only does the second column. To fix this, I used _GUICtrlListView_SetColumWidth($DriveList, -1, $iWidth - 260), this kept all columns the same size, resized the width and the height to fit the whole GUI. Any ideas? James Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ
James Posted March 8, 2009 Author Posted March 8, 2009 I have tried ControlSetPos but this is a bit harder when the screen resolution and window size obviously changes. Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ
Moderators Melba23 Posted March 8, 2009 Moderators Posted March 8, 2009 JamesBrooks, I did this bit of ListView resizing when I was trying to cope with varying numbers of tab rows when resizing the GUI. Does it offer any insight to your problem? The ListView is back-coloured blue to show its extent - the button is inactive:expandcollapse popup#include<GUIConstantsEx.au3> #include<WindowsConstants.au3> #include<TabConstants.au3> #include<GuiListView.au3> #include <GuiTab.au3> Opt("GUIResizeMode", $GUI_DOCKBORDERS) ; When window is resized, run this function GUIRegisterMsg($WM_SIZE, "MY_WM_SIZE") Global $iGUIWidth = 800, $iGUIHeight = 500, $fResized = False $MainGUI = GUICreate("Directory List", $iGUIWidth, $iGUIHeight, Default, Default, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX)) $TAB = GUICtrlCreateTab(1, 1, $iGUIWidth - 2, $iGUIHeight - 50, BitOR($GUI_SS_DEFAULT_TAB, $TCS_MULTILINE, $TCS_RIGHTJUSTIFY)) ; Set number of TabItems Global $iTabNumber = 15 ; Create array holding dummy tabitems Global $aTitles[$iTabNumber + 1] For $i = 1 To $iTabNumber $aTitles[$i] = "" For $j = 1 To Random(4, 10, 1) $aTitles[$i] &= String($i) & " " Next Next ; Determine initial TabTop value $iTabTop = Tab_Sizer($iTabNumber, $aTitles) ; Create array to hold ListView handles Global $aListView[$iTabNumber + 1] = [$iTabNumber] ; Create tabitems For $i = 1 To $iTabNumber GUICtrlCreateTabItem($aTitles[$i]) $aListView[$i] = GUICtrlCreateListView("Column 1|Column 2", 10, $iTabTop, $iGUIWidth - 22, $iGUIHeight - $iTabTop - 50) _GUICtrlListView_SetColumnWidth($aListView[$i], 0, 150) _GUICtrlListView_SetColumnWidth($aListView[$i], 1, $LVSCW_AUTOSIZE_USEHEADER) _GUICtrlListView_SetBkColor($aListView[$i], 0xFF0000); Just to show the size GUICtrlSetResizing($aListView[$i], BitOR($GUI_DOCKBORDERS, $GUI_DOCKLEFT)) ; Fill ListView with items For $j = 1 To 25 GUICtrlCreateListViewItem("Item " & $j & " - ListView " & $i & "| Blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah", $aListView[$i]) Next Next ; Close Tab definiton GUICtrlCreateTabItem("") ; Create button $hButton = GUICtrlCreateButton("Button", 10, $iGUIHeight - 40, 120, 30) GUICtrlSetResizing(-1, BitOR($GUI_DOCKWIDTH, $GUI_DOCKHEIGHT, $GUI_DOCKBOTTOM)) GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $hButton ; Button press code goes here EndSwitch ; Look for resize message If $fResized Then ; Determine new TabTop value $iTabTop = Tab_Sizer($iTabNumber, $aTitles) ; Resize all Listviews to fit new Tab dimensions For $i = 1 To $aListView[0] GUICtrlSetPos($aListView[$i], 10, $iTabTop, $iGUIWidth - 22, $iGUIHeight - $iTabTop - 50) _GUICtrlListView_SetColumnWidth($aListView[$i], 0, $LVSCW_AUTOSIZE_USEHEADER) Next ; Reset flag $fResized = False EndIf WEnd Func Tab_Sizer($iTabTotal, $aTabTitles) ; Create test GUI $TestGUI = GUICreate("", $iGUIWidth, 500) ; Create test Tab $TestTAB = GUICtrlCreateTab(1, 1, $iGUIWidth - 2, 500, BitOR($GUI_SS_DEFAULT_TAB, $TCS_MULTILINE, $TCS_RIGHTJUSTIFY)) ; Create correct number of TabItems For $i = 1 To $iTabTotal GUICtrlCreateTabItem($aTabTitles[$i]) Next ; Measure the client area of the Tab $aPos = _GUICtrlTab_GetDisplayRect(ControlGetHandle($TestGUI, "", $TestTAB)) ; Delete test GUI GUIDelete($TestGUI) ; Return new TabTop value Return $aPos[1] EndFunc Func MY_WM_SIZE($hWnd, $Msg, $wParam, $lParam) $iGUIWidth = BitAND($lParam, 0xFFFF) $iGUIHeight = BitShift($lParam, 16) ; Set flag $fResized = True Return $GUI_RUNDEFMSG EndFunc;==>WM_SIZE Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
James Posted March 8, 2009 Author Posted March 8, 2009 Thanks Melba, I shall look into that! Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ
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