FUNCIÓN para "ANIMAR" botones intro/out y "VIBRAR"

y programas personales para otros como tu, puede que te corrijan ;)
Responder
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

FUNCIÓN para "ANIMAR" botones intro/out y "VIBRAR"

Mensaje por yasmany »

Hola con todos, les dejo un par de funciones que he realizado, simula animación de entrada y salida de botones, de igual forma simula una breve vibración.

Func buttonAnimation($hWnd, $idControl, $introMode)
- nombre de la gui
- id del boton
- modo de animacion

Func sVibrar ($hWnd, $idControl)
- nombre de la gui
- id del boton

Espero les pueda servir, es utilizable sin importar la posición de los botones; pueden modificarlo a su gusto y si desean mejorarlo enhorabuena. :smt002
Saludos :smt024

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("GUICloseOnESC", 0)
Opt("GUIOnEventMode", 1)

$myGui = GUICreate("Ejemplo", 308, 415, -1, -1)
GUISetBkColor(0x646464)

$Label2 = GUICtrlCreateLabel("Label2", 8, 88, 36, 17)
GUICtrlSetBkColor(-1, 0xA6CAF0)
$Label3 = GUICtrlCreateLabel("Label3", 8, 136, 36, 17)
GUICtrlSetBkColor(-1, 0xA6CAF0)
$Label4 = GUICtrlCreateLabel("Label4", 8, 176, 36, 17)
GUICtrlSetBkColor(-1, 0xA6CAF0)

$Input1 = GUICtrlCreateInput("Input1", 56, 88, 97, 21)
$Input2 = GUICtrlCreateInput("Input2", 56, 136, 97, 21)
$Input3 = GUICtrlCreateInput("Input3", 56, 176, 97, 21)
$Label1 = GUICtrlCreateLabel("Mi titulo", 8, 16, 290, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xFFFFFF)

$List1 = GUICtrlCreateList("", 168, 88, 121, 110)

$Button1 = GUICtrlCreateButton("Salir", 96, 352, 107, 41)
GUICtrlSetOnEvent(-1, "_cerrarInterfaz")

GUISetOnEvent($GUI_EVENT_RESTORE, "_restoreInterfaz")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "_minimizarInterfaz")
GUISetOnEvent($GUI_EVENT_CLOSE, "_cerrarInterfaz")

;Oculto todos los botones para que tenga una especie de entrada
For $i = $Label2 To $Button1
	GUICtrlSetState($i, $GUI_HIDE)
Next
;~ ; esto lo pueden personalizar

GUISetState(@SW_SHOW)

Sleep(500)

;animacion------------------------------------------
buttonAnimation($myGui, $Label1, "down")

buttonAnimation($myGui, $Label2, "left")
buttonAnimation($myGui, $Input1, "right")

buttonAnimation($myGui, $Label3, "left")
buttonAnimation($myGui, $Input2, "right")

buttonAnimation($myGui, $Label4, "left")
buttonAnimation($myGui, $Input3, "right")

buttonAnimation($myGui, $List1, "right")

buttonAnimation($myGui, $Button1, "up")
;----------------------------------------------------
sVibrar($myGui, $Input1)
sVibrar($myGui, $Input2)
sVibrar($myGui, $Input3)
;----------------------------------------------------

While 1
	Sleep(100)
WEnd

