Create TextBox with dithered background

Create TextBox with dithered background

If your video display has 256 colors or less and you assign a dithered color to the BackColor property of a TextBox control, you’ll find that the background color under the text inside the TextBox is displayed in a different (solid) color.

To work around this issue, you must trap the WM_CTLCOLOREDIT message, that the control sends to its parent form when its background is about to be redrawn, and you must explicitly set a transparent background for the control. Here’s the code that does the job:

' REQUIRES THE MSGHOOK.DLL COMPONENTPrivate Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, _    ByVal nBkMode As Long) As LongConst WM_CTLCOLOREDIT = &H133Const TRANSPARENT = 1Dim WithEvents FormHook As MsgHookDim TextHWnd As LongPrivate Sub Form_Load()    Set FormHook = New MsgHook    FormHook.StartSubclass Me    TextHWnd = Text1.hWndEnd SubPrivate Sub FormHook_BeforeMessage(uMsg As Long, wParam As Long, lParam As Long, _    retValue As Long, Cancel As Boolean)    If uMsg = WM_CTLCOLOREDIT And lParam = TextHWnd Then       SetBkMode wParam, TRANSPARENT    End IfEnd Sub


Share the Post: