Тема: AHK: Прозрачность отдельного элемента
Здравствуйте, мне нужно каким то образом сделать прозрачным отдельный элемент в окне(в моем случае это ActiveX).
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Здравствуйте, мне нужно каким то образом сделать прозрачным отдельный элемент в окне(в моем случае это ActiveX).
Мало что понятно. Опишите задачу подробнее. Какая цель? Что значит «прозрачным»? Насколько?
Есть GUI, в нем есть Button и ActiveX. Цель - сделать в окне GUI элемент ActiveX прозрачным например на половину.
И что будет видно сквозь полупрозрачный ActiveX? Фоновую заливку окна?
Например рабочий стол было бы видно сквозь ActiveX.
Можно всё окно сделать полупрозрачным.
Например рабочий стол было бы видно сквозь ActiveX.
Так не выйдет. Контролы находятся поверх окна, если окно непрозрачное, то, что под ним, видно не будет.
Я думал такое возможно, ну ладно тогда.
Можно всё окно сделать полупрозрачным.
Если бы я хотел именно это, то и на форум не стал писать, а сделал сам.
Если я правильно улавливую суть, то окно это как-бы background в фотошопе, а контролы - слои на нем.
ypppu пишет:Можно всё окно сделать полупрозрачным.
Если бы я хотел именно это, то и на форум не стал писать, а сделал сам.
А что, там есть другие элементы управления, которые нужно оставить непрозрачными?
Да, кнопка(button) должна остаться непрозрачным и окно само тоже должно быть непрозрачным, а элемент ActiveX полупрозрачным.
Как вариант.
Узнаем координаты контрола, который должен быть прозрачным и эти же координаты делаем прозрачными в бекграунде gui.
и эти же координаты делаем прозрачными в бекграунде gui
А это как делается?
Например прозрачный background gui, а поверх рисуем рамку с помощью add, Progress.
Значит не
эти же координаты делаем прозрачными в бекграунде gui
а остальную область прозрачного окна делаем непрозрачной? Но ведь в прозрачном окне и все контролы будут прозрачными, разве нет?
Да, действительно.
Если совсем извратится, то через WinSet Region вырезать кусок окна, поместить туда другое прозрачное окно, применить к нему WS_EX_NOACTIVATE, ну и следить за перемещением основного окна.
А если взять фоном картинку с нужной прозрачной областью?
Если совсем извратится, то через WinSet Region вырезать кусок окна, поместить туда другое прозрачное окно, применить к нему WS_EX_NOACTIVATE, ну и следить за перемещением основного окна.
Так можно. Тоже думал об этом, но не знал, что есть такой стиль.
Все-таки не понял, почему так нельзя?
#Persistent
#SingleInstance, Force
Gui, Add, Progress, x0 y0 w300 h20 100
Gui, Color, 000111
Gui, Show, W400 H300, Test
WinSet, Transcolor, 000111, Test
Return
Ну, а дальше что?
Сделать контрол определенного цвета и применить к нему WinSet, Transcolor с нужной прозрачностью.
И что в таком одноцветном контроле будет отображаться (учитывая, что это ActiveX) ?
Да, не подходит мой вариант.
serzh82saratov пишет:Если совсем извратится, то через WinSet Region вырезать кусок окна, поместить туда другое прозрачное окно, применить к нему WS_EX_NOACTIVATE, ну и следить за перемещением основного окна.
Так можно. Тоже думал об этом, но не знал, что есть такой стиль.
Пробовал. Не придумал, как организовать быстро перемещение. Всё рывками, на нервы действует.
Напишу попозже.
Тут уже написано:
http://www.autohotkey.com/board/topic/1 … ay-in-gui/
Получилось, но не айс. С подпорками, и всё же окно с ActiveX иногда на мгновение становится активным, возникает мелькание.
SetWinDelay, 0
global hMainGui, hChildGui, hWorkGui
Gui, Main: +hwndhMainGui +LastFound
Gui, Child: +hwndhChildGui -Caption +ParentMain
Gui, Child: Color, 123456
WinSet, TransColor, 123456
Gui, Main: Add, Button, x227 y167 w65 h23 gPlay, Play
Gui, Main: Show, w300 h200
Gui, Child: Show, x10 y10 w280 h150
Gui, Work: +hwndhWorkGui -Caption +ToolWindow +LastFound +OwnerMain
Gui, Work: Add, ActiveX, x0 y0 w280 h150 vWMP, WMPlayer.OCX.7
WMP.url := A_WinDir "\Media\tada.wav"
WMP.controls.stop
WinSet, ExStyle, +0x8000000 ; WS_EX_NOACTIVATE
WinSet, Transparent, 150
WinGetPos, X, Y,,, ahk_id %hChildGui%
Gui, Work: Show, x%X% y%Y% w280 h150 NA
DllCall("RegisterShellHookWindow", "UInt", A_ScriptHwnd)
OnMessage(DllCall("RegisterWindowMessage", "str", "SHELLHOOK"), "ShellProc")
OnMessage(0x3, "WM_MOVE")
OnExit, Exit
Return
Play:
WMP.controls.play
Return
Exit:
DllCall("DeregisterShellHookWindow", "UInt", A_ScriptHwnd)
ExitApp
MainGuiClose:
Gui, Main: Cancel
ExitApp
WM_MOVE(wp, lp, msg, hwnd)
{
if (hwnd != hMainGui)
Return
WinGetPos, X, Y,,, ahk_id %hChildGui%
Gui, Work: Show, x%X% y%Y% NA
}
ShellProc(nCode, wParam)
{
if (nCode = 4 && WinActive("ahk_id" hWorkGui)) ; HSHELL_WINDOWACTIVATED := 4
WinActivate, ahk_id %hMainGui%
}
sergeiplugatyr, беги за поллитрой!
Очередной экспонат для Коллекции!
Доработать для Коллекции надо, чтобы не мелькало. Может, кто предложит чего.
Скорее всего, по-другому и не получится. Окно с ActiveX хотя бы на мгновение должно получить клавиатурный фокус (а значит и активность), т. к. в ином случае невозможно будет взаимодействовать с его элементами управления (если таковые есть).
SetWinDelay, 0
global hMainGui, hChildGui, hWorkGui
Gui, Main: +hwndhMainGui +LastFound
Gui, Child: +hwndhChildGui -Caption +ParentMain
Gui, Child: Color, 123456
WinSet, TransColor, 123456
Gui, Main: Add, Button, x227 y167 w65 h23 gPlay, Play
Gui, Main: Show, w300 h200
Gui, Child: Show, x10 y10 w280 h150
Gui, Work: +hwndhWorkGui -Caption +ToolWindow +LastFound
Gui, Work: Add, ActiveX, x0 y0 w280 h150 vWMP, WMPlayer.OCX.7
WMP.url := A_WinDir "\Media\tada.wav"
WMP.controls.stop
WinSet, Transparent, 180
WinGetPos, X, Y,,, ahk_id %hChildGui%
Gui, Work: Show, x%X% y%Y% w280 h150 NA
OnMessage(0x6, "WM_ACTIVATE")
OnMessage(0x3, "WM_MOVE")
OnExit, Exit
Return
Play:
WMP.controls.play
Return
Exit:
DllCall("DeregisterShellHookWindow", "UInt", A_ScriptHwnd)
ExitApp
MainGuiClose:
Gui, Main: Cancel
ExitApp
WM_MOVE(wp, lp, msg, hwnd)
{
if (hwnd != hMainGui)
Return
WinGetPos, X, Y,,, ahk_id %hChildGui%
Gui, Work: Show, x%X% y%Y% NA
}
WM_ACTIVATE(wp, lp, msg, hwnd)
{
if (hwnd != hWorkGui)
Return
if (wp & 0xFFFF != 0)
WinActivate, ahk_id %hMainGui%
}
В нём не получается взаимодействовать с кнопками плеера.
*шмырг* Читаю такие темы, и прям ностальгия наваливается *шмырг-шмырг*
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться