Jump to content

_GDIPlus_MarkScreenRegionAnimated build 2020-08-07 beta


UEZ
 Share

Recommended Posts

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

11 hours ago, UEZ said:

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

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....

Link to comment
Share on other sites

@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!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

  • 4 weeks later...

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:

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library * Include Dependency Tree (Tool for analyzing script relations) * Show_Macro_Values.au3 *

 

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

OpenOffice/LibreOffice/XLS Related: WriterDemo.au3 * XLS/MDB from scratch with ADOX

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) * PDF Related:How to get reference to PDF object embeded in IE * IE on Windows 11

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

I also encourage you to check awesome @trancexx code:  * Create COM objects from modules without any demand on user to register anything. * Another COM object registering stuffOnHungApp handlerAvoid "AutoIt Error" message box in unknown errors  * HTML editor

winhttp.au3 related : * https://www.autoitscript.com/forum/topic/206771-winhttpau3-download-problem-youre-speaking-plain-http-to-an-ssl-enabled-server-port/

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2023-04-24

Link to comment
Share on other sites

  • 1 month later...

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 ?

Link to comment
Share on other sites

@Stormgrade: done -> see post#1. Return key exits selection, too.

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!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

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
 Share

×
×
  • Create New...