Jump to content
Rodrigo Chaves Neto

Animate Window (Animar GUI do Autoit)

Recommended Posts

Olá,

Compartilhando um script de efeitos de entrada e saída de GUI utilizando a função _WinAPI_AnimateWindow

Deve ser usado junto com GUISetState()

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.14.5
 Author:         Rodrigo Chaves

 Script Function:
    Animate Window
    07/2019

    Base de pesquisa
    https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-animatewindow

#ce ----------------------------------------------------------------------------

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPIDiag.au3>

;Variaveis de efeitos
Dim Const $tSTRUCT = 'struct;char fadeIn[128];char fadeOut[128];char Slide_In_Left[128];char Slide_Out_Left[128];char Slide_In_Right[128];char Slide_Out_Right[128];char Slide_In_Top[128];char Slide_Out_Top[128];' & _
        'char Slide_In_Bottom[128];char Slide_Out_Bottom[128];char DiagSlide_In_TopLeft[128];char DiagSlide_Out_TopLeft[128];char DiagSlide_In_TopRight[128];char DiagSlide_Out_TopRight[128];' & _
        'char DiagSlide_In_BottomLeft[128];char DiagSlide_Out_BottomLeft[128];char DiagSlide_In_BottomRight[128];char DiagSlide_Out_BottomRight[128];char explode[128];char implode[128];endstruct'
Dim $oAW = DllStructCreate($tSTRUCT)

$oAW.fadeIn                     = 0x00080000
$oAW.fadeOut                    = 0x00090000
$oAW.slide_In_Left              = 0x00040001
$oAW.slide_Out_Left             = 0x00050002
$oAW.slide_In_Top               = 0x00040004
$oAW.slide_Out_Top              = 0x00050008
$oAW.slide_In_Right             = 0x00040002
$oAW.slide_Out_Right            = 0x00050001
$oAW.slide_In_Bottom            = 0x00040008
$oAW.slide_Out_Bottom           = 0x00050004
$oAW.diagSlide_In_TopLeft       = 0x00040005
$oAW.diagSlide_Out_TopLeft      = 0x0005000a
$oAW.diagSlide_In_TopRight      = 0x00040006
$oAW.diagSlide_Out_TopRight     = 0x00050009
$oAW.diagSlide_In_BottomLeft    = 0x00040009
$oAW.diagSlide_Out_BottomLeft   = 0x00050006
$oAW.diagSlide_In_BottomRight   = 0x0004000a
$oAW.diagSlide_Out_BottomRight  = 0x00050005
$oAW.explode                    = 0x00040010
$oAW.implode                    = 0x00050010

;Verificar a estrutura da variavel
;~ _WinAPI_DisplayStruct($oAW, $tSTRUCT)

;Variaveis de cores
Dim Const $tagSTRUCT = 'struct;char white[8];char black[8];char dark[8];char light[8];char darkLight[8];char aqua[8];char alpha[2];endstruct'
Dim $oColor = DllStructCreate($tagSTRUCT)
$oColor.white = 0xFFFFFF
$oColor.black = 0x000000
$oColor.dark = 0x202020
$oColor.light = 0xf5f6f7
$oColor.darkLight = 0x323232
$oColor.aqua = 0x00f2ff
$oColor.alpha = -2

;Verificar a estrutura da variavel
;~ _WinAPI_DisplayStruct($oColor, $tagSTRUCT)

;Texto de exemplo
Dim $sSampleText = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor ' & _
        'incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud ' & _
        'exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure ' & _
        'dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur ' & _
        'sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'

$hWnd_Main = GUICreate("", 615, 437, -1, -1, $WS_POPUPWINDOW, $WS_EX_TOPMOST)
GUISetBkColor($oColor.dark)
$aGetPos = WinGetPos($hWnd_Main)

$sLabel_Title = GUICtrlCreateLabel("   Exemplo de janela animada", 0, 0, $aGetPos[2] - 2, 17, $SS_CENTERIMAGE, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetFont(-1, 10, 400, 0, "Segoe UI")
GUICtrlSetBkColor(-1, $oColor.darkLight)
GUICtrlSetColor(-1, $oColor.white)

$Label2 = GUICtrlCreateLabel($sSampleText, 35, 40, 546, 337)
GUICtrlSetFont(-1, 11, 400, 0, "Segoe UI")
GUICtrlSetColor(-1, $oColor.white)

$idBtn_Run = GUICtrlCreateButton("Run Effect", 430, 385, 75, 25)
$idBtn_Exit = GUICtrlCreateButton("Exit", 510, 385, 75, 25)

GUISetState(@SW_SHOW)

;Cria um sublinhado na barra de titulo
$lineGraphic = GUICtrlCreateGraphic(0, 18, $aGetPos[2] - 1, 1)
GUICtrlSetBkColor(-1, $oColor.aqua)


While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE, $idBtn_Exit
            Exit

        Case $idBtn_Run
            GUICtrlSetState($idBtn_Run, $GUI_HIDE)
            GUISetState(@SW_HIDE, $hWnd_Main)
            Sleep(1500)

            For $i = 1 To 20
                ;Coleta o valor da variavel da estrutura $oAW
                $getAW = DllStructGetData($oAW, $i)
                ;Aplica o efeito
                _WinAPI_AnimateWindow($hWnd_Main, $getAW, 300)
                Sleep(200)
            Next
            
            ;Aplica o efeito de entrada fade-in com tempo de entrada de 1s (1000ms)
            _WinAPI_AnimateWindow($hWnd_Main, $oAW.fadeIn, 1000)

            ;Recolore o sublinhado
            GUICtrlSetBkColor($lineGraphic, $oColor.aqua)
            GUISetState(@SW_SHOW)
            GUICtrlSetState($idBtn_Run, $GUI_SHOW)

    EndSwitch
WEnd

 

 

Edited by Rodrigo Chaves Neto
  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites
12 minutes ago, Rodrigo Chaves Neto said:

Legal.

O bom dessa função é que a variável é exibida de um jeito parecido com o ArrayDisplay

Eu sempre usava array quando queria selecionar um setor do programa ou um monte de variáveis que eu acabava esquendo a finalidade. Dessa forma meus projetos vão ficar todos organizados por setores.

Edited by Pedro Pinheiro

Share this post


Link to post
Share on other sites
2 minutes ago, Pedro Pinheiro said:

Eu sempre usava array quando queria selecionar um setor do programa ou um monte de variáveis que eu acabava esquendo a finalidade. Dessa forma meus projetos vão ficar todos organizados por setores.

E as variáveis parecem ficar mais elegantes

Share this post


Link to post
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


×