Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426

Полупрозрачность BackColor-a у Picturebox

14.11.2024, 09:37. Показов 1925. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В проге, на фоне Picturebox-a с загруженой картинкой, вслед за курсором ходит инфо-окно с координатами курсора и подобным. Окно полупрозрачное и цветное, оба параметра регулируются пользователем в любой момент, для вывода чисел используются лейблы с BackStyle=0, цвет текста тоже ессно регулируется через ForeColor. Сейчас у меня это реализовано с использованием формы без рамки в качестве инфо-окна и SetLayeredWindowAttributes. Но мне кажется, что использование формы для этого - порождение моего сумрачного ламерского ума. Можно ли использовать для этого Picturebox или что-нибудь ещё? Третий день прочёсываю инет, но не могу найти что-либо подходящее, есть куча примеров и контролов с прозрачностью загруженой картинки, но мне нужен просто цвет полупрозрачный. У меня есть модуль от The Trick-a, который позволяет создавать прекрасные цветные полупрозрачные прямоугольники, но, во-первых, мне кажется это избыточным для одного маленького окошечка, а во-вторых, как я понимаю, эти прямоугольники не могут служить контейнером для лейблов.
Да, и ещё - текст на лейблах тоже становится прозрачным вместе с формой, это плохо для читабельности, возможна ли раздельная регулировка прозрачности формы и текста?
Изображения
 
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2024, 09:37
Ответы с готовыми решениями:

BackColor PictureBox
Добрый день! Имеется форма с изображением. При создании pictureBox не ней, pictureBox принимает BackColor как цвет, а не картинку формы,...

IE 6,7 и полупрозрачность
Здравствуйте. Очень интересует вопрос как на самом деле ведут себя вот эти свойства css в ИЕ 6 и 7: opacity: 0.5; filter: progid:...

Полупрозрачность окон
Полазив пол часа по инету не нашел ответа на свой вопрос. У меня стоит стандартная Win7 , я хочу сделать чтобы окна (верхняя их часть) были...

26
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
14.11.2024, 09:50  [ТС]
Или хотя бы чтобы цвет текста был непрозрачным, без регулировки?
0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 465
14.11.2024, 10:17
Правильнее будет не искать контролы, которые могут служить контейнером для лейблов, а сделать функцию-грабилку лейбла невидимого пикчербокса, в который с помощью Print вписывается нужный текст. А полученное изображение выводить с использованием хоть той же AlphaBlend() функции.
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
14.11.2024, 11:58  [ТС]
То есть правильно ли я понимаю: операции изменения цвета фона и текста и вывод самого текста Print-ом делаются на невидимый пикчербокс, а затем это с помощью AlphaBlend переносится на уже видимый пикчербокс, который ходит за курсором, да?
0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 465
14.11.2024, 12:06
Верно. Только придётся сформировать альфаканал в данных напечатанной картинки.
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
14.11.2024, 13:41  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
придётся сформировать альфаканал в данных напечатанной картинки
Э-э-э-э... сорри, но это не понял. Это которая картинка "напечатанная?"

Да и это не совсем понятно:
Цитата Сообщение от Mikle Quits Посмотреть сообщение
сформировать альфаканал в данных
Добавлено через 1 час 9 минут
Я тут почитал англоязычные форумы - если я правильно перевожу, то у меня создалось такое понимание, что в предложенном вами методе пикчербокс, который я буду двигать над пикчербоксом-подложкой (фоном) не будет реально прозрачным, то есть сквозь него не будет виден нижний пикчербокс. Или я неправильно понимаю? Щас буду пробовать
0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 465
14.11.2024, 14:33
Цитата Сообщение от giaber Посмотреть сообщение
пикчербокс, который я буду двигать над пикчербоксом-подложкой (фоном) не будет реально прозрачным
Я не предлагаю двигать пикчербокс, он вообще невидимый, он используется для того, чтобы в нём сформировать картинку текста и перенести её с прозрачностью на нужный пикчербокс.
Вообще, на уровне WinAPI это довольно муторно всё, я бы советовал такие проекты делать на SR2D, только это уже надо будет забыть про двигающиеся пикчербоксы и т. п., всё делается спрайтами. Там и "грабилка" картинок встроенная уже имеется.
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
14.11.2024, 15:22  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Я не предлагаю двигать пикчербокс, он вообще невидимый, он используется для того, чтобы в нём сформировать картинку текста и перенести её с прозрачностью на нужный пикчербокс.
Да, но, как я описывал в стартовом топике, тот пикчербокс (то, что у меня сейчас форма без рамки, голубая на скриншоте) на который мы перенесём, должен двигаться и быть полупрозрачным, чтоб просвечивало то, что под ним.

Ваш SR2D ещё лет 4-5 назад я скачал по вашему совету и вы даже, по моей просьбе, прислали пример как делать то, что мне было непонятно - но мне всё равно осталось непонятным, несмотря на ваш пример, и именно тогда я решил не дёргать вас больше и переключился на этот вариант с SetLayeredWindowAttributes формой.
Мне, конечно, очень нравится вариант с SR2D, но давайте определимся - с SR2D я смогу иметь то, что на скрине - прозрачный спрайт, который может двигаться за мышкой, на котором постоянно отображаются координаты курсора, и прозрачностью и цветом спрайта может управлять конечный пользователь и, пусть не прозрачность текста, но хотя бы цвет текста тоже можно менять?
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
14.11.2024, 16:02
Без SR2D это скорее всего можно было бы осуществить только через GDI+ API. Я нашёл полезный класс для этого на иностранном форуме здесь: https://www.vbforums.com/showt... -revisited
Скачал я его посмотрел интересно там, но тяжело для обычного понимания простых людей. Хотя думаю там есть нужный код для полупрозрачностей.
0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 465
14.11.2024, 16:04
Цитата Сообщение от giaber Посмотреть сообщение
я смогу иметь то, что на скрине - прозрачный спрайт, который может двигаться за мышкой, на котором постоянно отображаются координаты курсора, и прозрачностью и цветом спрайта может управлять конечный пользователь и, черт с ней с прозрачностью текста, хотя бы цвет текста тоже можно менять?
Легко.
При желании можно и с прозрачностью текста.
Вложения
Тип файла: zip Alpha.zip (77.8 Кб, 9 просмотров)
1
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
14.11.2024, 16:38  [ТС]
Mikle Quits я не пытался ещё понять ваш код, просто запустил - конечно нравится! но применительно конкретно к моему варианту надо там поизменять. Я буду долго с этим разбираться - не затруднит ли вас сделать соответствующие изменения в проекте который я обратно вам прикрепил здесь. Там имитация моей конкретной ситуации - то есть фоном служит пикчербокс с загруженой картинкой и есть разные контролы. После этого мне и разбираться будет легче. Буду ну просто ОЧЕНЬ вам благодарен!
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
14.11.2024, 16:39  [ТС]
Забыл прикрепить!
Вложения
Тип файла: 7z Alpha Mikle Quits.7z (700.4 Кб, 10 просмотров)
0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 465
14.11.2024, 19:37
Завтра с утра гляну.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
14.11.2024, 21:21
C 8-ки уже поддерживаются дочерние слоеные окна, можно применить SetLayeredWindowAttributes к ним. А вообще для этого тултип же есть, перехватывай его и делай полупрозрачным.
0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 465
15.11.2024, 09:20
Цитата Сообщение от giaber Посмотреть сообщение
фоном служит пикчербокс с загруженой картинкой
Загруженную через IDE картинку убираем, грузим её так же, как я грузил свой фон:
Visual Basic
1
SprPic.LoadFromFile "Base 1.bmp"
Перенаправляем вывод SR2D с формы на пикчербокс:
Visual Basic
1
SprBuf.PaintToDevice Pic1.hDC
Подбираем подходящий цвет для инфо-окна:
Visual Basic
1
2
  SprText.ClearBuffer ARGB(96, 160, 160, 255)  'Прозрачность и цвет фона
  Spr2.ClearBuffer ARGB(0, 16, 48, 32)         'Цвет текста
Весь код целиком:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Option Explicit
 
Dim SprBuf As New SR2D_Sprite
Dim SprPic As New SR2D_Sprite
Dim SprText As New SR2D_Sprite
Dim Spr1 As New SR2D_Sprite
Dim Spr2 As New SR2D_Sprite
Dim Mx As Long, My As Long
 
Private Sub Form_Load()
  SprText.Init picIn.ScaleWidth, picIn.ScaleHeight
  Spr2.Init picIn.ScaleWidth, picIn.ScaleHeight
  SprBuf.Init ScaleWidth, ScaleHeight
  SprPic.LoadFromFile "Base 1.bmp"
 
  Render
End Sub
 
Private Sub Render()
  SprBuf.Draw SprPic, 0, 0
  SprBuf.Draw SprText, Mx, My, OpAlphaBlend
  SprBuf.PaintToDevice Pic1.hDC
End Sub
 
Private Sub Pic1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Mx = X
  My = Y
 
  picIn.Cls
  picIn.CurrentX = 12
  picIn.CurrentY = 4
  picIn.Print "X:"; Mx;
  picIn.CurrentX = 12
  picIn.CurrentY = 24
  picIn.Print "Y:"; My;
 
  Spr1.LoadFromIPicture picIn.Image, hDC
  SprText.ClearBuffer ARGB(96, 160, 160, 255)  'Прозрачность и цвет фона
  Spr2.ClearBuffer ARGB(0, 16, 48, 32)         'Цвет текста
  Spr2.MoveByte Spr1, 0, 0, ChBlue, ChAlpha
  SprText.Draw Spr2, 0, 0, OpAlphaBlend
 
  Render
End Sub
 
Private Sub Pic1_Paint()
  SprBuf.PaintToDevice Pic1.hDC
End Sub
1
7 / 7 / 0
Регистрация: 10.07.2015
Сообщений: 69
15.11.2024, 14:59
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Private Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function OffsetRect Lib "user32" (lpRect As RECT, ByVal X As Long, ByVal Y As Long) As Long
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Private Const DT_SINGLELINE = &H20
Private Const DT_CENTER = &H1
Private Const DT_VCENTER = &H4

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long

Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Const SW_SHOW = 5
Private Const SW_HIDE = 0

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function AlphaBlend Lib "msimg32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal widthSrc As Long, ByVal heightSrc As Long, ByVal blendFunct As Long) As Boolean

Dim m_hMemDC As Long
Dim m_hMemBmp As Long, m_hMemBmpPrev As Long
Dim m_rcControl As RECT

Private Sub UserControl_Initialize()
UserControl.AutoRedraw = True
UserControl.BackColor = vbRed
m_hMemDC = CreateCompatibleDC(UserControl.hdc)
End Sub

Private Sub UserControl_Terminate()
If m_hMemBmp <> 0 Then
DeleteObject SelectObject(m_hMemDC, m_hMemBmpPrev)
End If
DeleteDC m_hMemDC
End Sub

Public Sub Translucence()
Dim hdc As Long
Dim tPt As POINTAPI

'获得控件当前位置和大小
ClientToScreen UserControl.hwnd, tPt
ScreenToClient UserControl.ContainerHwnd, tPt
Call GetClientRect(UserControl.hwnd, m_rcControl)
OffsetRect m_rcControl, tPt.X, tPt.Y
'创建一幅内存位图
If m_hMemBmp <> 0 Then
DeleteObject (SelectObject(m_hMemDC, m_hMemBmpPrev))
End If
m_hMemBmp = CreateCompatibleBitmap(UserControl.hdc, m_rcControl.Right, m_rcControl.Bottom)
m_hMemBmpPrev = SelectObject(m_hMemDC, m_hMemBmp)

'隐藏控件
ShowWindow UserControl.hwnd, SW_HIDE
DoEvents

'保存控件容器的图像到内存位图中
Dim hDesktopDC As Long
hDesktopDC = GetDC(UserControl.hwnd)
BitBlt m_hMemDC, 0, 0, m_rcControl.Right, m_rcControl.Bottom, hDesktopDC, 0, 0, vbSrcCopy
ReleaseDC 0, hDesktopDC

'通过alpha效果进行半透明渲染
UserControl.AutoRedraw = True
AlphaBlend m_hMemDC, 0, 0, m_rcControl.Right, m_rcControl.Bottom, UserControl.hdc, 0, 0, m_rcControl.Right, m_rcControl.Bottom, 5242880
UserControl.AutoRedraw = False

'显示控件
ShowWindow UserControl.hwnd, SW_SHOW

'将渲染后的结果复制到控件中
BitBlt UserControl.hdc, 0, 0, m_rcControl.Right, m_rcControl.Bottom, m_hMemDC, 0, 0, vbSrcCopy
End Sub

Private Sub UserControl_Paint()
BitBlt UserControl.hdc, 0, 0, m_rcControl.Right, m_rcControl.Bottom, m_hMemDC, 0, 0, vbSrcCopy
End Sub
0
sleep
 Аватар для I can
4934 / 4598 / 841
Регистрация: 13.04.2015
Сообщений: 9,770
15.11.2024, 15:07
Цитата Сообщение от xxdoc Посмотреть сообщение
'保存控件容器的图像到内存位图中
У китайцев код передрал?

Добавлено через 56 секунд
Сохраните изображение контейнера управления в растровое изображение памяти.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
15.11.2024, 15:31
Цитата Сообщение от I can Посмотреть сообщение
У китайцев код передрал?
А может он сам китаец?
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
16.11.2024, 03:14  [ТС]
To The trick
Вы когда-то выкладывали TransparentControl.zip (424.6 KB)
https://www.vbforums.com/showt... ost4845201

(Last edited by The trick; Mar 5th, 2015 ! Боже! Как стремительно бежит время!)

Сейчас ссылка не рабочая.
1. Этот контрол не может быть решением моего вопроса?
2. Если да, то не могли бы вы выложить его здесь?
0
1386 / 842 / 91
Регистрация: 08.02.2017
Сообщений: 3,588
Записей в блоге: 1
16.11.2024, 04:21
giaber, кстати не пробовали вариант xxdoc,
Цитата Сообщение от xxdoc Посмотреть сообщение
'通过alpha效果进行半透明渲染
Перевод: Полупрозрачный рендеринг с альфа-эффектом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.11.2024, 04:21
Помогаю со студенческими работами здесь

Полупрозрачность в RadioButton
Здравствуйте! Мне необходимо каким-то образом сделать Radiobutton полупрозрачным в Delphi 7. P.S. Заранее спасибо.

Полупрозрачность в WinApi
Можно но ли как-то реализовать полупрозрачность в winapi.

Полупрозрачность окон
В Windows 7 рамки папок и браузера полупрозрачные (см.скрин). Это красиво, но у меня комп не справляется, видимо. Периодически...

Полупрозрачность контрола
Вкратце, есть кнопки на фоне и есть кнопка меню, при нажатии на которую сбоку выдвигается панель. Мне нужно что-бы она была немного...

Полупрозрачность кнопок
Здравствуйте уважаемые, хочу спросить у вас совета... Есть массив, верхний блок который готовится под кнопки среднего размера. Вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru