| 100% прозрачность формы |
| Glebonus | Дата: Вторник, 17.06.2008, 23:14 | Сообщение # 1 |
 Генерал-майор
Группа: Проверенные
Сообщений: 273
Статус: Offline
| САБЖ. Ну в смысле чтобы контролы были видны, а форма нет. Да, и как реализовать в этом случае перетаскивание? Скажем за Picture1. Ведь тогда не будет видно заголовка формы.
|
| |
|
|
|
| vladikcomper | Дата: Среда, 18.06.2008, 14:14 | Сообщение # 2 |
 Admin
Группа: Администраторы
Сообщений: 523
Статус: Offline
| Пришлось импровизировать. Вышло следующее: Code Const LWA_COLORKEY = &H1 Const LWA_ALPHA = &H2 Const GWL_EXSTYLE = (-20) Const WS_EX_LAYERED = &H80000 Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long 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 SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Sub Form_Load() Me.BackColor = RGB(1, 1, 1) Dim Ret As Long Ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE) Ret = Ret Or WS_EX_LAYERED SetWindowLong Me.hWnd, GWL_EXSTYLE, Ret SetLayeredWindowAttributes Me.hWnd, Val(RGB(1, 1, 1)), 0, LWA_COLORKEY End Sub На работоспособность пока не проверял.
Сайт Влада. Администратор.
|
| |
|
|
|
| vladikcomper | Дата: Среда, 18.06.2008, 14:16 | Сообщение # 3 |
 Admin
Группа: Администраторы
Сообщений: 523
Статус: Offline
| Смысл такой: задаем форме цвет RGB(1,1,1) - цвет редкий, так что в контролах не встретится. А потом делаем этот цвет прозрачным. А чтобы не было видно заголовка => Form1.Border = 0 Quote (Glebonus) Да, и как реализовать в этом случае перетаскивание? Скажем за Picture1. Ведь тогда не будет видно заголовка формы. А нужно именно в форму? Зачем тогда прозрачность делать. Можно реализовать в Picture1.
Сайт Влада. Администратор.
|
| |
|
|
|
|
|
|
| vladikcomper | Дата: Четверг, 19.06.2008, 13:25 | Сообщение # 5 |
 Admin
Группа: Администраторы
Сообщений: 523
Статус: Offline
| Quote (Glebonus) нужно что то другое, за что можно перетаскивать Вот пример, как можно перетаскивать за Image: Code Private Declare Function ReleaseCapture Lib "user32" () As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Function DoDrag(TheForm As Form) If TheForm.WindowState <> vbMaximized Then ReleaseCapture SendMessage TheForm.hwnd, &HA1, 2, 0& End If End Function
Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) DoDrag Me End Sub Код для модуля формы.
Сайт Влада. Администратор.
|
| |
|
|
|
| vladikcomper | Дата: Четверг, 19.06.2008, 13:52 | Сообщение # 6 |
 Admin
Группа: Администраторы
Сообщений: 523
Статус: Offline
| Хм... Сделать фоновый рисунок формы прозрачным? Щас попробуем. Сделать то, чего не делал никто... Нет... Невозможно. Рисунок становится черным квадратом, причем непрозрачным. Для прозрачного нанесения я использовал эту функцию: Code Private Declare Function AlphaBlending Lib "msimg32" Alias "AlphaBlend" (ByVal hdcDest As Long, ByVal nXOriginDest As Long, ByVal nYOriginDest As Long, ByVal nWidthDest As Long, ByVal nHeightDest As Long, ByVal hdcSrc As Long, ByVal nXOriginSrc As Long, ByVal nYOriginSrc As Long, ByVal nWidthSrc As Long, ByVal nHeightSrc As Long, ByVal BF As Long) As Long
Private Function AlphaBlend(ByVal DestHDC As Long, ByVal XDest As Long, ByVal YDest As Long, ByVal DestWidth As Long, ByVal DestHeight As Long, ByVal srcHDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal srcWidth As Long, ByVal srcHeight As Long, ByVal AlphaSource As Long) As Long Dim lngBlend As Long lngBlend = Val("&h" & Hex(AlphaSource) & "00" & "00") AlphaBlending DestHDC, XDest, YDest, DestWidth, DestHeight, srcHDC, xSrc, ycrc, srcWidth, srcHeight, lngBlend End Function
Private Sub Form_Load() Me.AutoRedraw = True Picture1.AutoRedraw = True Picture1.AutoSize = True AlphaBlend Me.hdc, 0, 0, 100, 100, Picture1.hdc, 0, 0, 100, 100, 50 End Sub
Сайт Влада. Администратор.
|
| |
|
|
|
| Glebonus | Дата: Четверг, 19.06.2008, 18:08 | Сообщение # 7 |
 Генерал-майор
