ioa747 Posted June 19 Share Posted June 19 (edited) expandcollapse popup; https://www.autoitscript.com/forum/topic/211986-creates-a-rectangle-frame/ ;---------------------------------------------------------------------------------------- ; Title...........: _GuiFrame.au3 ; Description.....: Creates a rectangle frame ; AutoIt Version..: 3.3.16.1 Author: ioa747 ; Note............: Testet in Win10 22H2 ;---------------------------------------------------------------------------------------- #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 #include <WindowsConstants.au3> #include <WinAPIGdi.au3> ;Example: Global $aCoord, $hPoint, $hFrame = _GuiFrame("", 100, 100, 200, 200, 5, 0xFFFFFF, 255) ;********************************** Do $aCoord = PixelSearch(100, 100, 200, 200, 0xFFFFFF, 0, 1, 0) ;0xFFFFFF White If Not @error Then ConsoleWrite("found White at X,Y: " & $aCoord[0] & "," & $aCoord[1] & @CRLF) $hPoint = _GuiFrame("", $aCoord[0], $aCoord[1], $aCoord[0] + 1, $aCoord[1] + 1, 3, 0xFF0000) Sleep(4000) GUIDelete($hPoint) EndIf Sleep(10) Until GUIGetMsg() = -3 ; GUI_EVENT_CLOSE ;********************************** ; #FUNCTION# -------------------------------------------------------------------------------------------------------------------- ; Name...........: _GuiFrame ; Description....: Creates a rectangle frame ; Syntax.........: _GuiFrame($sTitle, $iLeft, $iTop, $iRight, $iBottom [, $iThickness = 2 [, $iColor = 0xFF0000 [, $iTransparency = 150 [, $hWndParent = 0]]]]) ; Parameters.....: $sTitle - The title of frame. ; $iLeft - The left coordinate of frame. ; $iTop - The top coordinate of frame. ; $iRight - The right coordinate of frame. ; $iBottom - The bottom coordinate of frame. ; $iThickness - [optional] The thickness of frame (default = 1). ; $iColor - [optional] The color of frame (default = 0xFF0000). ; $iTransparency - [optional] The transparency of frame, in the range 1 - 255 (default = 150). ; $hWndParent - [optional] The parent window handle (default = 0). ; Return values..: The handle of the created frame. ; Author ........: ioa747 ; Notes .........: Note that coordinate, are the internal frame dimensions. ; Dependencies...: #include <WinAPIGdi.au3>, #include <WindowsConstants.au3> ;-------------------------------------------------------------------------------------------------------------------------------- Func _GuiFrame($sTitle, $iLeft, $iTop, $iRight, $iBottom, $iThickness = 1, $iColor = 0xFF0000, $iTransparency = 150, $hWndParent = 0) If $iThickness < 1 Or $iThickness = Default Then $iThickness = 1 If $iColor = -1 Or $iColor = Default Then $iColor = 0xFF0000 If $iTransparency < 1 Or $iTransparency = Default Or $iTransparency > 255 Then $iTransparency = 150 Local $iWidth = $iRight - $iLeft + (2 * $iThickness) + 1 Local $iHeight = $iBottom - $iTop + (2 * $iThickness) + 1 Local $hGUI = GUICreate($sTitle, $iWidth, $iHeight, $iLeft - $iThickness, $iTop - $iThickness, _ $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST, $WS_EX_NOACTIVATE), $hWndParent) GUISetBkColor($iColor, $hGUI) WinSetTrans($hGUI, "", $iTransparency) ;255 = Solid, 0 = Invisible. GUISetState(@SW_SHOWNOACTIVATE, $hGUI) Local $hOuter_rgn, $hInner_rgn, $hCombined_rgn $hOuter_rgn = _WinAPI_CreateRectRgn(0, 0, $iWidth, $iHeight) $hInner_rgn = _WinAPI_CreateRectRgn($iThickness, $iThickness, $iWidth - $iThickness, $iHeight - $iThickness) $hCombined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0) _WinAPI_CombineRgn($hCombined_rgn, $hOuter_rgn, $hInner_rgn, $RGN_DIFF) _WinAPI_DeleteObject($hInner_rgn) _WinAPI_SetWindowRgn($hGUI, $hCombined_rgn) Return $hGUI EndFunc ;==>_GuiFrame ;-------------------------------------------------------------------------------------------------------------------------------- Another example expandcollapse popup#include <WindowsConstants.au3> #include <WinAPIGdi.au3> #include <WinAPISys.au3> _Example1() Func _Example1() Local $iGuiFrame = _WinAPI_GetSystemMetrics($SM_CXDLGFRAME) Local $iThickness = 10 Run(@AutoItExe & ' /AutoIt3ExecuteLine "MsgBox(0, ''Hello World!'', ''Hi! Move this window around'')"') Local $hWnd = WinWaitActive('Hello World!', '', 3) Local $aPos = WinGetPos($hWnd) Local $iLeft = $aPos[0] + $iGuiFrame Local $iTop = $aPos[1] Local $iRight = $aPos[0] + $aPos[2] - $iGuiFrame Local $iBottom = $aPos[1] + $aPos[3] - $iGuiFrame Local $hFrame = _GuiFrame("", $iLeft, $iTop, $iRight, $iBottom, $iThickness, 0xFF0000, 150, $hWnd) ConsoleWrite("$hFrame=" & $hFrame & @CRLF) Local $sStrPos While WinExists($hWnd) $aPos = WinGetPos($hWnd) If $sStrPos <> $aPos[0] & ";" & $aPos[1] Then WinMove($hFrame, '', $aPos[0] - $iThickness + $iGuiFrame, $aPos[1] - $iThickness) $sStrPos = $aPos[0] & ";" & $aPos[1] EndIf Sleep(10) WEnd EndFunc ;==>_Example1 ; #FUNCTION# -------------------------------------------------------------------------------------------------------------------- ; Name...........: _GuiFrame ; Description....: Creates a rectangle frame ; Syntax.........: _GuiFrame($sTitle, $iLeft, $iTop, $iRight, $iBottom [, $iThickness = 2 [, $iColor = 0xFF0000 [, $iTransparency = 150 [, $hWndParent = 0]]]]) ; Parameters.....: $sTitle - The title of frame. ; $iLeft - The left coordinate of frame. ; $iTop - The top coordinate of frame. ; $iRight - The right coordinate of frame. ; $iBottom - The bottom coordinate of frame. ; $iThickness - [optional] The thickness of frame (default = 1). ; $iColor - [optional] The color of frame (default = 0xFF0000). ; $iTransparency - [optional] The transparency of frame, in the range 1 - 255 (default = 150). ; $hWndParent - [optional] The parent window handle (default = 0). ; Return values..: The handle of the created frame. ; Author ........: ioa747 ; Notes .........: Note that coordinate, are the internal frame dimensions. ; Dependencies...: #include <WinAPIGdi.au3>, #include <WindowsConstants.au3> ;-------------------------------------------------------------------------------------------------------------------------------- Func _GuiFrame($sTitle, $iLeft, $iTop, $iRight, $iBottom, $iThickness = 1, $iColor = 0xFF0000, $iTransparency = 150, $hWndParent = 0) If $iThickness < 1 Or $iThickness = Default Then $iThickness = 1 If $iColor = -1 Or $iColor = Default Then $iColor = 0xFF0000 If $iTransparency < 1 Or $iTransparency = Default Or $iTransparency > 255 Then $iTransparency = 150 Local $iWidth = $iRight - $iLeft + (2 * $iThickness) + 1 Local $iHeight = $iBottom - $iTop + (2 * $iThickness) + 1 Local $hGUI = GUICreate($sTitle, $iWidth, $iHeight, $iLeft - $iThickness, $iTop - $iThickness, _ $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_NOACTIVATE), $hWndParent) GUISetBkColor($iColor, $hGUI) WinSetTrans($hGUI, "", $iTransparency) ;255 = Solid, 0 = Invisible. GUISetState(@SW_SHOWNOACTIVATE, $hGUI) Local $hOuter_rgn, $hInner_rgn, $hCombined_rgn $hOuter_rgn = _WinAPI_CreateRectRgn(0, 0, $iWidth, $iHeight) $hInner_rgn = _WinAPI_CreateRectRgn($iThickness, $iThickness, $iWidth - $iThickness, $iHeight - $iThickness) $hCombined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0) _WinAPI_CombineRgn($hCombined_rgn, $hOuter_rgn, $hInner_rgn, $RGN_DIFF) _WinAPI_DeleteObject($hInner_rgn) _WinAPI_SetWindowRgn($hGUI, $hCombined_rgn) Return $hGUI EndFunc ;==>_GuiFrame ;-------------------------------------------------------------------------------------------------------------------------------- Please, every comment is appreciated! leave your comments and experiences here! Thank you very much Edited June 19 by ioa747 CYCho and argumentum 2 I know that I know nothing Link to comment Share on other sites More sharing options...
ioa747 Posted June 21 Author Share Posted June 21 and one with Hover effect expandcollapse popup#include <GuiButton.au3> #include <GUIConstantsEx.au3> #include <GuiImageList.au3> #include <WindowsConstants.au3> ; get height of window title and width of window frame - may be different when XP theme is ON/OFF Global $iGuiMetricsTitle = _WinAPI_GetSystemMetrics($SM_CYCAPTION) Global $iGuMetricsiFrame = _WinAPI_GetSystemMetrics($SM_CXDLGFRAME) Global $bInfo = False ; *** <-- True = more ConsoleWrite info Global $g_idMemo, $MyGui, $a_idBtn[7] Example() ;-------------------------------------------------------------------------------------------------------------------------------- Func Example() $MyGui = GUICreate("Button Get/Set ImageList (v" & @AutoItVersion & ")", 510, 400) $g_idMemo = GUICtrlCreateEdit("", 119, 10, 376, 374, $WS_VSCROLL) GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New") GUISetState(@SW_SHOW) $a_idBtn[0] = 6 Local $y = 20, $iWidth = 90, $iHeight = 50 For $x = 1 To $a_idBtn[0] $a_idBtn[$x] = GUICtrlCreateButton("Button" & $x, 10, $y, $iWidth, $iHeight) $y += 60 Next Local $iMsg While 1 $iMsg = GUIGetMsg() Switch $iMsg Case $GUI_EVENT_CLOSE ExitLoop Case $a_idBtn[1] To $a_idBtn[$a_idBtn[0]] MemoWrite("cklick " & GUICtrlRead($a_idBtn[$iMsg - $a_idBtn[1] + 1])) EndSwitch _Hover() Sleep(10) WEnd Exit EndFunc ;==>Example ;-------------------------------------------------------------------------------------------------------------------------------- Func _Hover($iThickness = 5, $FrameColor = 0x00FFFF, $iTransparency = 100) Local Static $iActive, $hFrame If Not WinActive($MyGui) Then Return SetError(1, 0, False) Local $ActiveCtrl Local $aCtrl = GUIGetCursorInfo($MyGui) $ActiveCtrl = IsArray($aCtrl) ? $aCtrl[4] : 0 If $iActive <> $ActiveCtrl Then $iActive = $ActiveCtrl DW("> $iActive=" & $iActive & @CRLF) Local $Msg ;if frame exist => obsolete => FrameDelete If $hFrame Then $Msg = GUIDelete($hFrame) DW("!! ObsoleteFrameDelete(" & $hFrame & ")=" & $Msg & @CRLF) $hFrame = Null EndIf ;Rule1 $ActiveCtrl = 0 => Return If $ActiveCtrl = 0 Then DW("<< $ActiveCtrl = 0" & @CRLF & @CRLF) Return SetError(2, 0, False) EndIf ;Rule2 if not $a_idBtn => Return If $ActiveCtrl < $a_idBtn[1] Or $ActiveCtrl > $a_idBtn[$a_idBtn[0]] Then DW("<< Only from:" & $a_idBtn[1] & " to:" & $a_idBtn[$a_idBtn[0]] & @CRLF & @CRLF) Return SetError(3, 0, False) EndIf ;recheck obsoleteFrameDelete If $hFrame Then $Msg = GUIDelete($hFrame) DW("!!!! recheck ObsoleteFrameDelete(" & $hFrame & ")=" & $Msg & @CRLF) EndIf Local $aPos = WinGetPos($MyGui) Local $sName = GUICtrlRead($ActiveCtrl) Local $aCtrlPos = ControlGetPos($MyGui, '', $ActiveCtrl) Local $iLeft = $iGuMetricsiFrame + $aPos[0] + $aCtrlPos[0] Local $iTop = $iGuMetricsiFrame + $iGuiMetricsTitle + $aPos[1] + $aCtrlPos[1] Local $iRight = $aCtrlPos[2] Local $iBottom = $aCtrlPos[3] DW("- Ctrl:" & $ActiveCtrl & " | Name:" & $sName & " | X,Y,W,H: " & $aCtrlPos[0] & ", " & $aCtrlPos[1] & ", " & $aCtrlPos[2] & ", " & $aCtrlPos[3] & _ " | WinPos: " & $aPos[0] & ", " & $aPos[1] & ", " & $aPos[2] & ", " & $aPos[3] & @CRLF) $hFrame = _GuiFrame("frame_" & $sName, $iLeft, $iTop, $iRight, $iBottom, $iThickness, $FrameColor, $iTransparency, $MyGui, 1) ;normal DW("+ NewFrame: " & $hFrame & " : " & $iLeft & ", " & $iTop & ", " & $iRight & ", " & $iBottom & @CRLF & @CRLF) EndIf Sleep(10) EndFunc ;==>_Hover ;-------------------------------------------------------------------------------------------------------------------------------- Func MemoWrite($sMessage) ; Write a line to the memo control GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1) EndFunc ;==>MemoWrite ;-------------------------------------------------------------------------------------------------------------------------------- Func DW($sText) If Not $bInfo Then Return ConsoleWrite($sText) EndFunc ;==>DW ; #FUNCTION# -------------------------------------------------------------------------------------------------------------------- ; Name...........: _GuiFrame ; Description....: Creates a rectangle frame ; Syntax.........: _GuiFrame($sTitle, $iLeft, $iTop, $iRight, $iBottom [, $iThickness = 2 [, $iColor = 0xFF0000 [, $iTransparency = 150 [, $hWndParent = 0 [, $iFlag = 0 ]]]]]) ; Parameters.....: $sTitle - The title of frame. ; $iLeft - The left coordinate of frame. ; $iTop - The top coordinate of frame. ; $iRight - The right coordinate of frame. ; $iBottom - The bottom coordinate of frame. ; $iThickness - [optional] The thickness of frame (default = 1). ; $iColor - [optional] The color of frame (default = 0xFF0000). ; $iTransparency - [optional] The transparency of frame, in the range 1 - 255 (default = 150). ; $hWndParent - [optional] The parent window handle (default = 0). ; $iFlag - [optional] $iFlag=0 $iRight=$iRight and $iBottom=$iBottom (default = 0). ; $iFlag=1 $iRight=$iWidth and $iBottom=$iHeight ; Return values..: The handle of the created frame. ; Author ........: ioa747 ; Notes .........: Note that coordinate, are the internal frame dimensions. ; Dependencies...: #include <WinAPIGdi.au3>, #include <WindowsConstants.au3> ;-------------------------------------------------------------------------------------------------------------------------------- Func _GuiFrame($sTitle, $iLeft, $iTop, $iRight, $iBottom, $iThickness = 1, $iColor = 0xFF0000, $iTransparency = 150, $hWndParent = 0, $iFlag = 0) If $iThickness < 1 Or $iThickness = Default Then $iThickness = 1 If $iColor = -1 Or $iColor = Default Then $iColor = 0xFF0000 If $iTransparency < 1 Or $iTransparency = Default Or $iTransparency > 255 Then $iTransparency = 150 Local $iWidth, $iHeight If $iFlag = 1 Then ; $iFlag=1 $iRight=$iWidth and $iBottom=$iHeight $iWidth = $iRight + (2 * $iThickness) $iHeight = $iBottom + (2 * $iThickness) Else $iFlag = 0 $iWidth = $iRight - $iLeft + (2 * $iThickness) + 1 $iHeight = $iBottom - $iTop + (2 * $iThickness) + 1 EndIf Local $hGUI = GUICreate($sTitle, $iWidth, $iHeight, $iLeft - $iThickness, $iTop - $iThickness, _ $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_NOACTIVATE), $hWndParent) GUISetBkColor($iColor, $hGUI) WinSetTrans($hGUI, "", $iTransparency) ;255 = Solid, 0 = Invisible. GUISetState(@SW_SHOWNOACTIVATE, $hGUI) Local $hOuter_rgn, $hInner_rgn, $hCombined_rgn $hOuter_rgn = _WinAPI_CreateRectRgn(0, 0, $iWidth, $iHeight) $hInner_rgn = _WinAPI_CreateRectRgn($iThickness, $iThickness, $iWidth - $iThickness, $iHeight - $iThickness) $hCombined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0) _WinAPI_CombineRgn($hCombined_rgn, $hOuter_rgn, $hInner_rgn, $RGN_DIFF) _WinAPI_DeleteObject($hInner_rgn) _WinAPI_SetWindowRgn($hGUI, $hCombined_rgn) Return $hGUI EndFunc ;==>_GuiFrame ;-------------------------------------------------------------------------------------------------------------------------------- Please, every comment is appreciated! leave your comments and experiences here! Thank you very much CYCho and argumentum 2 I know that I know nothing Link to comment Share on other sites More sharing options...
MattyD Posted June 22 Share Posted June 22 Nice - good job mate. ioa747 1 Link to comment Share on other sites More sharing options...
Zedna Posted June 29 Share Posted June 29 Not tested yours, but you my look at my older probably very similar project "Frame": ioa747 1 Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
ioa747 Posted July 13 Author Share Posted July 13 (edited) I added a new parameter: $MDICHILD - [optional] Create as child, that will be moved with parent (default = False). expandcollapse popup#include <WindowsConstants.au3> #include <WinAPIDlg.au3> #include <WinAPIGdi.au3> Local $aInput[11], $aFrame[11] $aInput[0] = 10 $aFrame[0] = 10 Local $Form1 = GUICreate("Form1", 286, 165, 853, 226) GUISetFont(11) ; Create Input Local $iX = 10, $iY = 10 For $i = 1 To $aInput[0] $aInput[$i] = GUICtrlCreateInput(Random(-100, 100, 1), $iX, $iY, 121, 21) $iY += 30 If $i = 5 Then $iX = 150 $iY = 10 EndIf Next GUISetState(@SW_SHOW) ; Create Frame $iX = 10 $iY = 10 Local $Color, $iVal For $i = 1 To $aInput[0] $iVal = GUICtrlRead($aInput[$i]) If $iVal < 0 Then $Color = 0xFF0000 ElseIf $iVal > 0 Then $Color = 0x00FF21 Else $Color = 0x0026FF EndIf $aFrame[$i] = _GuiFrame("", $iX, $iY, 121, 21, 2, $Color, 150, $Form1, True, 1) $iY += 30 If $i = 5 Then $iX = 150 $iY = 10 EndIf Next ;********************************** While 1 Switch GUIGetMsg() Case -3 ;$GUI_EVENT_CLOSE ExitLoop EndSwitch Sleep(10) WEnd ;********************************** ; #FUNCTION# -------------------------------------------------------------------------------------------------------------------- ; Name...........: _GuiFrame ; Description....: Creates a rectangle frame ; Syntax.........: _GuiFrame($sTitle, $iLeft, $iTop, $iRight, $iBottom [, $iThickness = 2 [, $iColor = 0xFF0000 [, $iTransparency = 150 [, $hWndParent = 0 [, $MDICHILD = False [, $iFlag = 0 ]]]]]]) ; Parameters.....: $sTitle - The title of frame. ; $iLeft - The left coordinate of frame. ; $iTop - The top coordinate of frame. ; $iRight - The right coordinate of frame. ; $iBottom - The bottom coordinate of frame. ; $iThickness - [optional] The thickness of frame (default = 1). ; $iColor - [optional] The color of frame (default = 0xFF0000). ; $iTransparency - [optional] The transparency of frame, in the range 1 - 255 (default = 150). ; $MDICHILD - [optional] Create as child, that will be moved with parent (default = False). ; $hWndParent - [optional] The parent window handle (default = 0). ; $iFlag - [optional] $iFlag=0 $iRight=$iRight and $iBottom=$iBottom (default = 0). ; $iFlag=1 $iRight=$iWidth and $iBottom=$iHeight ; Return values..: The handle of the created frame. ; Author ........: ioa747 ; Notes .........: Note that coordinate, are the internal frame dimensions. ; Dependencies...: #include <WinAPIGdi.au3>, #include <WindowsConstants.au3> ;-------------------------------------------------------------------------------------------------------------------------------- Func _GuiFrame($sTitle, $iLeft, $iTop, $iRight, $iBottom, $iThickness = 1, $iColor = 0xFF0000, $iTransparency = 150, $hWndParent = 0, $MDICHILD = False, $iFlag = 0) If $iThickness < 1 Or $iThickness = Default Then $iThickness = 1 If $iColor = -1 Or $iColor = Default Then $iColor = 0xFF0000 If $iTransparency < 1 Or $iTransparency = Default Or $iTransparency > 255 Then $iTransparency = 150 Local $iWidth, $iHeight If $iFlag = 1 Then ; $iFlag=1 $iRight=$iWidth and $iBottom=$iHeight $iWidth = $iRight + (2 * $iThickness) $iHeight = $iBottom + (2 * $iThickness) Else $iFlag = 0 $iWidth = $iRight - $iLeft + (2 * $iThickness) + 1 $iHeight = $iBottom - $iTop + (2 * $iThickness) + 1 EndIf Local $ExStyle If $hWndParent <> 0 And $MDICHILD = True Then $ExStyle = BitOR($WS_EX_TOOLWINDOW, $WS_EX_NOACTIVATE, $WS_EX_MDICHILD) Else $ExStyle = BitOR($WS_EX_TOOLWINDOW, $WS_EX_NOACTIVATE) EndIf Local $hGUI = GUICreate($sTitle, $iWidth, $iHeight, $iLeft - $iThickness, $iTop - $iThickness, _ $WS_POPUP, $ExStyle, $hWndParent) GUISetBkColor($iColor, $hGUI) WinSetTrans($hGUI, "", $iTransparency) ;255 = Solid, 0 = Invisible. GUISetState(@SW_SHOWNOACTIVATE, $hGUI) Local $hOuter_rgn, $hInner_rgn, $hCombined_rgn $hOuter_rgn = _WinAPI_CreateRectRgn(0, 0, $iWidth, $iHeight) $hInner_rgn = _WinAPI_CreateRectRgn($iThickness, $iThickness, $iWidth - $iThickness, $iHeight - $iThickness) $hCombined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0) _WinAPI_CombineRgn($hCombined_rgn, $hOuter_rgn, $hInner_rgn, $RGN_DIFF) _WinAPI_DeleteObject($hInner_rgn) _WinAPI_SetWindowRgn($hGUI, $hCombined_rgn) Return $hGUI EndFunc ;==>_GuiFrame ;-------------------------------------------------------------------------------------------------------------------------------- Edited July 13 by ioa747 I know that I know nothing Link to comment Share on other sites More sharing options...
ioa747 Posted July 13 Author Share Posted July 13 (edited) Another conversion. If the parameter $iThickness = 0 then Creates a filled rectangle expandcollapse popup#include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <WinAPIDlg.au3> #include <WinAPIGdi.au3> Local $aInput[11] $aInput[0] = 10 Local $Form1 = GUICreate("Form1", 286, 165, 853, 226) GUISetFont(11) ; Create Input Local $iX = 10, $iY = 10 For $i = 1 To $aInput[0] $aInput[$i] = GUICtrlCreateInput(Random(-100, 100, 1), $iX, $iY, 121, 21) $iY += 30 If $i = 5 Then $iX = 150 $iY = 10 EndIf Next GUISetState(@SW_SHOW) ;********************************** While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch GetActiveInput($Form1) WEnd ;********************************** ;-------------------------------------------------------------------------------------------------------------------------------- Func GetActiveInput($hGUI) Local Static $LastCtrl, $hFrame[2] = [0, 1], $ia = 1 ;= GetActiveGUICtrl($hGUI) Local $ActiveCtrl = GetActiveGUICtrl($hGUI) If $LastCtrl <> $ActiveCtrl And $ActiveCtrl > 0 Then $LastCtrl = $ActiveCtrl Local $aCtrl, $aWnd $aCtrl = ControlGetPos($hGUI, "", $ActiveCtrl) $hFrame[$ia] = _GuiFrame("123Frame", $aCtrl[0], $aCtrl[1], $aCtrl[2], $aCtrl[3], 0, 0x00FFFF, 50, $hGUI, True, 1) $ia += 1 If $ia > 1 Then $ia = 0 If $hFrame[$ia] Then GUIDelete($hFrame[$ia]) EndIf EndFunc ;==>GetActiveInput ;-------------------------------------------------------------------------------------------------------------------------------- Func GetActiveGUICtrl($hGUI) Return _WinAPI_GetDlgCtrlID(ControlGetHandle($hGUI, "", ControlGetFocus($hGUI))) EndFunc ;==>GetActiveGUICtrl ; #FUNCTION# -------------------------------------------------------------------------------------------------------------------- ; Name...........: _GuiFrame ; Description....: Creates a rectangle frame or a filled rectangle ; Syntax.........: _GuiFrame($sTitle, $iLeft, $iTop, $iRight, $iBottom [, $iThickness = 1 [, $iColor = 0xFF0000 [, $iTransparency = 150 [, $hWndParent = 0 [, $MDICHILD = False [, $iFlag = 0 ]]]]]]) ; Parameters.....: $sTitle - The title of frame. ; $iLeft - The left coordinate of frame. ; $iTop - The top coordinate of frame. ; $iRight - The right coordinate of frame. ; $iBottom - The bottom coordinate of frame. ; $iThickness - [optional] The thickness of frame (default = 1). If $iThickness = 0 Creates a filled rectangle ; $iColor - [optional] The color of frame (default = 0xFF0000). ; $iTransparency - [optional] The transparency of frame, in the range 1 - 255 (default = 150). ; $hWndParent - [optional] The parent window handle (default = 0). ; $MDICHILD - [optional] Create as child, that will be moved with parent (default = False). ; $iFlag - [optional] $iFlag=0 $iRight=$iRight and $iBottom=$iBottom (default = 0). ; $iFlag=1 $iRight=$iWidth and $iBottom=$iHeight ; Return values..: The handle of the created frame. ; Author ........: ioa747 ; Notes .........: Note that coordinate, are the internal frame dimensions. ; Dependencies...: #include <WinAPIGdi.au3>, #include <WindowsConstants.au3> ;-------------------------------------------------------------------------------------------------------------------------------- Func _GuiFrame($sTitle, $iLeft, $iTop, $iRight, $iBottom, $iThickness = 1, $iColor = 0xFF0000, $iTransparency = 150, _ $hWndParent = 0, $MDICHILD = False, $iFlag = 0) If $iThickness = -1 Or $iThickness = Default Then $iThickness = 1 If $iColor = -1 Or $iColor = Default Then $iColor = 0xFF0000 If $iTransparency < 1 Or $iTransparency = Default Or $iTransparency > 255 Then $iTransparency = 150 Local $iWidth, $iHeight If $iFlag = 1 Then ; $iFlag=1 $iRight=$iWidth and $iBottom=$iHeight $iWidth = $iRight + (2 * $iThickness) $iHeight = $iBottom + (2 * $iThickness) Else $iFlag = 0 $iWidth = $iRight - $iLeft + (2 * $iThickness) + 1 $iHeight = $iBottom - $iTop + (2 * $iThickness) + 1 EndIf Local $ExStyle If $hWndParent <> 0 And $MDICHILD = True Then $ExStyle = BitOR($WS_EX_TOOLWINDOW, $WS_EX_NOACTIVATE, $WS_EX_MDICHILD, $WS_EX_TRANSPARENT) Else $ExStyle = BitOR($WS_EX_TOOLWINDOW, $WS_EX_NOACTIVATE, $WS_EX_TRANSPARENT) EndIf Local $hGUI = GUICreate($sTitle, $iWidth, $iHeight, $iLeft - $iThickness, $iTop - $iThickness, _ $WS_POPUP, $ExStyle, $hWndParent) GUISetBkColor($iColor, $hGUI) WinSetTrans($hGUI, "", $iTransparency) ;255 = Solid, 0 = Invisible. GUISetState(@SW_SHOWNOACTIVATE, $hGUI) If $iThickness > 0 Then Local $hOuter_rgn, $hInner_rgn, $hCombined_rgn $hOuter_rgn = _WinAPI_CreateRectRgn(0, 0, $iWidth, $iHeight) $hInner_rgn = _WinAPI_CreateRectRgn($iThickness, $iThickness, $iWidth - $iThickness, $iHeight - $iThickness) $hCombined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0) _WinAPI_CombineRgn($hCombined_rgn, $hOuter_rgn, $hInner_rgn, $RGN_DIFF) _WinAPI_DeleteObject($hInner_rgn) _WinAPI_SetWindowRgn($hGUI, $hCombined_rgn) EndIf Return $hGUI EndFunc ;==>_GuiFrame ;-------------------------------------------------------------------------------------------------------------------------------- Edited September 16 by ioa747 correction pixelsearch 1 I know that I know nothing 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