|
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
|
|
Полупрозрачность BackColor-a у Picturebox14.11.2024, 09:37. Показов 1925. Ответов 26
Метки нет (Все метки)
В проге, на фоне Picturebox-a с загруженой картинкой, вслед за курсором ходит инфо-окно с координатами курсора и подобным. Окно полупрозрачное и цветное, оба параметра регулируются пользователем в любой момент, для вывода чисел используются лейблы с BackStyle=0, цвет текста тоже ессно регулируется через ForeColor. Сейчас у меня это реализовано с использованием формы без рамки в качестве инфо-окна и SetLayeredWindowAttributes. Но мне кажется, что использование формы для этого - порождение моего сумрачного ламерского ума. Можно ли использовать для этого Picturebox или что-нибудь ещё? Третий день прочёсываю инет, но не могу найти что-либо подходящее, есть куча примеров и контролов с прозрачностью загруженой картинки, но мне нужен просто цвет полупрозрачный. У меня есть модуль от The Trick-a, который позволяет создавать прекрасные цветные полупрозрачные прямоугольники, но, во-первых, мне кажется это избыточным для одного маленького окошечка, а во-вторых, как я понимаю, эти прямоугольники не могут служить контейнером для лейблов.
Да, и ещё - текст на лейблах тоже становится прозрачным вместе с формой, это плохо для читабельности, возможна ли раздельная регулировка прозрачности формы и текста?
0
|
|
| 14.11.2024, 09:37 | |
|
Ответы с готовыми решениями:
26
BackColor PictureBox
Полупрозрачность окон |
|
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
|
|
| 14.11.2024, 09:50 [ТС] | |
|
Или хотя бы чтобы цвет текста был непрозрачным, без регулировки?
0
|
|
|
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
|
|
|
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 [ТС] | |||
|
Да и это не совсем понятно: Я тут почитал англоязычные форумы - если я правильно перевожу, то у меня создалось такое понимание, что в предложенном вами методе пикчербокс, который я буду двигать над пикчербоксом-подложкой (фоном) не будет реально прозрачным, то есть сквозь него не будет виден нижний пикчербокс. Или я неправильно понимаю? Щас буду пробовать
0
|
|||
|
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 465
|
||
| 14.11.2024, 14:33 | ||
|
Вообще, на уровне WinAPI это довольно муторно всё, я бы советовал такие проекты делать на SR2D, только это уже надо будет забыть про двигающиеся пикчербоксы и т. п., всё делается спрайтами. Там и "грабилка" картинок встроенная уже имеется.
0
|
||
|
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
|
||
| 14.11.2024, 15:22 [ТС] | ||
|
Ваш SR2D ещё лет 4-5 назад я скачал по вашему совету и вы даже, по моей просьбе, прислали пример как делать то, что мне было непонятно - но мне всё равно осталось непонятным, несмотря на ваш пример, и именно тогда я решил не дёргать вас больше и переключился на этот вариант с SetLayeredWindowAttributes формой. Мне, конечно, очень нравится вариант с SR2D, но давайте определимся - с SR2D я смогу иметь то, что на скрине - прозрачный спрайт, который может двигаться за мышкой, на котором постоянно отображаются координаты курсора, и прозрачностью и цветом спрайта может управлять конечный пользователь и, пусть не прозрачность текста, но хотя бы цвет текста тоже можно менять?
0
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 14.11.2024, 16:02 | |
|
Без SR2D это скорее всего можно было бы осуществить только через GDI+ API. Я нашёл полезный класс для этого на иностранном форуме здесь: https://www.vbforums.com/showt... -revisited
Скачал я его посмотрел интересно там, но тяжело для обычного понимания простых людей. Хотя думаю там есть нужный код для полупрозрачностей.
0
|
|
|
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 465
|
|
| 14.11.2024, 16:04 | |
|
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 [ТС] | |
|
Забыл прикрепить!
0
|
|
|
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 465
|
|
| 14.11.2024, 19:37 | |
|
Завтра с утра гляну.
0
|
|
|
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 465
|
||||||||||||||||||||||
| 15.11.2024, 09:20 | ||||||||||||||||||||||
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
4934 / 4598 / 841
Регистрация: 13.04.2015
Сообщений: 9,770
|
||
| 15.11.2024, 15:07 | ||
![]() Добавлено через 56 секунд Сохраните изображение контейнера управления в растровое изображение памяти.
0
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 15.11.2024, 15:31 | |
|
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
|
|
| 16.11.2024, 04:21 | ||
|
giaber, кстати не пробовали вариант xxdoc,
0
|
||
| 16.11.2024, 04:21 | |
|
Помогаю со студенческими работами здесь
20
Полупрозрачность в RadioButton Полупрозрачность в WinApi Полупрозрачность окон Полупрозрачность контрола Полупрозрачность кнопок Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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. Пошагово создадим проект для загрузки изображения. . .
|