Athos Posted July 30, 2012 Share Posted July 30, 2012 (edited) Hi guys, I have a qustion involving sliding guis.I wanted my gui to be able to slide out (so I can have more hidden options and the like).So I followed the guide in this excellent link:Sure enough it worked and I have a sliding GUI now.....But there is just one problem (one that poster Rishav had but the question was never answered). The width of the child GUI that slides out is always the same as the parent button. This is annoying, because I want a button with dimensions (30,50) to slide out a child Gui that has dimensions almost the size of the parent gui (lets just say 500,300).So can anybody tell me how I can fix this? I tried manually changing the child gui's height but to no avail.As a code reference I'll post sandin's original example: (if that can be modified so that hte child gui is longer than I can surely fix my own).expandcollapse popup#include #include #Include ;Global Const $WM_ENTERSIZEMOVE = 0x0231 ;Global Const $WM_EXITSIZEMOVE = 0x0232 $main_height = 300 ;height of the pop-up window $slide_speed = 500 ;window pop-up/down speed, bigger number = slower, smaller number = faster $Gui = GUICreate("Test", 370, 200) ;main GUI $checkbox = GUICtrlCreateCheckbox("Disable main window when child is open", 5, 5, 250) GUICtrlSetState(-1, $GUI_CHECKED) $button1 = GUICtrlCreateButton("Child_1", 5, 160, 100, 30) $button2 = GUICtrlCreateButton("Child_2", 110, 30, 250, 20) $bb = GUICtrlCreateTab(130, 80, 200, 100) $lol = GUICtrlCreateTabItem("Random control") WinSetTrans($Gui, "", 255) ;if it's not set to 255, then sliding out has visual bugs GUISetState(@SW_SHOW, $Gui) $ParentPosArr = WinGetPos($Gui) $ChildGui = GuiCreate("Child test", 100, $main_height, $ParentPosArr[0]+$ParentPosArr[2], $ParentPosArr[1]+5,$WS_POPUP, $WS_EX_MDICHILD, $Gui) $childpos = WinGetPos($ChildGui) $label1 = GUICtrlCreateButton("Test button 1", $childpos[2]/2-45, 5, 90) GUICtrlSetResizing (-1, $GUI_DOCKWIDTH+$GUI_DOCKHCENTER) ;button will be in center, and will not change width in case of window increasement (like when u press button2) $label2 = GUICtrlCreateButton("Close", $childpos[2]/2-45, 270, 90) GUICtrlSetResizing (-1, $GUI_DOCKWIDTH+$GUI_DOCKHCENTER) $label3 = GUICtrlCreateInput("Test", $childpos[2]/2-45, 80, 90) GUICtrlCreateGraphic(0, 0, $childpos[2], $childpos[3], 0x07) ;gray line on the edge of the pop up window GUISetState(@SW_HIDE, $ChildGui) $child2 = GuiCreate("Child test", 100, $main_height, $ParentPosArr[0]+$ParentPosArr[2], $ParentPosArr[1]+5,$WS_POPUP, $WS_EX_MDICHILD, $Gui) ;transparent window to lock main window when child is opened GUISetBkColor(0, $child2) WinSetTrans($child2, "", 100) GUISetState(@SW_HIDE, $child2) GUIRegisterMsg(0x0231,"WM_ENTERSIZEMOVE") GUIRegisterMsg(0x0232, "WM_EXITSIZEMOVE") Func WM_ENTERSIZEMOVE($hWndGUI, $MsgID, $WParam, $LParam) WinSetTrans($ChildGui,"",254) EndFunc Func WM_EXITSIZEMOVE($hWndGUI, $MsgID, $WParam, $LParam) WinSetTrans($ChildGui,"",255) EndFunc While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE Exit Case $button1 _show_child_window($button1, $slide_speed) ;slide in pop-up window ($button1 = button's handle) Case $button2 _show_child_window($button2, $slide_speed) case $label2 _slide_out($ChildGui, $slide_speed) EndSwitch WEnd Func _show_child_window($button_handle, $Speed) if WinExists($ChildGui) then _slide_out($ChildGui, $Speed/2) ;2x faster if switching between button pop-ups endif _slide_in($ChildGui, $Speed, $button_handle) EndFunc func _slide_in($hwGui, $Speed, $hwCtrl) Local $position = ControlGetPos($Gui, "", $hwCtrl) Local $position2 = WinGetPos($Gui) Local $position2b = WinGetClientSize($Gui) Local $position3 = WinGetPos($hwGui) Local $light_border = ($position2[2]-$position2b[0])/2 Local $thick_border = ($position2[3]-$position2b[1])-$light_border WinMove($hwGui, "", $position2[0]+$position[0]+$light_border, $position2[1]+$position[1]+$position[3]+$thick_border, $position[2]);set the window exacly below button DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $hwGui, "int", $Speed, "long", 0x00040004) _WinAPI_RedrawWindow($hwGui) GUISetState(@SW_SHOW, $hwGui) if GUICtrlRead($checkbox) = $GUI_CHECKED Then WinMove($child2, "", $position2[0]+$light_border, $position2[1]+$thick_border, $position2b[0], $position2b[1]) WinSetTrans($child2, "", 0) GUISetState(@SW_DISABLE, $child2) GUISetState(@SW_SHOWNOACTIVATE, $child2) for $i = 1 to 100 Step 10 ;showing "lock window" in smooth transparency WinSetTrans($child2, "", $i) Sleep(1) Next EndIf EndFunc func _slide_out($hwGui, $Speed) if WinExists($child2) Then for $i = 100 to 1 Step -10 WinSetTrans($child2, "", $i) Sleep(1) Next GUISetState(@SW_HIDE, $child2) EndIf DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $hwGui, "int", $Speed, "long", 0x00050008) GUISetState(@SW_HIDE, $hwGui) EndFunc Edited July 30, 2012 by Athos Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted July 30, 2012 Moderators Share Posted July 30, 2012 Athos,The width of the slide out GUI is set by this line in the _slide_in function:WinMove($hwGui, "", $position2[0]+$position[0]+$light_border, $position2[1]+$position[1]+$position[3]+$thick_border, $position[2]);set the window exacly below buttonTo increase the width of the GUI, just adjust the parameters. For example if you do this:WinMove($hwGui, "", $position2[0]+$position[0]+$light_border, $position2[1]+$position[1]+$position[3]+$thick_border, $position[2] + 100);set the window exacly below buttonyou make the GUI 100 pixels wider than the button. All clear? M23 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 Link to comment Share on other sites More sharing options...
Athos Posted July 30, 2012 Author Share Posted July 30, 2012 Very clear, Thank you Melba 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