;con el STEP o el SLEEP se acelera la animacion
Func buttonAnimation($hWnd, $idControl, $introMode)
	Local $cPosDos
	;--------------- INFO SIZE BUTTON ----------------------------
	Local $cPos = ControlGetPos($hWnd, "", $idControl)
	ConsoleWrite("Position: " & $cPos[0] & ", " & $cPos[1] & @CRLF)
	ConsoleWrite("Size: " & $cPos[2] & ", " & $cPos[3] & @CRLF & @CRLF)

	Local $aClientSize = WinGetClientSize($hWnd) ; toma referencia al tamaño de la ventana
	ConsoleWrite("SIZE WINDOWS" & @CRLF)
	ConsoleWrite("Width: " & $aClientSize[0] & @CRLF & "Height: " & $aClientSize[1] & @CRLF & @CRLF)
	;--------------- INTRO ---------------------------------------
	If $introMode = "right" Then ; *** Ingreso por la derecha

		ControlMove($hWnd, "", $idControl, $aClientSize[0], $cPos[1])
		GUICtrlSetState($idControl, $GUI_SHOW)
		$cPosDos = ControlGetPos($hWnd, "", $idControl)

		For $i = $cPosDos[0] To $cPos[0] Step -10 ; $cPos[0] es la posicion X que se obtuvo primero
			Sleep(10)
			ControlMove($hWnd, "", $idControl, $i, $cPos[1])
		Next

	ElseIf $introMode = "left" Then ; *** Ingreso por la izquierda

		ControlMove($hWnd, "", $idControl, -($cPos[0] + $cPos[2]), $cPos[1]) ; se mueve a la izquierda para de ahi salir
		GUICtrlSetState($idControl, $GUI_SHOW)
		$cPosDos = ControlGetPos($hWnd, "", $idControl)

		For $i = $cPosDos[0] To $cPos[0] Step 3 ; $cPos[0] es la posicion X que se obtuvo primero
			Sleep(10)
			ControlMove($hWnd, "", $idControl, $i, $cPos[1])
		Next

	ElseIf $introMode = "down" Then  ; *** Ingreso desde abajo

		ControlMove($hWnd, "", $idControl, $cPos[0], -1 + (-$cPos[3]))
		$cPosDos = ControlGetPos($hWnd, "", $idControl)
		GUICtrlSetState($idControl, $GUI_SHOW)

		$cPosDos = ControlGetPos($hWnd, "", $idControl)
		For $i = $cPosDos[1] To $cPos[1] Step 10
			Sleep(25)
			ControlMove($hWnd, "", $idControl, $cPosDos[0], $i)
		Next

	ElseIf $introMode = "up" Then  ; *** Ingreso de arriba hacia abajo

		ControlMove($hWnd, "", $idControl, $cPos[0], $aClientSize[1])
		GUICtrlSetState($idControl, $GUI_SHOW)
		$cPosDos = ControlGetPos($hWnd, "", $idControl)

		For $i = $cPosDos[1] To $cPos[1] Step -10
			Sleep(25)
			ControlMove($hWnd, "", $idControl, $cPosDos[0], $i)
		Next

	ElseIf $introMode = "down-out" Then ;  ; *** Salida por abajo
		; cuando el efecto es de salida se debe
		;restablecer en HIDE a la posicion original

		For $i = $cPos[1] To $aClientSize[1] Step 5
			Sleep(10)
			ControlMove($hWnd, "", $idControl, $cPos[0], $i)
		Next
		GUICtrlSetState($idControl, $GUI_HIDE) ; lo oculta y
		ControlMove($hWnd, "", $idControl, $cPos[0], $cPos[1]) ; restablece a la posición para el nuevo efecto que se desee aplicar

	ElseIf $introMode = "up-out" Then  ; *** Salida por arriba

		For $i = $cPos[1] To -1 + (-$cPos[3]) Step -5
			Sleep(10)
			ControlMove($hWnd, "", $idControl, $cPos[0], $i)
		Next
		GUICtrlSetState($idControl, $GUI_HIDE)
		ControlMove($hWnd, "", $idControl, $cPos[0], $cPos[1])

	ElseIf $introMode = "left-out" Then  ; *** Salida por la izquierda

		For $i = $cPos[0] To -1 + (-$cPos[2]) Step -8
			Sleep(10)
			ControlMove($hWnd, "", $idControl, $i, $cPos[1])
		Next
		GUICtrlSetState($idControl, $GUI_HIDE)
		ControlMove($hWnd, "", $idControl, $cPos[0], $cPos[1])

	ElseIf $introMode = "right-out" Then  ; *** Salida por la derecha

		For $i = $cPos[0] To $aClientSize[0] Step 10
			Sleep(10)
			ControlMove($hWnd, "", $idControl, $i, $cPos[1])
		Next
		GUICtrlSetState($idControl, $GUI_HIDE)
		ControlMove($hWnd, "", $idControl, $cPos[0], $cPos[1])

	EndIf

EndFunc   ;==>buttonAnimation

Func sVibrar($hWnd, $idControl) ; simulación de vibrar
	;--------------- INFO SIZE BUTTON ----------------------------
	Local $cPos = ControlGetPos($hWnd, "", $idControl)
	;--------------- SHAKE  --------------------------------------
	For $i = 0 To 7
		ControlMove($hWnd, "", $idControl, $cPos[0] - 4, $cPos[1])
		Sleep(20)
		ControlMove($hWnd, "", $idControl, $cPos[0] + 4, $cPos[1])
		Sleep(20)
	Next
	ControlMove($hWnd, "", $idControl, $cPos[0], $cPos[1])
EndFunc   ;==>sVibrar

Func _cerrarInterfaz()

	buttonAnimation($myGui, $Label1, "up-out")

	buttonAnimation($myGui, $Label2, "left-out")
	buttonAnimation($myGui, $Input1, "left-out")
	buttonAnimation($myGui, $Label3, "left-out")
	buttonAnimation($myGui, $Input2, "left-out")
	buttonAnimation($myGui, $Label4, "left-out")
	buttonAnimation($myGui, $Input3, "left-out")

	buttonAnimation($myGui, $List1, "right-out")

	buttonAnimation($myGui, $Button1, "down-out")

	Sleep(200)
	Exit
EndFunc   ;==>_cerrarInterfaz

Func _minimizarInterfaz()
	GUISetState(@SW_MINIMIZE, $myGui)
EndFunc   ;==>_minimizarInterfaz

Func _restoreInterfaz()
	GUISetState(@SW_RESTORE, $myGui)
EndFunc   ;==>_restoreInterfaz
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: FUNCIÓN para "ANIMAR" botones intro/out y "VIBRAR"

Mensaje por Chefito »

Muy chulo. Bonito el efecto. Bien hecho :smt023 .
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Responder