1 (изменено: KusochekDobra, 2016-06-14 14:10:57)

Тема: AHK: Изменение прозрачности фона окна при вызове "AnimateWindow"

Здоровья всем.
Подскажите пожалуйста:
Вариант 1.


clock := 0

Gui, Add, Button,,Кнопка
Gui, Show, w100 h100

Gui, 2: Color, 0000D1
Gui, 2: +AlwaysOnTop -Caption +Hwndh_time
Gui, 2: Font, s7 Bold cFFFF00
Gui, 2: Add, Text, w55 Center
Gui, 2: +Lastfound
WinSet, TransColor, 0000D1
Gui, 2: Show, x920 y0 Hide
Return

ButtonКнопка:
	if (clock == 0) {
		clock := 1
		Gui, 2: Show, x920 y0
		SetTimer, Timer, 1000
	} else {
		clock := 0
		Gui, 2: Show, Hide
		SetTimer, Timer, off
	}
return

Timer:
	ControlSetText, Static1, % A_Hour ":" A_Min ":" A_Sec, ahk_id%h_time%
Return

GuiClose:
ExitApp

Вариант 2.


clock := 0

Gui, Add, Button,,Кнопка
Gui, Show, w100 h100

Gui, 2: Color, 0000D1
Gui, 2: +AlwaysOnTop -Caption +Hwndh_time
Gui, 2: Font, s7 Bold cFFFF00
Gui, 2: Add, Text, w55 Center
Gui, 2: +Lastfound
WinSet, TransColor, 0000D1
Gui, 2: Show, x920 y0 Hide
Return

ButtonКнопка:
	if (clock == 0) {
		clock := 1
		SetTimer, Timer, 1000
	} else {
		clock := 0
		Gui, 2: Show, Hide
		SetTimer, Timer, off
	}
return

Timer:
	ControlSetText, Static1, % A_Hour ":" A_Min ":" A_Sec, ahk_id%h_time%
	DllCall("AnimateWindow", "UInt", h_time
						   , "Int", 950
						   , "UInt", 0x80000)
Return

GuiClose:
ExitApp

В первом варианте по нажатию кнопки вверху появляются часы на прозрачном фоне, а во втором они появляются плавно но фон не прозрачный. Как сделать его прозрачным и во втором варианте? И в чём причина того, что появление в первый раз происходит как то "криво" что-ли, но не плавно точно, а все последующие появления уже как и ожидается?

2

Re: AHK: Изменение прозрачности фона окна при вызове "AnimateWindow"

а во втором они появляются плавно но фон не прозрачный

Запустил второй скрипт. Часы появляются, но не плавно.
AutoHotkey 1.1.23.5 Unicode 32-bit, Windows XP.

3

Re: AHK: Изменение прозрачности фона окна при вызове "AnimateWindow"

ypppu
И об этом вопрос в том числе. Первое их появление происходит как-то "ломанно", а потом если по кнопке жмякать, то уже плавно. Но если в первом примере появление текста окна происходит на прозрачном фоне, то во втором, при схожих условиях фон остаётся с установленным вначале цветом. То есть, к нему не применяется "WinSet, TransColor, ColorID". За то в примере teadrinker, вызываемая "AnimateWindow" катает своё окно идеально, даже если изменить параметр со слайда на то же появление. В чём секрет?

4

Re: AHK: Изменение прозрачности фона окна при вызове "AnimateWindow"

WinSet, TransColor, 0000D1 - эта команда не может воздействовать не несуществующее окно.

5

Re: AHK: Изменение прозрачности фона окна при вызове "AnimateWindow"

Почему в таком случае первый пример работает? Второй лишь модифицирован вызовом виндовской функции, вместо стандартного способа "Gui, Show".

6

Re: AHK: Изменение прозрачности фона окна при вызове "AnimateWindow"

Если в таймере добавить TransColor, то все работает.

WinSet, TransColor, 0000D1, ahk_id %h_time%

Правда в момент появления окна виден фон.

7

Re: AHK: Изменение прозрачности фона окна при вызове "AnimateWindow"

Да, можно ещё само окно сразу показать без содержимого, ведь будучи прозрачным его всё равно не видно, потом убирать в хайд, а за тем являть через "AnimateWindow", тогда уже приемлемей. Но плавности всё равно нет, а teadrinker заглядывая сюда убедиться, что все знаки препинания на месте, держит свою тайну при себе. Умиляясь за чашечкой горячего и ароматного напитка  тому, как юный дилетант ломает голову над очевидными вещами. =/

8

Re: AHK: Изменение прозрачности фона окна при вызове "AnimateWindow"

Всё-таки я неправ, окно создаётся уже при первом Gui, Add. Тем не менее WinSet, TransColor можно применять к нему только после Gui, Show.
Проблему первого появления можно решить так:

Gui, 2: Color, 0000D1
Gui, 2: +AlwaysOnTop -Caption +Hwndh_time
Gui, 2: Font, s7 Bold cFFFF00
Gui, 2: Add, Text, w55 Center, TEXT
Gui, 2: +Lastfound
;WinSet, TransColor, 0000D1
Gui, 2: Show, x920 y0 Hide
Gui, 2: Hide
DllCall("AnimateWindow", "UInt", h_time, "Int", 2500, "UInt", 0x80000)
Return

DllCall("AnimateWindow") не дружит с WinSet, TransColor.
Но можно использовать WinSet, TransColor, Color [N], WinTitle.

Gui, 2: Color, 0000D1
Gui, 2: +AlwaysOnTop -Caption +Hwndh_time
Gui, 2: Font, s17 Bold cFFFF00
Gui, 2: Add, Text, w55 Center, TEXT
Gui, 2: Show, h0 w0
WinSet, TransColor, 0000D1 5, ahk_id %h_time%
Gui, 2: Show, x920 y0 w100 h50

Tr := 5
Loop, 25
{
Tr := Tr + 10
WinSet, TransColor, 0000D1 %Tr%, ahk_id %h_time%
Sleep, 100
}
Return

9

Re: AHK: Изменение прозрачности фона окна при вызове "AnimateWindow"

Вот последнее, думаю, идеально подойдёт в этом случае. Нижайше кланяюсь и спасибо за Ваше время.