powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Прозрачная форма но только форма
7 сообщений из 7, страница 1 из 1
Прозрачная форма но только форма
    #34198199
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго Вам времени суток
Уважаемые господа

при наличии времени прошу Вас помочь

мне необходимо сделать прозрачной только форму а
контролы чтобы все остовались видимыми

в поисках я нашел вот этот код

---------------------------------

Создаем стандартный модуль (*.bas). В нем мы создадим процедурку, которая и будет делать прозрачные окна.

Для начала нам необходимо объявить 3 функции:

Public Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal Hrgn As Long, byVal bRedraw As Boolean) As Long
Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long

Первая функция устанавливает регион окна, Вторая функция создает прямоугольный регион с указанными координатами, Третья функция объединяет 2 региона в один.
Затем объявим 2 константы.

Public Const RGN_DIFF = 4
Public Const RGN_OR = 2

Ну а теперь приступаем к написанию процедуры.
Пишем заголовок процедуры (у нас будет один параметр, в котором мы укажем нужную форму).

Public Sub RebuildWindowRgn(FormName As Form)

Объявляем переменную, в которой будет храниться полный регион

Dim FullRgn As Long

А в следующей переменной будут храниться промежуточные регионы

Dim Rgn As Long
Dim CaptionHeight As Integer 'Высота заголовка формы

Допустим, у нас высота заголовка формы – 22 пикселя

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
Rgn = CreateRectRgn(Control.Left + 2, (Control.Top + CaptionHeight), (Control.Left + Control.Width + 2), (Control.Top + Control.Height + CaptionHeight))
'Добавляем регион для элемента управления
CombineRgn FullRgn, FullRgn, Rgn, RGN_OR
Next Control
'Устанавливаем новый регион окна
SetWindowRgn FormName.hwnd, FullRgn, True
'Конец процедуры
End Sub

Итак, как же пользоваться полученной процедурой?
Допустим у нас есть форма Form1, тогда в событии Form_Load мы помещаем такой код:

RebuildWindowRgn (Form1)


---------------------------------

но он выдает ошибку Tayp Mismatch

в чем дело понять не могу

помогите пожалуйста

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
Прозрачная форма но только форма
    #34198221
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Public Sub RebuildWindowRgn(FormName As Form)
    Dim FullRgn As Long
    Dim Rgn As Long
    Dim CaptionHeight As Integer
    Dim oControl 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 oControl In FormName.Controls
        Rgn = CreateRectRgn(oControl.Left +  2 , (oControl.Top + CaptionHeight), (oControl.Left + oControl.Width +  2 ), (oControl.Top + oControl.Height + CaptionHeight))
        CombineRgn FullRgn, FullRgn, Rgn, RGN_OR
    Next oControl
    
    SetWindowRgn FormName.hwnd, FullRgn, True

End Sub
...
Рейтинг: 0 / 0
Прозрачная форма но только форма
    #34198726
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго Вам времени суток
Уважаемый VladConn

благодарю Вас за ответ

но все равно выдает ошибку

и выделяет желтым цветом
вот этот код - RebuildWindowRgn (Form1)

я вроде все далаю правильно

создаю стандартный модуль

ввожу туду код

при загрузке формы - RebuildWindowRgn (Form1)

все равно Tayp Mismatch

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
Прозрачная форма но только форма
    #34199273
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при вызове пиши так

RebuildWindowRgn Form1 без скобок

или так

call RebuildWindowRgn(Form1) со скобоками
...
Рейтинг: 0 / 0
Прозрачная форма но только форма
    #34199962
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
работает

благодарю Вас

С Уважением
Намик
...
Рейтинг: 0 / 0
Прозрачная форма но только форма
    #34200752
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые господа

возникла проблема с контролом Image

я помещаю на форму контрол Image1
свойство strech = trye
загружаю изображение - gif файл без фона

при загрузке форма исчезает
а за картинкой появляется фон контрол Image1
хотя до загрузки никакого фона нет

и если даже просто без картинки пустой контрол Image1 загрузить
то всеравно фон в размере контрола

подскажите пожалуйста как убрать этот фон

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
Прозрачная форма но только форма
    #34204103
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго Вам времени суток

прошу Вас

посмотрите этот код

--------------------

Option Explicit

Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_TRANSPARENT = &H20&
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_SHOWME = SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOSIZE

Private Const HWND_NOTOPMOST = -1

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

Private Declare Function SetWindowPos _
Lib "user32" ( _
ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long _
) As Long



Private Sub Form_Load()
SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_TRANSPARENT
SetWindowPos Me.hwnd, HWND_NOTOPMOST, 0&, 0&, 0&, 0&, SWP_SHOWME
End Sub


----------------------------------

он дает мне то что надо

только происходит что то не понятное

то форма появляется, то исчезает
то видна одна картинка то вся форма

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Прозрачная форма но только форма
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]