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

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

13.08.2014, 15:59. Показов 4210. Ответов 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
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 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
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
31.08.2014, 15:57
Ну вот ты пишешь, что первая функция SetWindowLong
Цитата Сообщение от The trick Посмотреть сообщение
' Устанавливаем прозрачный фон для текстбокса
Тогда, что делает код сабклассинга. Нет, я по комментариям конечно понимаю все, что происходит,
но почему вот той первой функции (строка 43) получается недостаточно?

Добавлено через 46 минут
Как сделать тоже самое для Label ?
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru