Что нового

[Окна, Диалоги] Плавное появления окна программы

Roman89

Новичок
Сообщения
107
Репутация
3
Всем доброго времени суток!
У меня вопрос:
Как сделать что бы окно программы при открытие программы плавно появлялось и при закрытие плавно исчезало!
Всем заранее спасибо за ответы!
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Смотрите _WinAPI_AnimateWindow ( ) из библиотеки http://autoit-script.ru/index.php?topic=47.0
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Хм... ещё можно попробовать через WinSetTrans() плавно менять прозрачность... ;D
 

VladUs

Скриптер
Сообщения
621
Репутация
181
В _WinAPI_AnimateWindow ( ) там всякие эффекты можно применять
 

Sergey2210

Осваивающий
Сообщения
263
Репутация
31
Это ставить перед GUISetState()

Код:
DllCall('User32.dll', 'long', 'AnimateWindow', 'hwnd', $hWnd, 'long', 2000, 'long', 0x00080000)


И закрытие окна:
Код:
; Эфект закрытия окна ставится например здесь
While 1
    $msg = GUIGetMsg()
    Switch $msg 
		Case $GUI_EVENT_CLOSE
           DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $hForm, "int", 2000, "long", 0x00090000)
           Exit
	EndSwitch
WEnd
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
VladUs [?]
В _WinAPI_AnimateWindow ( ) там всякие эффекты можно применять
Это нестандартная функция, требует WinAPEX, вот её пример:

Код:
#NoTrayIcon

#Include <Constants.au3>
#Include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)
Opt('TrayMenuMode', 1)

Global Const $SC_MINIMIZE = 0xF020

Global $hTray = ControlGetHandle('[CLASS:Shell_TrayWnd]', '', 'TrayNotifyWnd1')
Global $hForm, $GUIMsg, $TrayMsg, $Dummy, $TrayRestoreItem, $TrayExitItem

$TrayRestoreItem = TrayCreateItem('Restore')
TrayItemSetState(-1, $TRAY_DEFAULT)
TrayCreateItem('')
$TrayExitItem = TrayCreateItem('Exit')
TraySetClick(8)

$hForm = GUICreate('My GUI')
$Dummy = GUICtrlCreateDummy()
GUIRegisterMsg($WM_SYSCOMMAND, 'WM_SYSCOMMAND')
GUISetState()

While 1
	$TrayMsg = TrayGetMsg()
	Switch $TrayMsg
		Case $TrayRestoreItem
			_WinAPI_DrawAnimatedRects($hForm, _WinAPI_GetWindowRect($hTray), _WinAPI_GetWindowRect($hForm))
			GUISetState(@SW_SHOW, $hForm)
			TraySetState(2)
		Case $TrayExitItem
			ExitLoop
	EndSwitch
	$GUIMsg = GUIGetMsg()
	Switch $GUIMsg
		Case -3
			_WinAPI_AnimateWindow($hForm, BitOR($AW_BLEND, $AW_HIDE))
			ExitLoop
		Case $Dummy ; Minimize
			_WinAPI_DrawAnimatedRects($hForm, _WinAPI_GetWindowRect($hForm), _WinAPI_GetWindowRect($hTray))
			GUISetState(@SW_HIDE, $hForm)
			TraySetState(1)
	EndSwitch
WEnd

Func WM_SYSCOMMAND($hWnd, $iMsg, $wParam, $lParam)
	Switch $hWnd
		Case $hForm
			Switch $wParam
				Case $SC_MINIMIZE
					GUICtrlSendToDummy($Dummy)
					Return 0
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SYSCOMMAND
 

VladUs

Скриптер
Сообщения
621
Репутация
181
CreatoR
Это нестандартная функция, требует WinAPIEx.au3, вот её пример:
В этом посте я указал на необходимую функцию и ссылку на библиотеку. Там же в справке и пример по ней.
:scratch:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Лучше использовать WinSetTrans().
 
Верх