ПОЛУПРОЗРАЧНЫЕ окна на vb

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
MMX//ALEX
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 28.09.2003 (Вс) 16:38

ПОЛУПРОЗРАЧНЫЕ окна на vb

Сообщение MMX//ALEX » 29.09.2003 (Пн) 15:22

Как создать полупрозрачное окно?
Очень просто.

Вот это в модуль:

Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, _
ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Public Const LWA_COLORKEY = &H1
Public Const LWA_ALPHA = &H2
Public Const GWL_EXSTYLE = (-20)
Public Const WS_EX_LAYERED = &H80000
Public Sub SetTransparent(hWnd As Long, Layered As Byte)
Dim Ret As Long
Ret = GetWindowLong(hWnd, GWL_EXSTYLE)
Ret = Ret Or WS_EX_LAYERED
SetWindowLong hWnd, GWL_EXSTYLE, Ret
SetLayeredWindowAttributes hWnd, 0, Layered, LWA_ALPHA
End Sub

А вот это на форму:

SetTransparent Me.hWnd, 100
где 100 - прозрачность(0-255)

Ну вот и все.
MasterPrize company

MMX//ALEX
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 28.09.2003 (Вс) 16:38

Сообщение MMX//ALEX » 29.09.2003 (Пн) 15:42

Кому чего надо. Просите. У меня много чего найдется...
MasterPrize company

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.09.2003 (Пн) 17:54

Ты это не видел? :evil:

seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

Сообщение seelts » 30.09.2003 (Вт) 18:05

Я бы оценил ваши труды, но
Can't find DLL entry point SetLayeredWindowAttributes in user32

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

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 30.09.2003 (Вт) 19:00

2seels: какая стоит система, есть ли Service Packs?

На всех компьютерах, где я пробовал, работало :?

P.S. если система НЕ winXP, то ничего ПРОСТО не работает/не происходит...

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 30.09.2003 (Вт) 19:20

Ишшо одна ветка с кодом, который никто не просил. :)
Было уже.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

Сообщение seelts » 01.10.2003 (Ср) 9:25

Amed писал(а):2seels: P.S. если система НЕ winXP, то ничего ПРОСТО не работает/не происходит...

ну вобщем да... не ХР -> Win98SE (не люб мне ХР)
и ч ничего нельзя поделать??? переход на ХР не предлагать...
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.10.2003 (Ср) 9:32

Предлагаю переход на 2k :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

Сообщение seelts » 01.10.2003 (Ср) 9:42

GSerg писал(а):Предлагаю переход на 2k :)

:wink: оригинально конечно... но можно ли сделать на Вин98?
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.10.2003 (Ср) 9:50

Нэт...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.10.2003 (Ср) 10:16

В принципе можно, но через ... не скажу, через что :)
Берешь картинку с Desktop, берешь картинку со своей формы, делаешь блендинг и результат делаешь фоном. И так рекурсией для всех контролов на твоей форме. И рефрешить при движении формы, изменении размеров, при движении других форм и просто так время от времени :)
Lasciate ogni speranza, voi ch'entrate.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 01.10.2003 (Ср) 17:35

Гхм... Сособ действительно через ... :)
Но по-иному действительно не получится :( Win'98 и иже с ними не поддерживают windows transparency (то бишь прозрачность окон)...

Кстати, будт ли заметные лаггггггггиииииии? :)
Самому, извиняюсь, написать нет времени (я на 1 курсе МГТУ :) ) Может, кто-нибудь напишет и проверит всё на своём skin'е? :lol:

Aleksej
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 191
Зарегистрирован: 03.06.2003 (Вт) 9:58

Сообщение Aleksej » 02.10.2003 (Чт) 8:24

Для Win98:
Код: Выделить всё
Public Sub RebuildWindowRgn(FormName As Form)

Dim FullRgn As Long
Dim Rgn As Long
Dim CaptionHeight As Integer
Dim Control As Control

CaptionHeight = 22

FormName.ScaleMode = 3

FullRgn = CreateRectRgn(0, 0, FormName.Width, FormName.Height)

Rgn = CreateRectRgn(0, CaptionHeight, FormName.Width, _
                    FormName.Height)

CombineRgn FullRgn, FullRgn, Rgn, RGN_DIFF

For Each Control In FormName.Controls
If Control <> True Then
Rgn = CreateRectRgn(Control.Left + 2, (Control.Top + _
                    CaptionHeight), (Control.Left + _
                    Control.Width + 2), (Control.Top + _
                    Control.Height + CaptionHeight))
End If
CombineRgn FullRgn, FullRgn, Rgn, RGN_OR

Next Control

SetWindowRgn FormName.hWnd, FullRgn, True
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.10.2003 (Чт) 15:09

Ещё один изврат:

Код: Выделить всё
Option Explicit

Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Sub Command1_Click()
  SetWindowLong Me.hwnd, -20&, &H20&
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList