Leaderboard
Popular Content
Showing content with the highest reputation on 06/02/2018 in all areas
-
In my opinion, I posted a previous version years ago, but I could not find anything. So here for you: With GroupEx.au3 you can create another kind of group controls. It is a collection of labels, which is returned as a structure, consisting of the following elements: .Text = title text .Left = left side of border .TopL = top side of border - left from title .TopR = top side of border - right from title .Right = right side of border .Bottom = bottom side of border .Background = area inside the borders Functions: _GuiCtrlGroup_Create - Creates a group control as collection of labels _GuiCtrlGroup_Close - Closes a group (new in v0.10) _GuiCtrlGroup_Set - Changes values of a _GuiCtrlGroup_Create() created control. _GuiCtrlGroup_SetState - Changes the state of a _GuiCtrlGroup_Create() created control. - Style The title text can have normal or italic style. I did not use style bold, font and size because it would destroy the arithmetic of the group. Underlined or striked style is not usefull for title. - Colors For each element of the structure you can set different colors. The title has by default as back color $GUI_BKCOLOR_TRANSPARENT. You can change this color too, but it looks not so nice. - Movement You can move the group (absolute or relative to the parent) and the controls inside too (passed as array of ID). - State You can change the state of a group ($GUI_SHOW, $GUI_HIDE, $GUI_ENABLE, $GUI_DISABLE) and the state for all controls inside too (passed as array of ID). If setting to DISABLE, you can set the title and background colors for this state. The previous colors will returned as structure. You can use them for ENABLE again. If you use DISABLE without colors, the defaults will used (see constants on top of the script). EDIT 02.06.2018 NEW: - Now non-native controls (e.g. _GUICtrlComboBox_Create) are also taken into account when moving and setting the status. - Function _GuiCtrlGroup_Close to close a group. FIXED: Error after disabling / enabling - controls inside was'nt clickable EDIT 12.06.2018 v0.13 Some little changes: - The current used color for title and group area will stored in the group-structure in the moment, you set to disable. Therefore are the color parameters in the function _GuiCtrlGroup_SetState() optional. - The default disable/enable state uses the system colors. - In functions _GuiCtrlGroup_Set() and _GuiCtrlGroup_SetState() you can pass an array of ID or a single ID variable. GroupEx.au3 v0.13 ;-- TIME_STAMP 2018-06-12 09:01:34 v 0.13 #include-once #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <WinAPIGdi.au3> #include <WinAPI.au3> ; == border color settings Global Const $_GROUPBORDER_LEFT = 0x000001 ; == left border Global Const $_GROUPBORDER_TOPL = 0x000002 ; == top border left from title Global Const $_GROUPBORDER_TOPR = 0x000004 ; == top border right from title Global Const $_GROUPBORDER_TOP = BitOR($_GROUPBORDER_TOPL,$_GROUPBORDER_TOPR) ; == top border Global Const $_GROUPBORDER_RIGHT = 0x000008 ; == right border Global Const $_GROUPBORDER_BOTTOM = 0x000010 ; == bottom border Global Const $_GROUPBORDER_ALL = BitOR($_GROUPBORDER_LEFT,$_GROUPBORDER_TOP,$_GROUPBORDER_RIGHT,$_GROUPBORDER_BOTTOM) ; == full border ; == text settings Global Const $_GROUPTEXT_FORE = 0x000020 ; == sets text fore color Global Const $_GROUPTEXT_BACK = 0x000040 ; == sets text BG-color, should be $GUI_BKCOLOR_TRANSPARENT (default), if Group BG-color is diffent to GUI BG-color or same as Group BG-color Global Const $_GROUPTEXT_TRANS = 0x000080 ; == sets text BG-color to $GUI_BKCOLOR_TRANSPARENT Global Const $_GROUPTEXT_TEXT = 0x000100 ; == sets the title text Global Const $_GROUPTEXT_ITALIC = 0x000200 ; == sets text style to italic Global Const $_GROUPTEXT_DEFAULT = 0x000400 ; == sets text style back to normal Global Const $_GROUPTEXT_LEFT = 0x000800 ; == sets text position to left side (default) Global Const $_GROUPTEXT_CENTER = 0x001000 ; == sets text position centered Global Const $_GROUPTEXT_RIGHT = 0x002000 ; == sets text position to right side ; == background color group Global Const $_GROUPBACKGROUND = 0x004000 ; == sets BG-color inside border area ; == move the whole control Global Const $_GROUP_MOVE_ABS = 0x008000 ; == give param as array [x,y,width,height], values that should not change set to "*" ; you can also give values as comma seperated string: "x,y,width,height" ; y,width,height by default has value "*", so you can omit them if not need to change Global Const $_GROUP_MOVE_REL = 0x010000 ; == same as before, but given values relative to current position/size ; == default disabling colors Global Const $_GROUP_DISABLE_BGDEF = 0xFAFAFA ; == the default background color value, if disabling the group Global Const $_GROUP_DISABLE_TXTDEF = _WinAPI_GetSysColor($COLOR_GRAYTEXT) ; == the default title color value, if disabling the group ; == get system metrics Global $_giTop, $_giSide __SystemGetWindowBorder($_giTop, $_giSide) ; == get system colors Global Const $_giActiveWindowBG = _WinAPI_GetSysColor($COLOR_WINDOW) Global Const $_giEnabledText = _WinAPI_GetSysColor($COLOR_WINDOWTEXT) Global Const $_giActiveBorder = _WinAPI_GetSysColor($COLOR_ACTIVEBORDER) ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GuiCtrlGroup_Create ; Description ...: Creates a group control as collection of labels ; Syntax ........: _GuiCtrlGroup_Create($_sText, $_iX, $_iY, $_iWidth, $_iHeight[, $_iBorderCol = -1[, $_iForeCol = -1[, ; $_iBackCol = -1[, $_iTitleParam=$_GROUPTEXT_LEFT]]]]) ; Parameters ....: $_hGui - GUI, where the group is still create ; $_sText - Titel ; $_iX - x position ; $_iY - y position, its the value for top of the title - border starts at: y +7 ; $_iWidth - width ; $_iHeight - height, its the height from top of title to bottom border ; $_iBorderCol - [optional] Color for all border elements. Keyword Default = $COLOR_ACTIVEBORDER, -1 = System (invisible) ; $_iForeCol - [optional] Title text color. Default is -1 (System). ; $_iBackCol - [optional] Group area background color. Default is -1 (System). ; $_iTitleParam - [optional] Title align left (default), centered or right or combined with italic style: BitOr($_CONST_ALIGN_, $_GROUPTEXT_ITALIC) ; Because $_GROUPTEXT_LEFT is the default alignment, you can use $_GROUPTEXT_ITALIC alone, to set italic style left aligned. ; Return values .: Structure with IDs of all group elements ; Author ........: BugFix ; =============================================================================================================================== Func _GuiCtrlGroup_Create($_hGui, $_sText, $_iX, $_iY, $_iWidth, $_iHeight, $_iBorderCol=Default, $_iForeCol=-1, $_iBackCol=-1, $_iTitleParam=$_GROUPTEXT_LEFT) $_iY += 7 Local $guiTmp = GUICreate('TEMP') Local $idText, $aSize[1] If $_sText <> '' Then $idText = GUICtrlCreateLabel(' ' & $_sText, 0, 0) $aSize = ControlGetPos($guiTmp, '', $idText) GUICtrlDelete($idText) Else ReDim $aSize[3] $aSize[2] = 0 EndIf GUISwitch($_hGui) GUIDelete($guiTmp) If $aSize[2] > $_iWidth -12 Then $aSize[2] = $_iWidth -12 Local $dLeft = 10 If $aSize[2] > 0 Then Switch $_iTitleParam Case $_GROUPTEXT_CENTER $dLeft = Int(($_iWidth-$aSize[2])/2) Case $_GROUPTEXT_RIGHT $dLeft = $_iWidth-10-$aSize[2] EndSwitch EndIf Local $idBG = GUICtrlCreateLabel('', $_iX+1, $_iY+1, $_iWidth-2, $_iHeight-2-7) If $_iBackCol > -1 Then GUICtrlSetBkColor($idBG, $_iBackCol) GUICtrlSetState($idBG, $GUI_DISABLE) Local $idLeft = GUICtrlCreateLabel('', $_iX, $_iY, 1, $_iHeight-7) Local $idTopL = GUICtrlCreateLabel('', $_iX+1, $_iY, $dLeft-1, 1) Local $idTopR = GUICtrlCreateLabel('', $_iX+$dLeft+$aSize[2], $_iY, $_iWidth-$aSize[2]-$dLeft, 1) Local $idRight = GUICtrlCreateLabel('', $_iX+$_iWidth, $_iY, 1, $_iHeight-7) Local $idBottom = GUICtrlCreateLabel('', $_iX+1, $_iY+$_iHeight-7, $_iWidth, 1) If IsKeyword($_iBorderCol) Then $_iBorderCol = $_giActiveBorder If $_iBorderCol > -1 Then GUICtrlSetBkColor($idLeft, $_iBorderCol) GUICtrlSetBkColor($idTopL, $_iBorderCol) GUICtrlSetBkColor($idTopR, $_iBorderCol) GUICtrlSetBkColor($idRight, $_iBorderCol) GUICtrlSetBkColor($idBottom, $_iBorderCol) EndIf If $_sText <> '' Then $_sText = ' ' & $_sText $idText = GUICtrlCreateLabel($_sText, $_iX+$dLeft, $_iY-7, $aSize[2], 17) GUICtrlSetBkColor($idText, $GUI_BKCOLOR_TRANSPARENT) If BitAND($_iTitleParam, $_GROUPTEXT_ITALIC) Then GUICtrlSetFont($idText, Default, Default, 2) EndIf If $_iForeCol > -1 Then GUICtrlSetColor($idText, $_iForeCol) Local $tagGROUP = "int Text;int Left;int TopL;int TopR;int Right;int Bottom;int Background;int Align;int BGPrev;int TextPrev;" Local $tGROUP = DllStructCreate($tagGROUP) $tGROUP.Text = $idText $tGROUP.Left = $idLeft $tGROUP.TopL = $idTopL $tGROUP.TopR = $idTopR $tGROUP.Right = $idRight $tGROUP.Bottom = $idBottom $tGROUP.Background = $idBG $tGROUP.Align = BitXOR($_iTitleParam, $_GROUPTEXT_ITALIC) $tGROUP.BGPrev = ($_iBackCol = -1 ? $_giActiveWindowBG : $_iBackCol) $tGROUP.TextPrev = ($_iForeCol = -1 ? $_giEnabledText : $_iForeCol) GUIStartGroup() Return $tGROUP EndFunc ;==>_GuiCtrlGroup_Create ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GuiCtrlGroup_Close ; Description ...: Starts a new group and so the previous group will closed ; Syntax ........: _GuiCtrlGroup_Close() ; Return values .: None ; Note ..........: Only required, if outside the group radio buttons following. But it can used to close each group. ; Author ........: BugFix ; =============================================================================================================================== Func _GuiCtrlGroup_Close() GUIStartGroup() EndFunc ;==>_GuiCtrlGroup_Close ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GuiCtrlGroup_Set ; Description ...: Changes values of a _GuiCtrlGroup_Create() created control. ; Syntax ........: _GuiCtrlGroup_Set(ByRef $_structGroup, $_vValue, $_constFlag, $_aCtrlInside) ; Parameters ....: $_structGroup - Return value from _GuiCtrlGroup_Create() ; $_vValue - The new value, maybe an empty string with some flag. ; $_constFlag - The const to identify the action (see constants at top) ; $_aCtrlInside - [optional] With action flag $_GROUP_MOVE_ABS/$_GROUP_MOVE_REL you can give an array of controls ; (or a single control variable) inside this group. This controls will moved too with the delta x/y values. ; Return values .: None ; Author ........: BugFix ; =============================================================================================================================== Func _GuiCtrlGroup_Set(ByRef $_structGroup, $_vValue, $_constFlag, $_aCtrlInside= Null) Local $hWndGui = _WinAPI_GetParent(GUICtrlGetHandle($_structGroup.Background)) Local $idText = $_structGroup.Text Local $idLeft = $_structGroup.Left Local $idTopL = $_structGroup.TopL Local $idTopR = $_structGroup.TopR Local $idRight = $_structGroup.Right Local $idBottom = $_structGroup.Bottom Local $idBackground = $_structGroup.Background Local $iAlign = $_structGroup.Align Local $aSize, $aBott, $sTitle If BitAND($_constFlag, $_GROUPBORDER_LEFT) Then GUICtrlSetBkColor($idLeft, $_vValue) If BitAND($_constFlag, $_GROUPBORDER_TOPL) Then GUICtrlSetBkColor($idTopL, $_vValue) If BitAND($_constFlag, $_GROUPBORDER_TOPR) Then GUICtrlSetBkColor($idTopR, $_vValue) If BitAND($_constFlag, $_GROUPBORDER_RIGHT) Then GUICtrlSetBkColor($idRight, $_vValue) If BitAND($_constFlag, $_GROUPBORDER_BOTTOM) Then GUICtrlSetBkColor($idBottom, $_vValue) If BitAND($_constFlag, $_GROUPBACKGROUND) Then GUICtrlSetBkColor($idBackground, $_vValue) $_structGroup.BGPrev = $_vValue EndIf If BitAND($_constFlag, $_GROUPTEXT_FORE) Then GUICtrlSetColor($idText, $_vValue) $_structGroup.TextPrev = $_vValue EndIf If BitAND($_constFlag, $_GROUPTEXT_BACK) Then GUICtrlSetBkColor($idText, $_vValue) If BitAND($_constFlag, $_GROUPTEXT_TRANS) Then GUICtrlSetBkColor($idText, $GUI_BKCOLOR_TRANSPARENT) If BitAND($_constFlag, $_GROUPTEXT_ITALIC) Then GUICtrlSetFont ($idText, Default, Default, 2) If BitAND($_constFlag, $_GROUPTEXT_DEFAULT) Then GUICtrlSetFont ($idText, Default, Default, Default) If BitAND($_constFlag, BitOR($_GROUPTEXT_LEFT,$_GROUPTEXT_CENTER,$_GROUPTEXT_RIGHT,$_GROUPTEXT_TEXT)) Then $aSize = ControlGetPos($hWndGui, '', $idLeft) $aBott = ControlGetPos($hWndGui, '', $idBottom) Local $x = $aSize[0], $y = $aSize[1] If $_vValue = '' Then If BitAND($_constFlag, BitOR($_GROUPTEXT_LEFT,$_GROUPTEXT_CENTER,$_GROUPTEXT_RIGHT)) Then $aSize = ControlGetPos($hWndGui, '', $idText) Else $aSize[2] = 0 EndIf Else Local $guiTmp = GUICreate('') GUISwitch($guiTmp) Local $idTmp = GUICtrlCreateLabel(' ' & $_vValue, 0, 0) $aSize = ControlGetPos($guiTmp, '', $idTmp) GUICtrlDelete($idTmp) GUISwitch($hWndGui) GUIDelete($guiTmp) EndIf Local $dLeft = 10 If $aSize[2] > $aBott[2] -12 Then $aSize[2] = $aBott[2] -12 If $aSize[2] > 0 Then If BitAND($_constFlag, $_GROUPTEXT_CENTER) Then $dLeft = Int(($aBott[2]-$aSize[2])/2) If BitAND($_constFlag, $_GROUPTEXT_RIGHT) Then $dLeft = $aBott[2]-10-$aSize[2] EndIf GUICtrlSetPos($idTopL, $x+1, $y, $dLeft-1, 1) GUICtrlSetPos($idTopR, $x+$dLeft+$aSize[2], $y, $aBott[2]+2-$aSize[2]-$dLeft, 1) GUICtrlSetPos($idText, $x+$dLeft, $y-7, $aSize[2], 17) If BitAND($_constFlag, $_GROUPTEXT_TEXT) Then If $_vValue <> '' Then $_vValue = ' ' & $_vValue GUICtrlSetData($idText, $_vValue) EndIf EndIf If BitAND($_constFlag, BitOR($_GROUP_MOVE_ABS,$_GROUP_MOVE_REL)) Then If Not IsArray($_vValue) Then $_vValue = StringSplit($_vValue, ',', 2) If UBound($_vValue) < 4 Then ReDim $_vValue[4] For $i = 1 To 3 If $_vValue[$i] = '' Then $_vValue[$i] = '*' Next EndIf Local $bRel = False If BitAND($_constFlag, $_GROUP_MOVE_REL) Then $bRel = True GUISetState(@SW_LOCK, $hWndGui) Local $aDelta = __SubCtrlMove($hWndGui, $_structGroup, $_vValue, $bRel, $iAlign) ; if an array with controls from inside the group is given - move them too If $_aCtrlInside <> Null Then If Not IsArray($_aCtrlInside) Then Local $aTmp[1] = [$_aCtrlInside] $_aCtrlInside = $aTmp EndIf Local $aSize, $dX = $aDelta[0], $dY = $aDelta[1], $bhWnd, $opt = AutoitSetOption('GUICoordMode', 1) For $i = 0 To UBound($_aCtrlInside) -1 $bhWnd = False If IsHWnd($_aCtrlInside[$i]) Then $bhWnd = True $aSize = WinGetPos($_aCtrlInside[$i]) Else $aSize = ControlGetPos($hWndGui, '', $_aCtrlInside[$i]) EndIf __ControlMove($hWndGui, $bhWnd, $_aCtrlInside[$i], $aSize, $dX, $dY) Next AutoitSetOption('GUICoordMode', $opt) EndIf GUISetState(@SW_UNLOCK, $hWndGui) EndIf DllCall("user32.dll", "bool", "RedrawWindow", "hwnd", $hWndGui, "struct*", 0, "handle", 0, "uint", 5) EndFunc ;==>_GuiCtrlGroup_Set ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GuiCtrlGroup_SetState ; Description ...: Changes the state of a _GuiCtrlGroup_Create() created control. ; Syntax ........: _GuiCtrlGroup_SetState(ByRef $_structGroup, $_iState, $_aCtrlInside, $_iTxtColor, $_iBGColor) ; Parameters ....: $_structGroup - Return value from _GuiCtrlGroup_Create() ; $_iState - The new state ($GUI_SHOW, $GUI_HIDE, $GUI_ENABLE, $GUI_DISABLE) ; $_aCtrlInside - [optional] When you pass an array of controls (or a single control variable), they are set to the same state as the group itself. ; $_iTxtColor - [optional] The title color if set to disable/enable. With 'Null' the default/previous color will used. "-1" uses the system color. ; $_iBGColor - [optional] The background color if set to disable/enable. With 'Null' the default/previous color will used. "-1" uses the system color. ; Return values .: Failure - returns -1, sets @error = 1 (Wrong state value) ; Author ........: BugFix ; =============================================================================================================================== Func _GuiCtrlGroup_SetState(ByRef $_structGroup, $_iState, $_aCtrlInside=Null, $_iTxtColor=Null, $_iBGColor=Null) If Not BitAND(BitOR($GUI_SHOW, $GUI_HIDE, $GUI_ENABLE, $GUI_DISABLE), $_iState) Then Return SetError(1,0,-1) Local Static $aState[4][2] = [[$GUI_SHOW, @SW_SHOW], [$GUI_HIDE, @SW_HIDE], [$GUI_ENABLE, @SW_ENABLE], [$GUI_DISABLE, @SW_DISABLE]] Local $hWndGui = _WinAPI_GetParent(GUICtrlGetHandle($_structGroup.Background)) Switch $_iState ; select the colors to set in the new state Case $GUI_DISABLE If $_iTxtColor = Null Then $_iTxtColor = $_GROUP_DISABLE_TXTDEF If $_iBGColor = Null Then $_iBGColor = $_GROUP_DISABLE_BGDEF Case $GUI_ENABLE If $_iTxtColor = Null Then $_iTxtColor = $_structGroup.TextPrev If $_iBGColor = Null Then $_iBGColor = $_structGroup.BGPrev $_structGroup.TextPrev = ($_iTxtColor = -1 ? $_giEnabledText : $_iTxtColor) $_structGroup.BGPrev = ($_iBGColor = -1 ? $_giActiveWindowBG : $_iBGColor) EndSwitch GUISetState(@SW_LOCK, $hWndGui) GuiCtrlSetState($_structGroup.Text, $_iState) If $_iState = $GUI_SHOW Or $_iState = $GUI_HIDE Then GuiCtrlSetState($_structGroup.Left, $_iState) GuiCtrlSetState($_structGroup.TopL, $_iState) GuiCtrlSetState($_structGroup.TopR, $_iState) GuiCtrlSetState($_structGroup.Right, $_iState) GuiCtrlSetState($_structGroup.Bottom, $_iState) GuiCtrlSetState($_structGroup.Background, $_iState) EndIf If $_aCtrlInside <> Null Then If Not IsArray($_aCtrlInside) Then Local $aTmp[1] = [$_aCtrlInside] $_aCtrlInside = $aTmp EndIf Local $iWinState For $i = 0 To UBound($aState) -1 If $aState[$i][0] = $_iState Then $iWinState = $aState[$i][1] ExitLoop EndIf Next For $i = 0 To UBound($_aCtrlInside) -1 If IsHWnd($_aCtrlInside[$i]) Then WinSetState($_aCtrlInside[$i], '', $iWinState) Else GuiCtrlSetState($_aCtrlInside[$i], $_iState) EndIf Next EndIf If $_iTxtColor <> Null Then GUICtrlSetColor($_structGroup.Text, $_iTxtColor) If $_iBGColor <> Null Then GUICtrlSetBkColor($_structGroup.Background, $_iBGColor) GUISetState(@SW_UNLOCK, $hWndGui) DllCall("user32.dll", "bool", "RedrawWindow", "hwnd", $hWndGui, "struct*", 0, "handle", 0, "uint", 5) EndFunc ;==>_GuiCtrlGroup_SetState ; == for internal use Func __SubCtrlMove($_hGui, ByRef $_structGroup, $_aVal, $_bRel=False, $_iAlign=$_GROUPTEXT_LEFT) Local $idText = $_structGroup.Text Local $idLeft = $_structGroup.Left Local $idTopL = $_structGroup.TopL Local $idTopR = $_structGroup.TopR Local $idRight = $_structGroup.Right Local $idBottom = $_structGroup.Bottom Local $idBackground = $_structGroup.Background Local $dX, $dY, $dW, $dH Local $aSize = ControlGetPos($_hGui, '', $idLeft) Local $aBott = ControlGetPos($_hGui, '', $idBottom) If $_bRel Then $dX = $_aVal[0] $dY = $_aVal[1] $dW = $_aVal[2] $dH = $_aVal[3] If $dX = '*' Then $dX = 0 If $dY = '*' Then $dY = 0 If $dW = '*' Then $dW = 0 If $dH = '*' Then $dH = 0 Else Local $x = $_aVal[0] Local $y = $_aVal[1] Local $width = $_aVal[2] Local $height = $_aVal[3] Local $x0 = $aSize[0] Local $y0 = $aSize[1] -7 Local $width0 = $aBott[2] Local $height0 = $aSize[3] +7 If $x = '*' Then $x = $x0 If $y = '*' Then $y = $y0 If $width = '*' Then $width = $width0 If $height = '*' Then $height = $height0 $dX = $x - $x0 $dY = $y - $y0 $dW = $width - $width0 $dH = $height - $height0 EndIf GUICtrlSetPos($idLeft, $aSize[0]+($dX), $aSize[1]+($dY), 1, $aSize[3]+($dH)) GUICtrlSetPos($idBottom, $aBott[0]+($dX), $aBott[1]+($dY)+($dH), $aBott[2]+($dW)) $aSize = ControlGetPos($_hGui, '', $idTopL) GUICtrlSetPos($idTopL, $aSize[0]+($dX), $aSize[1]+($dY)) $aSize = ControlGetPos($_hGui, '', $idTopR) GUICtrlSetPos($idTopR, $aSize[0]+($dX), $aSize[1]+($dY), $aSize[2]+($dW)) $aSize = ControlGetPos($_hGui, '', $idRight) GUICtrlSetPos($idRight, $aSize[0]+($dX)+($dW), $aSize[1]+($dY), 1, $aSize[3]+($dH)) $aSize = ControlGetPos($_hGui, '', $idBackground) GUICtrlSetPos($idBackground, $aSize[0]+($dX), $aSize[1]+($dY), $aSize[2]+($dW), $aSize[3]+($dH)) $aSize = ControlGetPos($_hGui, '', $idText) If ($dX <> 0) Or ($dY <> 0) Then GUICtrlSetPos($idText, $aSize[0]+($dX), $aSize[1]+($dY)) If $dW <> 0 Then _GuiCtrlGroup_Set($_structGroup, '', $_structGroup.Align) Local $aDelta[] = [$dX,$dY] Return $aDelta EndFunc ;==>__SubCtrlMove Func __ControlMove($_hWnd, $_bhWnd, $_vCtrl, $_aSize, $_dX, $_dY) Local $aParent If Not $_bhWnd Then GUICtrlSetPos($_vCtrl, $_aSize[0]+($_dX), $_aSize[1]+($_dY)) Else $aParent = WinGetPos($_hWnd) WinMove($_vCtrl, '', $_aSize[0]-$aParent[0]-$_giSide+($_dX), $_aSize[1]-$aParent[1]-$_giTop+($_dY)) EndIf EndFunc ;==>__ControlMove ;=============================================================================== ; Function Name....: __SystemGetWindowBorder ; Description......: Calculates side and top border of window ; Author(s)........: BugFix ;=============================================================================== Func __SystemGetWindowBorder(ByRef $_iTopBorder, ByRef $_iSideBorder) Local Const $SM_CYCAPTION = 4, $SM_CYEDGE = 46, $SM_CYBORDER = 6, $SM_CXBORDER = 5, $SM_CXEDGE = 45 Local $aMetrics[5][2] = [[$SM_CYCAPTION], [$SM_CYEDGE], [$SM_CYBORDER], [$SM_CXBORDER], [$SM_CXEDGE]] Local $dll = DllOpen("user32.dll"), $aRet For $i = 0 To 4 $aRet = DllCall($dll, "int", "GetSystemMetrics", "int", $aMetrics[$i][0]) If IsArray($aRet) Then $aMetrics[$i][1] = $aRet[0] Next DllClose($dll) $_iTopBorder = $aMetrics[0][1] + $aMetrics[1][1] + $aMetrics[2][1] $_iSideBorder = $aMetrics[3][1] + $aMetrics[4][1] EndFunc ;==>__SystemGetWindowBorder Example #include 'GroupEx.au3' #include <GuiComboBox.au3> Global $iGUIColor = 0xFFF9E5 Global $iBGColor = 0xE0F9FF, $iBorderColor = 0x00008B, $iTextColor = 0xC60707 Enum $lbName, $inName, $lbStatus, $inStatus, $lbOrt, $inOrt, $cbNormal, $lbNormal, $combo, $radio1, $radio2, $iCount Global $aID[$iCount] Global $radio3, $radio4 Global $hGui = GUICreate('Example GroupEx', 900, 700) GUISetBkColor($iGUIColor) ; create group with title style italic, default align left Global $tGroup1 = _GuiCtrlGroup_Create($hGui, 'Device Information', 10, 55, 880, 155, $iBorderColor, $iTextColor, $iBGColor, $_GROUPTEXT_ITALIC) $aID[$lbName] = GUICtrlCreateLabel('Title', 25, 83, 70) _BKTrans(-1) $aID[$inName] = GUICtrlCreateInput('', 100, 80, 200, 21) $aID[$lbStatus] = GUICtrlCreateLabel('State', 310, 83, 40) _BKTrans(-1) $aID[$inStatus] = GUICtrlCreateInput('', 355, 80, 115, 21) $aID[$lbOrt] = GUICtrlCreateLabel('Location', 485, 83, 50) _BKTrans(-1) $aID[$inOrt] = GUICtrlCreateInput('', 535, 80, 100, 21) $aID[$cbNormal] = GUICtrlCreateCheckbox(' ', 655, 83, 13, 13) $aID[$lbNormal] = GUICtrlCreateLabel(' Current Sample', 670, 83) _BKTrans(-1) $aID[$combo] = _GUICtrlComboBox_Create($hGui, '', 100, 110, 200, 30) $aID[$radio1] = GUICtrlCreateRadio(' ', 320, 113, 13, 13) GUICtrlSetState(-1, $GUI_CHECKED) $aID[$radio2] = GUICtrlCreateRadio(' ', 340, 113, 13, 13) _GuiCtrlGroup_Close() $radio3 = GUICtrlCreateRadio(' ', 100, 350, 13, 13) GUICtrlSetState(-1, $GUI_CHECKED) $radio4 = GUICtrlCreateRadio(' ', 120, 350, 13, 13) GUISetState() _Msg('Move group downward by 100px with all internal controls ($aID)') _GuiCtrlGroup_Set($tGroup1, '*,100', $_GROUP_MOVE_REL, $aID) _Msg('Group title - set default style') _GuiCtrlGroup_Set($tGroup1, '', $_GROUPTEXT_DEFAULT) _Msg('Group title - set background color - feasible, but not so nice') _GuiCtrlGroup_Set($tGroup1, 0xAAAAFF, $_GROUPTEXT_BACK) _Msg('Group title - set background again transparency') _GuiCtrlGroup_Set($tGroup1, '', $_GROUPTEXT_TRANS) _Msg('Group title - set text color') _GuiCtrlGroup_Set($tGroup1, 0x000080, $_GROUPTEXT_FORE) _Msg('Group border - top and right - change color') _GuiCtrlGroup_Set($tGroup1, 0xFF1234, BitOR($_GROUPBORDER_TOP,$_GROUPBORDER_RIGHT)) _Msg('Group title - centered') _GuiCtrlGroup_Set($tGroup1, '', $_GROUPTEXT_CENTER) _Msg('Group title - right') _GuiCtrlGroup_Set($tGroup1, '', $_GROUPTEXT_RIGHT) ConsoleWrite('CREATION BG: ' & $tGroup1.BGPrev & ', hex: 0x' & Hex($tGroup1.BGPrev,6) & @CRLF) _Msg('Group area - change color') _GuiCtrlGroup_Set($tGroup1, 0xAAFFAA, $_GROUPBACKGROUND) _Msg('Group DISABLE (with all controls inside), border color and title BGColor stay unchanged') ; _GuiCtrlGroup_SetState(ByRef $_structGroup, $_iState, $_aCtrlInside=Null, $_iTxtColor=Null, $_iBGColor=Null) ; Here, the current color of title text and group area is stored before the disable color is set. ; With Null for colors, the defaults will used. _GuiCtrlGroup_SetState($tGroup1, $GUI_DISABLE, $aID) _Msg('Group ENABLE (with all controls inside)') _GuiCtrlGroup_SetState($tGroup1, $GUI_ENABLE, $aID) ; without color parameter, the previous colors will used ;~ _GuiCtrlGroup_SetState($tGroup1, $GUI_ENABLE, $aID, Null, 0xAAAAFF) ; you can change the title and group area (BG) color (to omit one, use Null) _Msg('Group HIDE (with all controls inside)') _GuiCtrlGroup_SetState($tGroup1, $GUI_HIDE, $aID) _Msg('Group SHOW (with all controls inside)') _GuiCtrlGroup_SetState($tGroup1, $GUI_SHOW, $aID) Do Until GUIGetMsg() = -3 Func _BKTrans($_iID) GUICtrlSetBkColor($_iID, $GUI_BKCOLOR_TRANSPARENT) EndFunc Func _Msg($_sMsg) MsgBox(262208, 'Action', $_sMsg, 5) EndFunc GroupEx[0.13].au32 points
-
Well, it will work nicely as long as there is no "rid" (for Ridley) in another group1 point
-
Hi @junkew, I'm glad to know there still is interest for my project A1. Hmmmm. currently, you would need to check for that yourself. See the code below for an example If you want, you are more than welcome to create an issue on github for it, and i will implement it #include "AutoItObject_Internal.au3" #AutoIt3Wrapper_Run_Au3Check=N if Not IsDeclared("E_HANDLE") Then Global Const $E_HANDLE = 0x80070006 if Not IsDeclared("E_POINTER") Then Global Const $E_POINTER = 0x80004003 if Not IsDeclared("E_NOINTERFACE") Then Global Const $E_NOINTERFACE = 0x80004002 if Not IsDeclared("S_OK") Then Global Const $S_OK = 0x00000000 if Not IsDeclared("E_INVALIDARG") Then Global Const $E_INVALIDARG = 0x80070057 if Not IsDeclared("E_NOTIMPL") Then Global Const $E_NOTIMPL = 0x80004001 $methodName="onJump" $newMethod="myClass_onJump" $myObject=MyObject($methodName, $newMethod) $myObject.onJump func myClass_onJump() consolewrite("jump"&@CRLF) endfunc Func MyObject($methodName, $newMethod) Local $myObject = IDispatch() $newMethod = IsFunc($newMethod) ? $newMethod : Execute($newMethod) If Not IsFunc($newMethod) Then Return SetError(1, 0, 0) $myObject.__defineGetter($methodName, $newMethod) Return SetError(0, 0, $myObject) EndFunc A2. The current public version does not support cloning. It is a feature i have planned It will come out with the next version, where i also will take big inspiration from JS Object methods, such as freeze, values and for your interest assign. Currently the way to clone an objects property/properties would be to create a new empty object and fetch the desired properties from the structure of the original object, call VariantCopy on each and and assign them to the new object's Properties element in the $tagObject struct. They are in a linked list, so extending the list is easy enough Let me know if you want some code to illustrate this I hope my answer will satisfy your questions, and sorry for the delay with the answer1 point
-
This works: Local $sPattern = "^.*?(?:(Renee|Eero|Maverick)|(Chase|Seth|Sean)|(Leonora|Wes|rid)|(Jacob|Ashley|ocke)).*" Local $sReplace = "('$1'=''?0:1)+('$2'=''?0:2)+('$3'=''?0:3)+('$4'=''?0:4)" Local $iGroup = Execute(StringRegExpReplace("Wesley", $sPattern, $sReplace)) MsgBox(0, "", "Wesley is in group - " & $iGroup) $iGroup = Execute(StringRegExpReplace("Ingrid", $sPattern, $sReplace)) MsgBox(0, "", "Ingrid is in group - " & $iGroup) $iGroup = Execute(StringRegExpReplace("Rocket", $sPattern, $sReplace)) MsgBox(0, "", "Rocket is in group - " & $iGroup)1 point
-
Use a loop : For 1 To 5. You will need to use functions Random() and FileWriteLine() inside the loop. FileOpen() must be placed before the loop and FileClose() must be placed after the loop. Run the Help File examples for these functions and then try to write some code. Post your efforts here so we can offer advice on coding, or if you get stuck.1 point
-
exponential distribution M/M/1 queue
Earthshine reacted to JLogan3o13 for a topic
My question is if you have it working in C++, why shoehorn it into a slower language?1 point -
Windows XP Taskbar Is Showing A Lot Icons
aa2zz6 reacted to JLogan3o13 for a topic
Are they actually running scripts, or are they just ghost icons? Do they go away when you hover over them?1 point -
The most likely issue is that the web site now requires secure connections to use newer TLS protocols. Windows 7, if not specifically updated, did not contain the definitions and services to use TLS 1.1 or 1.2. Windows 10 did come with these definitions and services. You can use this link to give you a starting point to understanding the possible issue and how to resolve it. Update to enable TLS 1.1 and TLS 1.2 as a default secure protocols in WinHTTP in Windows1 point
-
Thank you, guys. This is what works: #include <SendMessage.au3> #include <WindowsConstants.au3> Run("notepad.exe") $hWnd = WinWait("[CLASS:Notepad]", "", 10) $hControl = ControlGetHandle($hWnd, "", "Edit1") $text = "this is a line" $struct_string = DllStructCreate("char[" & StringLen($text) + 1 & "]") DllStructSetData($struct_string, 1, $text) _SendMessageA($hControl, $WM_SETTEXT, 0, DllStructGetPtr($struct_string))1 point
-
Checking if Window is still open
antonioj84 reacted to Tvern for a topic
Keep in mind that a window doesn't have to be visible to exist and that, dependig on your WinTitleMatchMode, the title doesn't have to be an exact match. Try running this without "document1" open. If it shows you an array, there are windows that match, even if you can't see them. #include <array.au3> Global $aWindows = WinList("document1") If $aWindows[0][0] Then _ArrayDisplay($aWindows,"The following windows match the title") Else ConsoleWrite("No matching windows found" & @CRLF) EndIf1 point -
Simply more advantages to not compiling. The AutoItExe macro uses the AutoIt that started your initial script. Example: RunWait(@AutoItExe & ' "' & @ScriptDir & '\Script.au3"')1 point