1

Тема: AHK: Прозрачность отдельного элемента

Здравствуйте, мне нужно каким то образом сделать прозрачным отдельный элемент в окне(в моем случае это ActiveX).

Как сказал мой дед - Я твой дед

2

Re: AHK: Прозрачность отдельного элемента

Мало что понятно. Опишите задачу подробнее. Какая цель? Что значит «прозрачным»? Насколько?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Прозрачность отдельного элемента

Есть GUI, в нем есть Button и ActiveX. Цель - сделать в окне GUI элемент ActiveX прозрачным например на половину.

Как сказал мой дед - Я твой дед

4

Re: AHK: Прозрачность отдельного элемента

И что будет видно сквозь полупрозрачный ActiveX? Фоновую заливку окна?

5 (изменено: sergeiplugatyr, 2014-10-21 18:09:00)

Re: AHK: Прозрачность отдельного элемента

Например рабочий стол было бы видно сквозь ActiveX.

Как сказал мой дед - Я твой дед

6

Re: AHK: Прозрачность отдельного элемента

Можно всё окно сделать полупрозрачным.

7

Re: AHK: Прозрачность отдельного элемента

sergeiplugatyr пишет:

Например рабочий стол было бы видно сквозь ActiveX.

Так не выйдет. Контролы находятся поверх окна, если окно непрозрачное, то, что под ним, видно не будет.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Прозрачность отдельного элемента

Я думал такое возможно, ну ладно тогда.

Как сказал мой дед - Я твой дед

9

Re: AHK: Прозрачность отдельного элемента

ypppu пишет:

Можно всё окно сделать полупрозрачным.

Если бы я хотел именно это, то и на форум не стал писать, а сделал сам.

Как сказал мой дед - Я твой дед

10

Re: AHK: Прозрачность отдельного элемента

Если я правильно улавливую суть, то окно это как-бы background в фотошопе, а контролы - слои на нем.

11

Re: AHK: Прозрачность отдельного элемента

sergeiplugatyr пишет:
ypppu пишет:

Можно всё окно сделать полупрозрачным.

Если бы я хотел именно это, то и на форум не стал писать, а сделал сам.

А что, там есть другие элементы управления, которые нужно оставить непрозрачными?

12

Re: AHK: Прозрачность отдельного элемента

Да, кнопка(button) должна остаться непрозрачным и окно само тоже должно быть непрозрачным, а элемент ActiveX полупрозрачным.

Как сказал мой дед - Я твой дед

13

Re: AHK: Прозрачность отдельного элемента

Как вариант.
Узнаем координаты контрола, который должен быть прозрачным и эти же координаты делаем прозрачными в бекграунде gui.

14

Re: AHK: Прозрачность отдельного элемента

и эти же координаты делаем прозрачными в бекграунде gui

А это как делается?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15

Re: AHK: Прозрачность отдельного элемента

Например прозрачный background gui, а поверх рисуем рамку с помощью add, Progress.

16

Re: AHK: Прозрачность отдельного элемента

Значит не

эти же координаты делаем прозрачными в бекграунде gui

а остальную область прозрачного окна делаем непрозрачной? Но ведь в прозрачном окне и все контролы будут прозрачными, разве нет?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17

Re: AHK: Прозрачность отдельного элемента

Да, действительно.

18 (изменено: serzh82saratov, 2014-10-22 14:32:17)

Re: AHK: Прозрачность отдельного элемента

Если совсем извратится, то через WinSet Region вырезать кусок окна, поместить туда другое прозрачное окно, применить к нему WS_EX_NOACTIVATE, ну и следить за перемещением основного окна.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

Re: AHK: Прозрачность отдельного элемента

А если взять фоном картинку с нужной прозрачной областью?

20

Re: AHK: Прозрачность отдельного элемента

serzh82saratov пишет:

Если совсем извратится, то через WinSet Region вырезать кусок окна, поместить туда другое прозрачное окно, применить к нему WS_EX_NOACTIVATE, ну и следить за перемещением основного окна.

Так можно. Тоже думал об этом, но не знал, что есть такой стиль.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

21 (изменено: Malcev, 2014-10-22 15:03:25)

Re: AHK: Прозрачность отдельного элемента

Все-таки не понял, почему так нельзя?

#Persistent
#SingleInstance, Force
Gui, Add, Progress, x0 y0 w300 h20 100
Gui, Color, 000111
Gui, Show, W400 H300, Test
WinSet, Transcolor, 000111, Test
Return

22

Re: AHK: Прозрачность отдельного элемента

Ну, а дальше что?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

23

Re: AHK: Прозрачность отдельного элемента

Сделать контрол определенного цвета и применить к нему WinSet, Transcolor с нужной прозрачностью.

24

Re: AHK: Прозрачность отдельного элемента

И что в таком одноцветном контроле будет отображаться (учитывая, что это ActiveX) ?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

25

Re: AHK: Прозрачность отдельного элемента

Да, не подходит мой вариант.

26

Re: AHK: Прозрачность отдельного элемента

teadrinker пишет:
serzh82saratov пишет:

Если совсем извратится, то через WinSet Region вырезать кусок окна, поместить туда другое прозрачное окно, применить к нему WS_EX_NOACTIVATE, ну и следить за перемещением основного окна.

Так можно. Тоже думал об этом, но не знал, что есть такой стиль.

Пробовал. Не придумал, как организовать быстро перемещение. Всё рывками, на нервы действует.

27

Re: AHK: Прозрачность отдельного элемента

Напишу попозже.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

28

Re: AHK: Прозрачность отдельного элемента

Тут уже написано:
http://www.autohotkey.com/board/topic/1 … ay-in-gui/

29

Re: AHK: Прозрачность отдельного элемента

Получилось, но не айс. С подпорками, и всё же окно с 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%
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

30

Re: AHK: Прозрачность отдельного элемента

sergeiplugatyr, беги за поллитрой!

31

Re: AHK: Прозрачность отдельного элемента

ypppu пишет:

Очередной экспонат для Коллекции!

Доработать для Коллекции надо, чтобы не мелькало. Может, кто предложит чего.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

32

Re: AHK: Прозрачность отдельного элемента

Скорее всего, по-другому и не получится. Окно с 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%
}

В нём не получается взаимодействовать с кнопками плеера.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

33 (изменено: sergeiplugatyr, 2014-10-23 04:49:25)

Re: AHK: Прозрачность отдельного элемента

Спасибо teadrinker, скрипт в посте 29 идеален для меня .

Как сказал мой дед - Я твой дед

34

Re: AHK: Прозрачность отдельного элемента

*шмырг* Читаю такие темы, и прям ностальгия наваливается *шмырг-шмырг*

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди