хитрая прозрачность окна...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
_NeoN_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 14.08.2003 (Чт) 9:48
Откуда: Новосибирск

Сообщение _NeoN_ » 01.09.2003 (Пн) 13:00

ам не пользовался этим делом но у меня такое ощущение что если у вас курсор находится в координатах 596,372(например) то эти координаты будут посылаться окну как будто на него тыркнули в координаты 596,372.. то есть по оконной системе отсчета.. но это так.. если че то учти это,хотя сам не знаю :wink:

SergeySV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 124
Зарегистрирован: 17.04.2003 (Чт) 14:39
Откуда: Россия, Москва

Сообщение SergeySV » 01.09.2003 (Пн) 17:48

_NeoN_ писал(а):ам не пользовался этим делом но у меня такое ощущение что если у вас курсор находится в координатах 596,372(например) то эти координаты будут посылаться окну как будто на него тыркнули в координаты 596,372.. то есть по оконной системе отсчета.. но это так.. если че то учти это,хотя сам не знаю :wink:


Да, на это стоит конечно обратить внимание.
Но в данном случае, помойму, GetcursosPos возвращает глобальные коорд. и даже твипами можно не связываться....

Кстати, подумай еще вот над каким моментом, можно не только клики передавать, но хорошо бы еще и движение мыши. Вдруг он там захочет рамку подтянуть или еще что, а курсор не меняется. Правда надо не забыть потом предусмотреть возможность выключения своего окна (через клавишу, трей или еще что)
Главное двигаться не быстрее, чем думает твоя голова.

_NeoN_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 14.08.2003 (Чт) 9:48
Откуда: Новосибирск

Сообщение _NeoN_ » 01.09.2003 (Пн) 17:49

А казалось бы простой вопрос=)
хотя не каждый простой вопрос имеет простое решение=) во как

Myxa
Обычный пользователь
Обычный пользователь
 
Сообщения: 63
Зарегистрирован: 04.10.2002 (Пт) 14:36
Откуда: Kazakhstan

Сообщение Myxa » 05.09.2003 (Пт) 10:34

Я тут пробовал вот так:

Код: Выделить всё
Private Sub Form_Load()
SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, flags
SetWindowLong hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED
SetLayeredWindowAttributes hwnd, 0, 150, LWA_ALFA
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim i As Long
If Button = vbLeftButton Then
i = GetWindow(hwnd, GW_HWNDNEXT)
SendMessage i, WM_LBUTTONDOWN, vbNull, 0&
End Sub


здесь с помощью GetWindow получаю хендл окна под моим окном, а вот потом передаю это все с помощью SendMessage но либо я там параметры неправильно указал либо что то другое но работать это дело не хочет. Может кто просвятит на эту тему?

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 18.05.2004 (Вт) 14:09

Все гениальное - простынь
Вложения
TransparentEx.zip
"Хитрая прозрачность окна"
(17.14 Кб) Скачиваний: 75

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 20.05.2004 (Чт) 0:42

Вобщем что тут говарить это надо видеть
Код: Выделить всё
Option Explicit
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, _
ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As _
Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal _
nCombineMode As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As _
Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
Public Sub TransparentForm(frm As Form)
frm.ScaleMode = vbPixels
Const RGN_DIFF = 4
Const RGN_OR = 2
Dim outer_rgn As Long
Dim inner_rgn As Long
Dim wid As Single
Dim hgt As Single
Dim border_width As Single
Dim title_height As Single
Dim ctl_left As Single
Dim ctl_top As Single
Dim ctl_right As Single
Dim ctl_bottom As Single
Dim control_rgn As Long
Dim combined_rgn As Long
Dim ctl As Control
If frm.WindowState = vbMinimized Then Exit Sub
wid = frm.ScaleX(frm.Width, vbTwips, vbPixels)
hgt = frm.ScaleY(frm.Height, vbTwips, vbPixels)
outer_rgn = CreateRectRgn(0, 0, wid, hgt)
border_width = (wid - frm.ScaleWidth) / 2
title_height = hgt - border_width - frm.ScaleHeight
inner_rgn = CreateRectRgn(border_width, title_height, wid - border_width, _
hgt - border_width)
combined_rgn = CreateRectRgn(0, 0, 0, 0)
CombineRgn combined_rgn, outer_rgn, inner_rgn, RGN_DIFF
For Each ctl In frm.Controls
If ctl.Container Is frm Then
ctl_left = frm.ScaleX(ctl.Left, frm.ScaleMode, vbPixels) _
+ border_width
ctl_top = frm.ScaleX(ctl.Top, frm.ScaleMode, vbPixels) + title_height
ctl_right = frm.ScaleX(ctl.Width, frm.ScaleMode, vbPixels) + ctl_left
ctl_bottom = frm.ScaleX(ctl.Height, frm.ScaleMode, vbPixels) + ctl_top
control_rgn = CreateRectRgn(ctl_left, ctl_top, ctl_right, ctl_bottom)
CombineRgn combined_rgn, combined_rgn, control_rgn, RGN_OR
End If
Next ctl
SetWindowRgn frm.hWnd, combined_rgn, True
End Sub
Private Sub Form_Resize()
TransparentForm Me
End Sub


Для оригинальности убери ControlBox = False , form1.caption = ""
:wink:
Max!

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 20.05.2004 (Чт) 12:05

Это немного из другой оперы, но прикольно. Осталось только найти практическое применение.

Пред.

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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 1

    TopList  
cron