Google Groups Home
Help | Sign in
VAST 4.02 : Как сделать окно прозрачным?
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  4 messages - Collapse all
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
Д.Ю. Левенцов  
View profile
 More options Dec 22 2005, 4:10 am
Newsgroups: fido7.ru.smalltalk
From: "Д.Ю. Левенцов" <l...@aaanet.ru>
Date: Thu, 22 Dec 2005 09:10:46 +0000 (UTC)
Local: Thurs, Dec 22 2005 4:10 am
Subject: VAST 4.02 : Как сделать окно прозрачным?
Добрый день!
Хотелось бы получить совет, как в VAST 4.02 в среде WinXP SP1 сделать окно
прозрачным, а также менять степень прозрачности. Я так полагаю, что нужно
использовать функции WinAPI, но вот мне не удаётся правильно вызвать их из
VAST.
Причём скрипт, делающий окно "always on top" удалось запустить:

    alwaysOnTop
     "Perform the alwaysOnTop action."
    |minWin|
        minWin := PlatformFunction callingConvention: 'c'
        function: 'SetWindowPos'
        library: 'user32.dll'
        parameterTypes:#(uint32 uint32 int32 int32 int32 int32 uint32)
        returnType: #void.
        minWin callWith:(self parentPart widget window shellHandle) with: -1
with: 0 with: 0 with: 0 with: 0 with: (1 bitOr: 2).

Но в данном случае я смог подсмотреть значения необходимых параметров в
недрах VAST, впрочем как и сам вызов. В случае же с прозрачность окна
необходимой информации в недрах VAST нет ибо эта функция появилась только в
Win2K.
Описание действий, которые необходимо выполнить, чтобы сделать окно
прозрачным есть:

        Чтобы сделать диалоговое окно прозрачным, сперва необходимо создать
обычный диалог. А затем, в обработчике сообщения WM_INITDIALOG, установить
        бит прозрачности в дополнительных свойствах окна, и вызвать
SetLayeredWindowAttributes с желаемым значением альфы. Программно это
выглядит так:
                // Устанавливаем WS_EX_LAYERED на это окно
                SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd,
GWL_EXSTYLE) | WS_EX_LAYERED);
                // Делаем это окно на 70% прозрачным
                SetLayeredWindowAttributes(hwnd, 0, (255 * 70) / 100,
LWA_ALPHA);
        Обратите внимание, что третий параметр SetLayeredWindowAttributes
имеет значение в пределах от 0 до 255. При этом 0 делает окно полностью
прозрачным, 255          полностью НЕ прозрачным.

Функции находятся в модуле user32.dll, причём функция SetWindowLong имеет
alias SetWindowLongA. Проблемой также является то, что я не знаю значений
констант GWL_EXSTYLE, WS_EX_LAYERED и LWA_ALPHA.

Буду признателен, если кто-нибудь сможет продемонстрировать скрипт для VAST,
вызывающий функцию GetWindowLong с параметром GWL_EXSTYLE для существующего
окна, затем вызывающий функцию SetWindowLong, используя результат выполнения
предыдущей функции как один из параметров, а также вызов функции
SetLayeredWindowAttributes.
А может всё гораздо проще и я излишне заморачиваюсь?

С уважением,
Дмитрий Левенцов.


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Д.Ю. Левенцов  
View profile
 More options Dec 26 2005, 6:42 am
Newsgroups: fido7.ru.smalltalk
From: "Д.Ю. Левенцов" <l...@aaanet.ru>
Date: Mon, 26 Dec 2005 11:42:45 +0000 (UTC)
Local: Mon, Dec 26 2005 6:42 am
Subject: Re: VAST 4.02 : Как сделать окно прозрачным?
Спасибо!!!
Очень помогло!

С уважением,
Дмитрий Левенцов

"Maxim Annenkov" <m...@bbt.ru> сообщил/сообщила в новостях следующее:
news:dogmvj$s36$1@ddt.demos.su...


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Д.Ю. Левенцов  
View profile
 More options Dec 30 2005, 2:53 am
Newsgroups: fido7.ru.smalltalk
From: "Д.Ю. Левенцов" <l...@aaanet.ru>
Date: Fri, 30 Dec 2005 07:53:40 +0000 (UTC)
Local: Fri, Dec 30 2005 2:53 am
Subject: Re: VAST 4.02 : Как сделать окно прозрачным?
Здравствуйте!
Небольшой сопутствующий предыдущему вопрос. До того как Максим преслал мне
приложение из VAST 6.03, иллюстрирующее работу с прозрачностю окон, я
пробовал играться с вызовом функции WinAPI  SetWindowLong пытаясь передавать
ей различные параметры. На прозрачности окна это в тот момент никак не
сказалась, но вот получались довольно интерсные стили окна. К сожалению это
было очень хаотично и я сам не понял, что сделал. Нет ли информации по
поводу применения этой фунцкии для изменения стиля окна и соответсвующих
параметрах.

С уважением,
Дмитрий Левенцов

"Maxim Annenkov" <m...@bbt.ru> сообщил/сообщила в новостях следующее:
news:dogmvj$s36$1@ddt.demos.su...


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Maxim Annenkov  
View profile
 More options Dec 30 2005, 6:00 am
Newsgroups: fido7.ru.smalltalk
From: "Maxim Annenkov" <m...@bbt.ru>
Date: Fri, 30 Dec 2005 11:00:55 +0000 (UTC)
Local: Fri, Dec 30 2005 6:00 am
Subject: Re: VAST 4.02 : Как сделать окно прозрачным?
Привет,

Все описано в MSDN. Можно или купить на рынке, или в онлайне
http://msdn.microsoft.com
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winu...

"Д.Ю. Левенцов" <l...@aaanet.ru> wrote in message

news:dp2p1c$1g7j$1@pa.aaanet.ru...


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »

Create a group - Google Groups - Google Home - Terms of Service - Privacy Policy
©2008 Google