Jump to content

Recommended Posts

Posted (edited)

...nice tool @UEZ, thank for sharing,

  On 9/24/2018 at 10:22 PM, UEZ said:

 ... If you have any improvements, please post it here ...

Expand  

my 2 cents:
if you just change the 2 lines 23 and 24 with the following 4 lines, you can also drag around the selected area by clicking in the middle of the area and dragging. (this forces you to point the mouse with more precision for the resizing, but it is still possible)

Found a better solution: just add the following 2 lines at line 50 (right before the GUISetState(@SW_SHOWNA, $__g_hGUI_Bg) statement).
Doing so, the "drag" label (handle) is inserted below the resizing handles, avoiding that these remain behind the drag label itself.

Local $__g_iLabel_00 = GUICtrlCreateLabel("", 1, 1, 1, 1, -1, $GUI_WS_EX_PARENTDRAG) ; inner
    GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)

 

Edited by Chimp
found a better solution

 

image.jpeg.9f1a974c98e9f77d824b358729b089b0.jpeg Chimp

small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Posted

@Chimp: thanks for your feedback. :thumbsup:   I updated the code from post#1.

You can drag the marked area by hovering the mouse over the selection and holding the rmb pressed.

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

  • 4 weeks later...
Posted (edited)

A very interesting effect. Thanks for sharing.

Few little change (cosmetic):

;coded by UEZ build 2018-09-25 beta
#include <APISysConstants.au3>
#include <Array.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WinAPIGdi.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>


Global $__g_hGUI_MarkArea, $__g_hGUI_Bg, $__g_iLabel_TL, $__g_iLabel_TM, $__g_iLabel_TR, $__g_iLabel_LM, $__g_iLabel_RM, $__g_iLabel_BL, $__g_iLabel_BM, _
        $__g_iLabel_BR, $__g_iOldCursor, $__g_iW, $__g_iH, $__g_iColor_ResizeDots = 0xFFFFFF, $__g_iBorder = 4, $__g_bSelectionDone = False

Global $aRect = _GDIPlus_MarkScreenRegionAnimated()
_ArrayDisplay($aRect, "Marked area coordinates")

Func _GDIPlus_MarkScreenRegionAnimated($bAnim = True)
    _GDIPlus_Startup()
    Local Const $hFullScreen = WinGetHandle("[TITLE:Program Manager;CLASS:Progman]")
    Local Const $aFullScreen = WinGetPos($hFullScreen)

    $__g_hGUI_Bg = GUICreate("", $aFullScreen[2], $aFullScreen[3], $aFullScreen[0], $aFullScreen[1], BitOR($WS_CLIPCHILDREN, $WS_POPUP), $WS_EX_TOPMOST) ;to avoid cursor flickering and for proper control read
    WinSetTrans($__g_hGUI_Bg, "", 0x01)

    $__g_hGUI_MarkArea = GUICreate("", 1, 1, -1, -1, $bAnim ? $WS_POPUP : BitOR($WS_POPUP, $WS_BORDER), BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED), $__g_hGUI_Bg)
    GUISetBkColor(0xABCDEF, $__g_hGUI_MarkArea)
    If Not $bAnim Then $__g_iColor_ResizeDots = 0xFF0000

    $__g_iLabel_TL = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;top left
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
    $__g_iLabel_TM = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;top mid
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
    $__g_iLabel_TR = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;top right
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
    $__g_iLabel_LM = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;left mid
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
    $__g_iLabel_RM = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;right mid
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
    $__g_iLabel_BL = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;bottom left
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
    $__g_iLabel_BM = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;bottom mid
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
    $__g_iLabel_BR = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;bottom right
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)

    GUISetState(@SW_SHOWNA, $__g_hGUI_Bg)
    GUISetState(@SW_SHOW, $__g_hGUI_MarkArea)

    $__g_iOldCursor = MouseGetCursor()
    GUISetCursor(3, 1, $__g_hGUI_Bg)
    GUISetCursor(3, 1, $__g_hGUI_MarkArea)
    _WinAPI_SetLayeredWindowAttributes($__g_hGUI_MarkArea, 0xABCDEF, 0xF0)

    Local $aMPos, $aPrevMPos[2] = [MouseGetPos(0) + 1, MouseGetPos(1) + 1], $iID, $aCI, $iX, $iY, $aOldWinPos, $aOldMPos, $bMoved
    Local $aGUIStartPos
    #forceref $bMoved

    Do
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                If $bAnim Then
                    GUIRegisterMsg($WM_TIMER, "")
                    DllCall("user32.dll", "bool", "KillTimer", "hwnd", $__g_hGUI_MarkArea, "uint_ptr", $iID)
                    GUIRegisterMsg($WM_ERASEBKGND, "")
                EndIf
                _GDIPlus_Shutdown()
                Local $aResult = WinGetPos($__g_hGUI_MarkArea)
                $aResult[2] = WinGetClientSize($__g_hGUI_MarkArea)[0]
                $aResult[3] = WinGetClientSize($__g_hGUI_MarkArea)[1]
                GUIDelete($__g_hGUI_MarkArea)
                GUIDelete($__g_hGUI_Bg)
                Return $aResult
        EndSwitch
        $aMPos = MouseGetPos()
        If ($aMPos[0] <> $aPrevMPos[0] Or $aMPos[1] <> $aPrevMPos[1]) And (Not $__g_bSelectionDone) Then
            WinMove($__g_hGUI_MarkArea, "", $aMPos[0], $aMPos[1])
            $aPrevMPos = $aMPos
        EndIf
        $aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
        If $aCI[2] And (Not $__g_bSelectionDone) Then
            $aGUIStartPos = WinGetPos($__g_hGUI_MarkArea)
            If $bAnim Then
                GUIRegisterMsg($WM_ERASEBKGND, "WM_ERASEBKGND")
                GUIRegisterMsg($WM_TIMER, "PlayBorderAnim")
                $iID = DllCall("User32.dll", "uint_ptr", "SetTimer", "hwnd", $__g_hGUI_MarkArea, "uint_ptr", 1, "uint", 50, "ptr", 0)[0]
            EndIf
            While $aCI[2] * Sleep(10)
                $aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
                $aMPos = MouseGetPos()
                $__g_iW = Abs($aMPos[0] - $aGUIStartPos[0]) + 1
                $__g_iH = Abs($aMPos[1] - $aGUIStartPos[1]) + 1
                If $aMPos[0] < $aGUIStartPos[0] Then
                    $iX = $aMPos[0]
                Else
                    $iX = $aGUIStartPos[0]
                EndIf
                If $aMPos[1] < $aGUIStartPos[1] Then
                    $iY = $aMPos[1]
                Else
                    $iY = $aGUIStartPos[1]
                EndIf
                WinMove($__g_hGUI_MarkArea, "", $iX, $iY, $__g_iW, $__g_iH)
                UpdateCtrlPos($bAnim)
            WEnd

            $__g_bSelectionDone = True
            GUISetCursor(3, 1, $__g_hGUI_MarkArea)
        ElseIf $aCI[3] And $__g_bSelectionDone Then
            $aGUIStartPos = WinGetPos($__g_hGUI_MarkArea)
            If _WinAPI_PtInRectEx(MouseGetPos(0), MouseGetPos(1), $aGUIStartPos[0], $aGUIStartPos[1], $aGUIStartPos[0] + $aGUIStartPos[2], $aGUIStartPos[1] + $aGUIStartPos[3]) Then
                $aMPos = MouseGetPos()
                $aGUIStartPos = WinGetPos($__g_hGUI_MarkArea)
                While $aCI[3] * Sleep(10)
                    $aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
                    WinMove($__g_hGUI_MarkArea, "", $aGUIStartPos[0] - ($aMPos[0] - MouseGetPos(0)), $aGUIStartPos[1] - ($aMPos[1] - MouseGetPos(1)), $__g_iW, $__g_iH)
                    GUISetCursor(0, 1, $__g_hGUI_Bg)
                    GUISetCursor(0, 1, $__g_hGUI_MarkArea)
                WEnd
                GUISetCursor(3, 1, $__g_hGUI_Bg)
                GUISetCursor(3, 1, $__g_hGUI_MarkArea)
            EndIf
        EndIf
        If $__g_bSelectionDone Then
            $aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
            If @error Then ContinueLoop
            Switch $aCI[4]
                Case $__g_iLabel_TL
                    GUISetCursor(12, 1, $__g_hGUI_MarkArea)
                    If $aCI[2] Then
                        $aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
                        $aOldMPos = MouseGetPos()
                        While $aCI[2] * Sleep(10)
                            $aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
                            WinMove($__g_hGUI_MarkArea, "", MouseGetPos(0), MouseGetPos(1), $aOldWinPos[2] + ($aOldMPos[0] - MouseGetPos(0)), $aOldWinPos[3] + ($aOldMPos[1] - MouseGetPos(1)))
                        WEnd
                        UpdateCtrlPos($bAnim)
                    EndIf
                Case $__g_iLabel_BR
                    GUISetCursor(12, 1, $__g_hGUI_MarkArea)
                    If $aCI[2] Then
                        $aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
                        $aOldMPos = MouseGetPos()
                        While $aCI[2] * Sleep(10)
                            $aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
                            WinMove($__g_hGUI_MarkArea, "", $aOldWinPos[0], $aOldWinPos[1], $aOldWinPos[2] - ($aOldMPos[0] - MouseGetPos(0)), $aOldWinPos[3] - ($aOldMPos[1] - MouseGetPos(1)))
                        WEnd
                        UpdateCtrlPos($bAnim)
                    EndIf
                Case $__g_iLabel_TR
                    GUISetCursor(10, 1, $__g_hGUI_MarkArea)
                    If $aCI[2] Then
                        $aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
                        $aOldMPos = MouseGetPos()
                        While $aCI[2] * Sleep(10)
                            $aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
                            WinMove($__g_hGUI_MarkArea, "", $aOldWinPos[0], MouseGetPos(1), $aOldWinPos[2] - ($aOldMPos[0] - MouseGetPos(0)), $aOldWinPos[3] + ($aOldMPos[1] - MouseGetPos(1)))
                        WEnd
                        UpdateCtrlPos($bAnim)
                    EndIf
                Case $__g_iLabel_BL
                    GUISetCursor(10, 1, $__g_hGUI_MarkArea)
                    If $aCI[2] Then
                        $aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
                        $aOldMPos = MouseGetPos()
                        While $aCI[2] * Sleep(10)
                            $aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
                            WinMove($__g_hGUI_MarkArea, "", MouseGetPos(0), $aOldWinPos[1], $aOldWinPos[2] + ($aOldMPos[0] - MouseGetPos(0)), $aOldWinPos[3] - ($aOldMPos[1] - MouseGetPos(1)))
                        WEnd
                        UpdateCtrlPos($bAnim)
                    EndIf
                Case $__g_iLabel_LM
                    GUISetCursor(13, 1, $__g_hGUI_MarkArea)
                    If $aCI[2] Then
                        $aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
                        $aOldMPos = MouseGetPos()
                        While $aCI[2] * Sleep(10)
                            $aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
                            WinMove($__g_hGUI_MarkArea, "", MouseGetPos(0), $aOldWinPos[1], $aOldWinPos[2] + ($aOldMPos[0] - MouseGetPos(0)), $aOldWinPos[3])
                        WEnd
                        UpdateCtrlPos($bAnim)
                    EndIf
                Case $__g_iLabel_RM
                    GUISetCursor(13, 1, $__g_hGUI_MarkArea)
                    If $aCI[2] Then
                        $aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
                        $aOldMPos = MouseGetPos()
                        While $aCI[2] * Sleep(10)
                            $aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
                            WinMove($__g_hGUI_MarkArea, "", $aOldWinPos[0], $aOldWinPos[1], $aOldWinPos[2] - ($aOldMPos[0] - MouseGetPos(0)), $aOldWinPos[3])
                        WEnd
                        UpdateCtrlPos($bAnim)
                    EndIf
                Case $__g_iLabel_TM
                    GUISetCursor(11, 1, $__g_hGUI_MarkArea)
                    If $aCI[2] Then
                        $aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
                        $aOldMPos = MouseGetPos()
                        While $aCI[2] * Sleep(10)
                            $aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
                            WinMove($__g_hGUI_MarkArea, "", $aOldWinPos[0], MouseGetPos(1), $aOldWinPos[2], $aOldWinPos[3] + ($aOldMPos[1] - MouseGetPos(1)))
                        WEnd
                        UpdateCtrlPos($bAnim)
                    EndIf
                Case $__g_iLabel_BM
                    GUISetCursor(11, 1, $__g_hGUI_MarkArea)
                    If $aCI[2] Then
                        $aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
                        $aOldMPos = MouseGetPos()
                        While $aCI[2] * Sleep(10)
                            $aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
                            WinMove($__g_hGUI_MarkArea, "", $aOldWinPos[0], $aOldWinPos[1], $aOldWinPos[2], $aOldWinPos[3] - ($aOldMPos[1] - MouseGetPos(1)))
                        WEnd
                        UpdateCtrlPos($bAnim)
                    EndIf
                Case Else
                    GUISetCursor(3, 1, $__g_hGUI_MarkArea)
            EndSwitch
        EndIf
    Until False
EndFunc   ;==>_GDIPlus_MarkScreenRegionAnimated

Func UpdateCtrlPos($bAnim = True)
    Local Const $aGUIStartPos = WinGetPos($__g_hGUI_MarkArea)
    If $__g_bSelectionDone And $bAnim Then GUIRegisterMsg($WM_TIMER, "")
    $__g_iW = $aGUIStartPos[2]
    $__g_iH = $aGUIStartPos[3]
    ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_TL, 0, 0, $__g_iBorder, $__g_iBorder)
    ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_TM, ($__g_iW - $__g_iBorder) / 2, 0, $__g_iBorder, $__g_iBorder)
    ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_TR, ($__g_iW - $__g_iBorder - $__g_iBorder / 2), 0, $__g_iBorder, $__g_iBorder)
    ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_LM, 0, ($__g_iH - $__g_iBorder) / 2, $__g_iBorder, $__g_iBorder)
    ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_RM, ($__g_iW - $__g_iBorder - $__g_iBorder / 2), ($__g_iH - $__g_iBorder) / 2, $__g_iBorder, $__g_iBorder)
    ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_BL, 0, ($__g_iH - $__g_iBorder - $__g_iBorder / 2), $__g_iBorder, $__g_iBorder)
    ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_BM, ($__g_iW - $__g_iBorder) / 2, ($__g_iH - $__g_iBorder - $__g_iBorder / 2), $__g_iBorder, $__g_iBorder)
    ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_BR, ($__g_iW - $__g_iBorder - $__g_iBorder / 2), ($__g_iH - $__g_iBorder - $__g_iBorder / 2), $__g_iBorder, $__g_iBorder)
    If $__g_bSelectionDone And $bAnim Then GUIRegisterMsg($WM_TIMER, "PlayBorderAnim")
EndFunc   ;==>UpdateCtrlPos

Func PlayBorderAnim()
    Local $aWinPos = WinGetClientSize($__g_hGUI_MarkArea), $iW = $aWinPos[0], $iH = $aWinPos[1]
    Local Static $fOffset = 0
    Local Const $iSize = $__g_iBorder / 2
    Local Const $hDC = _WinAPI_GetDC($__g_hGUI_MarkArea)
    Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH)
    Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC)
    Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap)
    Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer)
    Local Const $hPen = _GDIPlus_PenCreate(0xFF0178D7, $iSize), $hPen2 = _GDIPlus_PenCreate(0xFFFFFFFF, $iSize), _
                $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000 + $__g_iColor_ResizeDots), $hPen3 = _GDIPlus_PenCreate(0xFF000000)
    _GDIPlus_PenSetDashStyle($hPen, $GDIP_DASHSTYLEDASHDOT)
    _GDIPlus_GraphicsClear($hCanvas, 0xFFABCDEF)
    ;for faster performance direct dll calls
    DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen2, "float", 1 + $iSize, "float", 1 + $iSize, "float", $iW - 2 * $iSize - 2, "float", $iH - 2 * $iSize - 2)
    DllCall($__g_hGDIPDll, "int", "GdipSetPenDashOffset", "handle", $hPen, "float", $fOffset)
    DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen, "float", 1 + $iSize, "float", 1 + $iSize, "float", $iW - 2 * $iSize - 2, "float", $iH - 2 * $iSize - 2)

    DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", 0, "float", 0, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
    DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", 0, "float", 0, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)

    DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", ($iW - $__g_iBorder) / 2, "float", 0, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
    DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", ($iW - $__g_iBorder) / 2, "float", 0, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)

    DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", ($iW - $__g_iBorder) - 2, "float", 0, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
    DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", ($iW - $__g_iBorder) - 2, "float", 0, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)

    DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", 0, "float", ($iH - $__g_iBorder) / 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
    DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", 0, "float", ($iH - $__g_iBorder) / 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)

    DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", ($iW - $__g_iBorder) - 2, "float", ($iH - $__g_iBorder) / 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
    DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", ($iW - $__g_iBorder) - 2, "float", ($iH - $__g_iBorder) / 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)

    DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", 0, "float", ($iH - $__g_iBorder) - 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
    DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", 0, "float", ($iH - $__g_iBorder) - 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)

    DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", ($iW - $__g_iBorder) / 2, "float", ($iH - $__g_iBorder) - 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
    DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", ($iW - $__g_iBorder) / 2, "float", ($iH - $__g_iBorder) - 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)

    DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", ($iW - $__g_iBorder) - 2, "float", ($iH - $__g_iBorder) - 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
    DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", ($iW - $__g_iBorder) - 2, "float", ($iH - $__g_iBorder) - 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)

    _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY)

    $fOffset += 0.5
    _GDIPlus_GraphicsDispose($hCanvas)
    _WinAPI_SelectObject($hDC_backbuffer, $DC_obj)
    _WinAPI_DeleteDC($hDC_backbuffer)
    _WinAPI_DeleteObject($hHBitmap)
    _WinAPI_ReleaseDC($__g_hGUI_MarkArea, $hDC)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_PenDispose($hPen2)
    _GDIPlus_PenDispose($hPen3)
    _GDIPlus_BrushDispose($hBrush)
EndFunc   ;==>PlayBorderAnim

Func WM_ERASEBKGND($hWnd, $iMsgm, $wParam, $lParam) ;suppress repainting to avoid flickering but causes some other side effects
    #forceref $iMsgm, $wParam, $lParam, $hWnd
    Local Const $hBrush = _WinAPI_CreateSolidBrush(0xEFCDAB) ;BGR format
;~  _WinAPI_RedrawWindow($__g_hGUI_MarkArea, 0, 0, BitOR($RDW_NOERASE, $RDW_NOCHILDREN, $RDW_NOFRAME, $RDW_VALIDATE))
    _WinAPI_SetClassLongEx($__g_hGUI_MarkArea, $GCL_HBRBACKGROUND, $hBrush)
    _WinAPI_DeleteObject($hBrush)
    Return 0
EndFunc   ;==>WM_ERASEBKGND

 

Edited by mLipok

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

  • 1 month later...
Posted

Hello,

Thank you for your example, I've tried to change the way it exit with hotkey and accelerators but I can't get it.

I've tried with a hidden button too but it seem this part

Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                If $bAnim Then
                    GUIRegisterMsg($WM_TIMER, "")
                    DllCall("user32.dll", "bool", "KillTimer", "hwnd", $__g_hGUI_MarkArea, "uint_ptr", $iID)
                    GUIRegisterMsg($WM_ERASEBKGND, "")
                EndIf
                _GDIPlus_Shutdown()
                Local $aResult = WinGetPos($__g_hGUI_MarkArea)
                $aResult[2] = WinGetClientSize($__g_hGUI_MarkArea)[0]
                $aResult[3] = WinGetClientSize($__g_hGUI_MarkArea)[1]
                GUIDelete($__g_hGUI_MarkArea)
                GUIDelete($__g_hGUI_Bg)
                Return $aResult
        EndSwitch

Doesn't want any more Case.

Any idea for changing the way it exit , like pressing Enter key ?

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...