WM_CTLCOLOREDIT

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

WM_CTLCOLOREDIT

Сообщение Naked » 20.10.2005 (Чт) 16:18

нужно изменить свет фона Edit созданного спомощью CreateWindow
подскажите

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.10.2005 (Чт) 16:34

Что именно подсказать? Название топика и есть ответ на твой вопрос.
Изображение

Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

Сообщение Naked » 20.10.2005 (Чт) 16:38

опять вопрос не так задал

покажите пример работы с WM_CTLCOLOREDIT, не могу разобраться

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.10.2005 (Чт) 16:48

Код: Выделить всё
SetBkColor(wParam, NewColor)

Этого достаточно.
Изображение

Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

Сообщение Naked » 20.10.2005 (Чт) 17:10

значит не достаточно
цвет не изменяется, остался таким же как и был

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.10.2005 (Чт) 17:25

Телепатически не вышло :-(
Давай код.
Изображение

Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

Сообщение Naked » 21.10.2005 (Пт) 1:28

Dim EditWndProc As Long
Private Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Const WM_CTLCOLOREDIT = &H133

Sub HookEdit(hWnd As Long)
EditWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf EditWindowProc)
End Sub

Sub UnHookEdit(hWnd As Long)
Call SetWindowLong(hWnd, GWL_WNDPROC, EditWndProc)
End Sub

Public Function EditWindowProc(ByVal hWnd As Long, ByVal message As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case message

Case WM_CTLCOLOREDIT
Call SetBkColor(wParam, 0)
EditWindowProc = CallWindowProc(EditWndProc, hWnd, message, wParam, lParam)

Case Else
EditWindowProc = CallWindowProc(EditWndProc, hWnd, message, wParam, lParam)
End Select
End Function

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.10.2005 (Пт) 1:41

If an application processes this message, it must return the handle of a brush. The system uses the brush to paint the background of the edit control.

The system does not automatically destroy the returned brush. It is the application's responsibility to destroy the brush when it is no longer needed.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

Сообщение Naked » 21.10.2005 (Пт) 3:03

все, проблема решена
всем спасибо за внимание

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.10.2005 (Пт) 6:34

GSerg писал(а):If an application processes this message, it must return the handle of a brush. The system uses the brush to paint the background of the edit control.

The system does not automatically destroy the returned brush. It is the application's responsibility to destroy the brush when it is no longer needed.

Это, кстати, опционально.
Можно вернуть 0, и вызвать SetBkColor самому.
(Так можно сэкономить на создании браша)
Проблема у Naked была в том, что он вызывал старый обработчик после своего. Если закомментировать первый CallWindowProc, то Edit, действительно, перекрашивается.

Ещё Naked похоже, сабклассил не то окно: сам Edit, хотя надо было родителя.
Изображение

Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

Сообщение Naked » 21.10.2005 (Пт) 6:55

tyomitch в этом и был мой косяк, не то засабклассил


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 139

    TopList