Группа: Проверенные
Сообщений: 273
Статус: Offline
| Опять и опять спасибо! Правда зачем делать фоновый рисунок формы прозрачным... Просто нужен контрол который читал бы PNG или 32-битные иконки... Только эти форматы поддерживают полупрозрачностьДобавлено (19.06.2008, 18:08) --------------------------------------------- http://www.viscomsoft.com/imageviewer.htm - идеальный вариант. Поддерживает все форматы, вплоть до psd. Однако у него тоже есть одна проблема - его фон всегда черный, и соответственно за ним не видно того что позади формы, хоть изображение в местах полупрозрачное.
|
| |
|
|
|
| vladikcomper | Дата: Пятница, 20.06.2008, 20:40 | Сообщение # 8 |
 Admin
Группа: Администраторы
Сообщений: 523
Статус: Offline
| Quote (Glebonus) Опять и опять спасибо! Не за что! Мне VB мучить не жалко! Quote (Glebonus) вплоть до psd. У меня есть модуль, как загрузить PSD (без АПИ, вроде). Я пока не тестил на прозрачные документы. Ах, да... У меня также есть модуль, загружающий PNG. Quote (Glebonus) есть одна проблема - его фон всегда черный А узнать высоту-ширину и подогнать по размерам никак нельзя? И как в контроле отображаются прозрачные PGN? Сливаются с черным фоном? А может сделать для того рисунка отдельную полупрозрачную форму (без заголовка и границ)? Или задать прозрачность отдельных цветов.
Сайт Влада. Администратор.
|
| |
|
|
|
| Glebonus | Дата: Суббота, 21.06.2008, 00:16 | Сообщение # 9 |
 Генерал-майор
Группа: Проверенные
Сообщений: 273
Статус: Offline
| Vladikcomper, помоему ты не совсем меня понял. Я пытаюсь сделать форму фонами которой будут полупрозрачные картинки. Соотвестственно видно саму форму и то, что позади ее, как в висте. причем это распределение прозрачных и непрозрачных и полупрозрачных пикселей разное, также как в висте. Поэтому нам нужен PNG или ICO 32bit, где поддерживаются полупрозрачные пиксели разной степени прозрачности. Для удобства представлю форму в виде слоев (это никакой ни компонент, просто распределяю контролы по удобству.) 1 слой. Графическая оболочка винды, рабочий стол. К форме конечно не относится, но виден сквозь форму при моем подходе. 2 слой Сама форма. Правда ее нифига не видно, благодаря твоему листингу в сообщении #2 3 слой Сами проблемные PNG картинки, составляющие фон. Ну там углы, стороны и основная часть. Картинки в некоторых местах непрозрачные, в некоторых полупрозрачные, благодаря чему и видно все, что сзади формы. 4 слой Заголовок формы с кнопками. Перетаскивается. Перетаскивание опять же благодаря твоему листингу в сообщении #5 . Кстати, не знаешь, где можно найти справочник по параметрам SendMessage? 5 слой Ну контролы. Не имеет значения. Ну вобщем все. Из всего этого складывается форма. Если мы юзаем Image то самый важный третий слой у нас не не удается - vb нивкакую не поддерживает png или нормальный ico. Если мы юзаем ImageViewer (пост #7) то между вторым и третьим слое вклинивается еще один слой - тот самый черный фон имейджвьювера. Должна же быть какая-то альтернатива... А теперь отвечаю на вопросы Quote (vladikcomper) А узнать высоту-ширину и подогнать по размерам никак нельзя? да запросто. У этого контрола для этого есть даже встроенный метод. Quote (vladikcomper) И как в контроле отображаются прозрачные PGN? Сливаются с черным фоном? Да... В том то и сложность... И за ними ничего не видно Quote (vladikcomper) А может сделать для того рисунка отдельную полупрозрачную форму (без заголовка и границ)? Тогда получится слишком много форм. Да и прозрачность у картинки не равномерная.
|
| |
|
|
|
| vladikcomper | Дата: Воскресенье, 22.06.2008, 13:41 | Сообщение # 10 |
 Admin
Группа: Администраторы
Сообщений: 523
Статус: Offline
| Quote (Glebonus) где можно найти справочник по параметрам SendMessage? У меня вроде... Code Функция SendMessage
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long
SendMessage посылает сообщение окну. Функция вызывает оконную процедуру для обработки сообщения. Эта функция не возвращается, пока окно не завершит обработку сообщения
Возвращаемое значение Функция возвращает значение сообщения
Параметры hWnd Дескриптор окна,в которое будет послано сообщение Msg Идентификатор сообщения wParam Дополнительные определенные данные сообщения lParam Дополнительные определенные данные сообщения
Пример
' Запускаем хранитель экрана SendMessage hwnd, WM_SYSCOMMAND, SC_SCREENSAVE, ByVal 0&
Сайт Влада. Администратор.
|
| |
|
|
|
| vladikcomper | Дата: Воскресенье, 22.06.2008, 14:22 | Сообщение # 11 |
 Admin
Группа: Администраторы
Сообщений: 523
Статус: Offline
| Quote (Glebonus) Должна же быть какая-то альтернатива... Не знаю-не знаю... Идея прозрачного PNG очень сложная для реализации, кажется я не могу подобрать альтернативу, зато могу попробовать сделать фоновый рисунок формы полу-прозрачным (в сплошь).
Сайт Влада. Администратор.
|
| |
|
|
|
| Glebonus | Дата: Понедельник, 23.06.2008, 22:58 | Сообщение # 12 |
 Генерал-майор
Группа: Проверенные
Сообщений: 273
Статус: Offline
| в Quote (vladikcomper) У меня вроде... smile я имел ввиду по существующим. А параметры я и так знаю. Даже если бы не знал 1мин. в гугле и ответ найден. А вот параметры которые можно передавать не находятся. Quote (vladikcomper) в сплошь
|
| |
|
|
|
| vladikcomper | Дата: Понедельник, 07.07.2008, 18:32 | Сообщение # 13 |
 Admin
Группа: Администраторы
Сообщений: 523
Статус: Offline
| Quote (Glebonus) А параметры я и так знаю Может, попробовать поискать на msdn.microsoft.com? Боюсь, что эту идею реализовать невозможно.
Сайт Влада. Администратор.
|
| |
|
|
|
| Algorithm | Дата: Четверг, 06.10.2011, 17:08 | Сообщение # 14 |
|
Рядовой
Группа: Пользователи
Сообщений: 1
Статус: Offline
| Влад, здравствуйте! В теме шла речь о прозрачности формы и было упоминание контрола PictureBox - не могли бы подсказать программный код реализующий прозрачнось этого контрола на VB6. Буду очень признателен и хочется заранее поблагодарить за помощь в осуществлении подобного с контролом!
|
| |
|
|