argumentum 171 Report post 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 see my signature's stuff. Share this post Link to post Share on other sites
LarsJ 545 Report post 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 Compiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeWindows Explorer: Automating and examples, Implementing right pane, Implementing address barShell 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 selectionsControl related: Hot-Track Enabled Toolbar Menu, Simulating a modeless Choose Color Dialog, Colors and fonts in TreeViewsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions Share this post Link to post Share on other sites
argumentum 171 Report post 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 see my signature's stuff. Share this post Link to post Share on other sites
LarsJ 545 Report post Posted December 15, 2015 I have not added code for any of these cases. Just normal resize. I'll take a closer look tomorrow. 1 Compiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeWindows Explorer: Automating and examples, Implementing right pane, Implementing address barShell 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 selectionsControl related: Hot-Track Enabled Toolbar Menu, Simulating a modeless Choose Color Dialog, Colors and fonts in TreeViewsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions Share this post Link to post Share on other sites
argumentum 171 Report post 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 see my signature's stuff. Share this post Link to post Share on other sites
LarsJ 545 Report post 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 1 Compiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeWindows Explorer: Automating and examples, Implementing right pane, Implementing address barShell 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 selectionsControl related: Hot-Track Enabled Toolbar Menu, Simulating a modeless Choose Color Dialog, Colors and fonts in TreeViewsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions Share this post Link to post Share on other sites