argumentum Posted December 14, 2015 Share Posted December 14, 2015 I need help with resizing controls. The following shows what I have in mind but no expertise to implement.expandcollapse popup#include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GuiStatusBar.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form= Global $Form1 = GUICreate("Form1", 466, 467, -1, -1, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_TABSTOP)) Global $Edit1 = GUICtrlCreateEdit("", 8, 8, 449, 193) GUICtrlSetData($Edit1, "Edit1") GUICtrlSetResizing($Edit1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKBOTTOM) Global $Edit2 = GUICtrlCreateEdit("", 8, 224, 449, 217) GUICtrlSetData($Edit2, "Edit2") GUICtrlSetResizing($Edit2, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKBOTTOM+$GUI_DOCKHEIGHT) Global $LabelAsDivider = GUICtrlCreateLabel("", 8, 208, 444, 9, $SS_BLACKFRAME) GUICtrlSetResizing($LabelAsDivider, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKBOTTOM+$GUI_DOCKHEIGHT) GUICtrlSetCursor ($LabelAsDivider, 11) Global $g_hStatus = _GUICtrlStatusBar_Create($Form1) _GUICtrlStatusBar_SetMinHeight($g_hStatus, 1) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### GUICtrlSetState($LabelAsDivider,$GUI_FOCUS) ; the control that would resize the other 2 GUICtrlEdit GUIRegisterMsg($WM_SIZE, "WM_SIZE") Local $aCursorInfo While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_PRIMARYDOWN $aCursorInfo = GUIGetCursorInfo($Form1) If UBound($aCursorInfo) = 5 Then If $aCursorInfo[4] = $LabelAsDivider Then fResizeEditCtrls() ; this I need help with, or the whole concept EndIf EndIf Case $GUI_EVENT_CLOSE GUIDelete($Form1) Exit EndSwitch WEnd Func fResizeEditCtrls() ; help me with this EndFunc ; Resize the status bar when GUI size changes Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam, $lParam _GUICtrlStatusBar_Resize($g_hStatus) Return $GUI_RUNDEFMSG EndFunc ;==>WM_SIZEany and all guidance greatly thankful for. Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
LarsJ Posted December 15, 2015 Share Posted December 15, 2015 In this example the status bar is removed. When the controls are resized in this manner, it's troublesome to handle the status bar.expandcollapse popup#include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <WinAPI.au3> Opt( "MustDeclareVars", 1 ) Global Const $iTitlebarHeight = _WinAPI_GetSystemMetrics( 31 ) ; 31 = $SM_CYSIZE Global Const $iBorderHeight = _WinAPI_GetSystemMetrics( 33 ) ; 33 = $SM_CYSIZEFRAME Global $hForm1, $idEdit1, $idEdit2, $hGuiAsDivider, $iMinHeight = 0, $fResize = False Example() Func Example() ; Reduce flicker $hForm1 = GUICreate( "Form1", 470, 490, -1, -1, BitOR( $GUI_SS_DEFAULT_GUI, $WS_OVERLAPPEDWINDOW, $WS_TABSTOP, $WS_CLIPCHILDREN ) ) $idEdit1 = GUICtrlCreateEdit( "Edit1", 10, 10, 450, 200 ) $idEdit2 = GUICtrlCreateEdit( "Edit2", 10, 240, 450, 240 ) GUICtrlSetResizing($idEdit1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKBOTTOM) GUICtrlSetResizing($idEdit2, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKBOTTOM+$GUI_DOCKHEIGHT) ; Use a child window to reduce flicker $hGuiAsDivider = GUICreate( "", 452, 10, 4, 214, $WS_POPUP, $WS_EX_MDICHILD, $hForm1 ) Local $idLabelAsDivider = GUICtrlCreateLabel("", 0, 0, 452, 10, $SS_ETCHEDFRAME) GUICtrlSetCursor( $idLabelAsDivider, 11 ) GUISetState( @SW_SHOWNOACTIVATE, $hGuiAsDivider ) GUISwitch( $hForm1 ) GUIRegisterMsg( $WM_SIZE, "WM_SIZE" ) GUIRegisterMsg( $WM_GETMINMAXINFO, "WM_GETMINMAXINFO" ) GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case $idLabelAsDivider ResizeEditCtrls() Case $GUI_EVENT_RESIZED Local $aPos = ControlGetPos( $hForm1, "", $idEdit1 ) WinMove( $hGuiAsDivider, "", Default, WinGetPos( $hForm1 )[1] + $iTitlebarHeight + $iBorderHeight + $aPos[3] + 20 + ( $fResize = True ) * 2, $aPos[2] ) ControlMove( $hForm1, "", $idEdit2, default, $aPos[3] + 40 ) $fResize = False Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd ; Cleanup GUIDelete($hForm1) Exit EndFunc Func ResizeEditCtrls() Local $aInfo = GUIGetCursorInfo( $hForm1 ), $y0 = $aInfo[1], $yPrev = $aInfo[1], $dy Local $aPos = WinGetPos( $hGuiAsDivider ), $aPos1 = ControlGetPos( $hForm1, "", $idEdit1 ), $aPos2 = ControlGetPos( $hForm1, "", $idEdit2 ) GUICtrlSetResizing($idEdit1, $GUI_DOCKALL ) GUICtrlSetResizing($idEdit2, $GUI_DOCKALL ) Do If $aInfo[1] <> $yPrev Then $dy = $aInfo[1] - $y0 If $aPos1[3] + $dy > 100 And $aPos2[3] - $dy > 100 Then WinMove( $hGuiAsDivider, "", Default, $aPos[1] + $dy ) ControlMove( $hForm1, "", $idEdit1, Default, Default, $aPos1[2], $aPos1[3] + $dy ) ControlMove( $hForm1, "", $idEdit2, Default, $aPos2[1] + $dy, $aPos2[2], $aPos2[3] - $dy ) EndIf $yPrev = $aInfo[1] EndIf $aInfo = GUIGetCursorInfo( $hForm1 ) Until $aInfo[2] = 0 GUICtrlSetResizing($idEdit1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKBOTTOM) GUICtrlSetResizing($idEdit2, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKBOTTOM+$GUI_DOCKHEIGHT) $iMinHeight = 0 EndFunc Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam, $lParam Local $aPos = ControlGetPos( $hForm1, "", $idEdit1 ) If $aPos[3] <= 100 Then $iMinHeight = WinGetPos( $hForm1 )[3] WinMove( $hGuiAsDivider, "", Default, WinGetPos( $hForm1 )[1] + $iTitlebarHeight + $iBorderHeight + $aPos[3] + 20, $aPos[2] ) Return $GUI_RUNDEFMSG EndFunc Func WM_GETMINMAXINFO( $hWnd, $iMsg, $wParam, $lParam ) Local $tMINMAXINFO = DllStructCreate( "int;int;int;int;int;int;int;int;int;int", $lParam ) DllStructSetData( $tMINMAXINFO, 8, $iMinHeight ) ; Min GUI height EndFunc Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions Link to comment Share on other sites More sharing options...
argumentum Posted December 15, 2015 Author Share Posted December 15, 2015 (edited) @LarsJ , thanks for the answer. The code fails when is maximized and gets worse after restore. If there is flicker, then, it flickers. Edit: I've added to "Case $GUI_EVENT_RESIZED" , ", $GUI_EVENT_MAXIMIZE, $GUI_EVENT_RESTORE" and is no fix. Edited December 15, 2015 by argumentum Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
LarsJ Posted December 15, 2015 Share Posted December 15, 2015 I have not added code for any of these cases. Just normal resize. I'll take a closer look tomorrow. argumentum 1 Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions Link to comment Share on other sites More sharing options...
argumentum Posted December 15, 2015 Author Share Posted December 15, 2015 I have not added code for any of these cases. Just normal resize. I'll take a closer look tomorrow.https://www.autoitscript.com/forum/topic/142015-scite-clone-autoit-scite-impostor/ does a good job of it ( not perfect but functional ) but I don't understand it. The sample code I paste, is an example, but I'm gonna be using the SciLexer.dll in the end and not the Edit controls. For the example, I figure that any control would do, without having to paste a lot of code, just for the notion of resizing. Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
LarsJ Posted December 16, 2015 Share Posted December 16, 2015 Mr. argumentum, I've added code to handle maximize, minimize and restore:expandcollapse popup#include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <WinAPI.au3> Opt( "MustDeclareVars", 1 ) Global Const $iTitlebarHeight = _WinAPI_GetSystemMetrics( 31 ) ; 31 = $SM_CYSIZE Global Const $iBorderHeight = _WinAPI_GetSystemMetrics( 33 ) ; 33 = $SM_CYSIZEFRAME Global $hForm1, $idEdit1, $idEdit2, $hGuiAsDivider, $iMinHeight = 0 Example() Func Example() ; Reduce flicker $hForm1 = GUICreate( "Form1", 470, 490, -1, -1, BitOR( $GUI_SS_DEFAULT_GUI, $WS_OVERLAPPEDWINDOW, $WS_TABSTOP, $WS_CLIPCHILDREN ) ) $idEdit1 = GUICtrlCreateEdit( "Edit1", 10, 10, 450, 200 ) $idEdit2 = GUICtrlCreateEdit( "Edit2", 10, 240, 450, 240 ) GUICtrlSetResizing($idEdit1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKBOTTOM) GUICtrlSetResizing($idEdit2, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKBOTTOM+$GUI_DOCKHEIGHT) ; Use a child window to reduce flicker $hGuiAsDivider = GUICreate( "", 452, 10, 4, 214, $WS_POPUP, $WS_EX_MDICHILD, $hForm1 ) Local $idLabelAsDivider = GUICtrlCreateLabel("", 0, 0, 452, 10, $SS_ETCHEDFRAME) GUICtrlSetCursor( $idLabelAsDivider, 11 ) GUISetState( @SW_SHOWNOACTIVATE, $hGuiAsDivider ) GUISwitch( $hForm1 ) GUIRegisterMsg( $WM_SIZE, "WM_SIZE" ) GUIRegisterMsg( $WM_GETMINMAXINFO, "WM_GETMINMAXINFO" ) GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case $idLabelAsDivider ResizeEditCtrls() Case $GUI_EVENT_MAXIMIZE, $GUI_EVENT_RESIZED Local $aPos1 = ControlGetPos( $hForm1, "", $idEdit1 ) WinMove( $hGuiAsDivider, "", Default, WinGetPos( $hForm1 )[1] + $iTitlebarHeight + $iBorderHeight + $aPos1[3] + 20 + 2, $aPos1[2] ) ControlMove( $hForm1, "", $idEdit2, default, $aPos1[3] + 40 ) Case $GUI_EVENT_RESTORE Local $aPos1 = ControlGetPos( $hForm1, "", $idEdit1 ) If $aPos1[3] < 100 Then GUICtrlSetResizing($idEdit1, $GUI_DOCKALL ) GUICtrlSetResizing($idEdit2, $GUI_DOCKALL ) ControlMove( $hForm1, "", $idEdit1, Default, Default, $aPos1[2], 100 ) ControlMove( $hForm1, "", $idEdit2, Default, 100 + 40, $aPos1[2], WinGetClientSize( $hForm1 )[1] - 100 - 40 - 10 ) GUICtrlSetResizing($idEdit1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKBOTTOM) GUICtrlSetResizing($idEdit2, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKBOTTOM+$GUI_DOCKHEIGHT) EndIf WinMove( $hGuiAsDivider, "", Default, WinGetPos( $hForm1 )[1] + $iTitlebarHeight + $iBorderHeight + $aPos1[3] + 20 + 2, $aPos1[2] ) Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd ; Cleanup GUIDelete($hForm1) Exit EndFunc Func ResizeEditCtrls() Local $aInfo = GUIGetCursorInfo( $hForm1 ), $y0 = $aInfo[1], $yPrev = $aInfo[1], $dy Local $aPos = WinGetPos( $hGuiAsDivider ), $aPos1 = ControlGetPos( $hForm1, "", $idEdit1 ), $aPos2 = ControlGetPos( $hForm1, "", $idEdit2 ) GUICtrlSetResizing($idEdit1, $GUI_DOCKALL ) GUICtrlSetResizing($idEdit2, $GUI_DOCKALL ) Do If $aInfo[1] <> $yPrev Then $dy = $aInfo[1] - $y0 If $aPos1[3] + $dy > 100 And $aPos2[3] - $dy > 100 Then WinMove( $hGuiAsDivider, "", Default, $aPos[1] + $dy ) ControlMove( $hForm1, "", $idEdit1, Default, Default, $aPos1[2], $aPos1[3] + $dy ) ControlMove( $hForm1, "", $idEdit2, Default, $aPos2[1] + $dy, $aPos2[2], $aPos2[3] - $dy ) EndIf $yPrev = $aInfo[1] EndIf $aInfo = GUIGetCursorInfo( $hForm1 ) Until $aInfo[2] = 0 GUICtrlSetResizing($idEdit1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKBOTTOM) GUICtrlSetResizing($idEdit2, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKBOTTOM+$GUI_DOCKHEIGHT) $iMinHeight = 0 EndFunc ; Resize the status bar when GUI size changes Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam, $lParam Local $aPos = ControlGetPos( $hForm1, "", $idEdit1 ) If $aPos[3] <= 100 Then $iMinHeight = WinGetPos( $hForm1 )[3] WinMove( $hGuiAsDivider, "", Default, WinGetPos( $hForm1 )[1] + $iTitlebarHeight + $iBorderHeight + $aPos[3] + 20, $aPos[2] ) Return $GUI_RUNDEFMSG EndFunc Func WM_GETMINMAXINFO( $hWnd, $iMsg, $wParam, $lParam ) Local $tMINMAXINFO = DllStructCreate( "int;int;int;int;int;int;int;int;int;int", $lParam ) DllStructSetData( $tMINMAXINFO, 8, $iMinHeight ) ; Min GUI height EndFunc argumentum 1 Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions 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