Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
3 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 248

Прозрачный textbox, сквозь который будет видно фон формы

13.08.2014, 15:59. Показов 3991. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня на форме должен быть textbox, но так как форма имеет задний фон в виде картинки то нужен прозрачный textbox. Как его сделать прозрачным?

Может есть способ картинку на textbox налепить, или сделать подобие textbox самому из других элементов?

P.S.
Пробовал подключить FM20.dll, но не подключается даже после регистрации.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.08.2014, 15:59
Ответы с готовыми решениями:

Создать прозрачный материал, за которым не будет видно объектов, но будет виден скайбокс
Как создать прозрачный материал за которым не будет видно объектов, но будет виден скайбокс и прочие штуки с камеры.

Прозрачный фон в TextBox
Как сделать, чтобы фон текстбокса был прозрачным? просто делаю на картинке и не хотелось белого или какого-нибудь другого прямоугольника.

Прозрачный фон в динамически создаваемом textbox-е
подскажите как сделать чтоб в динамически создаваемом текст боксе был прозрачный фон.

3
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
13.08.2014, 18:33
Лучший ответ Сообщение было отмечено MorfixProton как решение

Решение

Нужно обрабатывать WM_CTLCOLOREDIT и возвращать прозрачную кисть и устанавливать прозрачный цвет фона. Но этого не достаточно, т.к. в таком случае текст не будет стираться. Можно схитрить, как в моем примере:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Option Explicit
 
Private Type RECT
    iLeft As Long
    iTop As Long
    iRight As Long
    iBottom As Long
End Type
 
Private Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As Long
Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode 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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function RedrawWindow Lib "user32" (ByVal hwnd As Long, lprcUpdate As Any, ByVal hrgnUpdate As Long, ByVal fuRedraw As Long) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As Any) As Long
Private Declare Function MapWindowPoints Lib "user32" (ByVal hwndFrom As Long, ByVal hwndTo As Long, lppt As Any, ByVal cPoints As Long) As Long
Private Declare Function ExcludeClipRect Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
 
Private Const GWL_EXSTYLE       As Long = (-20)
Private Const WS_EX_TRANSPARENT As Long = &H20&
Private Const NULL_BRUSH        As Long = 5
Private Const TRANSPARENT       As Long = 1
Private Const WM_NCHITTEST      As Long = &H84
Private Const WM_CTLCOLOREDIT   As Long = &H133
Private Const HTCAPTION         As Long = 2
Private Const RDW_INVALIDATE    As Long = &H1
Private Const RDW_UPDATENOW     As Long = &H100&
Private Const RDW_ALLCHILDREN   As Long = &H80
 
Dim WithEvents mSubclass    As clsTrickSubclass
Dim mIsCancel   As Boolean
 
Private Sub cmdCancel_Click()
    txtSrc.Text = vbNullString
    Unload Me
End Sub
Private Sub cmdOK_Click()
    Unload Me
End Sub
 
Private Sub Form_Load()
    ' Устанавливаем прозрачный фон для текстбокса
    SetWindowLong txtSrc.hwnd, GWL_EXSTYLE, GetWindowLong(txtSrc.hwnd, GWL_EXSTYLE) Or WS_EX_TRANSPARENT
    Set mSubclass = New clsTrickSubclass
    ' Сабклассинг
    mSubclass.Hook Me.hwnd
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
    mSubclass.UnHook
End Sub
 
Private Sub mSubclass_WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long, Ret As Long, DefCall As Boolean)
    
    Select Case Msg
    Case WM_CTLCOLOREDIT
        Static RC       As RECT     ' Прямоугольник окна текстбокса
        Static isRedraw As Boolean  ' Флаг перерисовки родителя
        
        ' Если флаг перерисовки родителя не установлен, тогда перерисовываем фон под собой
        If Not isRedraw Then
            ' Проецируем координаты рабочей области на родителя
            GetClientRect lParam, RC
            MapWindowPoints lParam, hwnd, RC, 2
            ' Рисуем фон родителя под текстбоксом
            isRedraw = True
            RedrawWindow hwnd, RC, 0, RDW_INVALIDATE Or RDW_UPDATENOW Or RDW_ALLCHILDREN
            isRedraw = False
            ' Исключаем всю область, т.к. предыдущий вызов уже отрисовал текст
            ExcludeClipRect wParam, 0, 0, RC.iRight, RC.iBottom
        End If
        
        ' Установка прозрачной кисти и типа фона текста
        SetBkMode wParam, TRANSPARENT
        Ret = GetStockObject(NULL_BRUSH)
        
    Case WM_NCHITTEST: Ret = HTCAPTION  ' Перетаскивание за любое место
    Case Else: DefCall = True           ' Все остальное - по умолчанию
    End Select
 
End Sub
Миниатюры
Прозрачный textbox, сквозь который будет видно фон формы  
Вложения
Тип файла: rar TransparentTextbox.rar (22.4 Кб, 101 просмотров)
7
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
31.08.2014, 15:57
Ну вот ты пишешь, что первая функция SetWindowLong
Цитата Сообщение от The trick Посмотреть сообщение
' Устанавливаем прозрачный фон для текстбокса
Тогда, что делает код сабклассинга. Нет, я по комментариям конечно понимаю все, что происходит,
но почему вот той первой функции (строка 43) получается недостаточно?

Добавлено через 46 минут
Как сделать тоже самое для Label ?
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
31.08.2014, 19:07
Цитата Сообщение от Dragokas Посмотреть сообщение
Как сделать тоже самое для Label ?
Label уже имеет свойство BackStyle - Transparent.
Цитата Сообщение от Dragokas Посмотреть сообщение
но почему вот той первой функции (строка 43) получается недостаточно?
Эта строка равносильна установке ClipControls = False, но только для данного текстбокса; что дает возможность сначала отрисоваться родителю на месте расположения текстбокса. Без этого фон не будет отрисован, т.к. родитель, в данном случае форма, будет отсекать все дочерние контролы и ничего не рисовать там.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.08.2014, 19:07
Помогаю со студенческими работами здесь

TreeView и TextBox - сделать прозрачный фон
Можно ли сделать прозрачный фон у этих элементов. И если можно, покажите как это сделать на примере. Если поставить фон transparent...

Прозрачный фон Формы
Здравствуйте. Сделал прозрачный фон, но могу кликать сквозь его. Как сделать так, чтобы фон был прозрачным, но не кликалось мимо фона

Как сделать прозрачность, чтобы сквозь PictureBox было видно видно другие объекты?
Я делаю несколько PictureBox с Gif-анимацией (Робот и снаряд). На заднем цвете стоит transperent, но пролетая над роботом снаряд оставляет...

Как сделать прозрачный фон у формы?
Собственно вопрос выше.. ах да, создал форму в конструкторе, на фон повесил png с прозрачным фоном, однако, фон самой формы я никак не...

PictureBox вне границ формы или как сделать прозрачный фон
Здраствуйте, подскажите пожалуйста, как можно сделать изображение больше размера основной формы + чтобы имг оставался поверх формы и был...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru