Подскажите, пожалуйста, как мне полностью заблокировать обычный Text объект на форме? Таким образом, чтобы при кликах не выделялся текст, не появлялось контекстное меню, одним словом, - Text превратить в обычный Label. Сам Label применить не могу по определенным причинам – долго объяснять, поэтому пришлось использовать Text, убрать все бордеры и белый фон превратить в цвет формы, ну и т.д. Осталась проблема: убрать все реакции на события – все! Text должен просто выводить информацию – больше не требуется. Как мне это сделать???
Такие свойства, как...
Text1.Enabled = False
Не подходит, поскольку цвет самого текста становится серым и трудночитаемым.
Text1.Locked = True
Исключает ввод теста, но выделения и контекстное меню все равно остаются.
Пробовал использовать сабклассинг...
in Form...
- Код: Выделить всё
Private Sub Form_Load()
Text1.Locked = True
thWnd = Text1.hWnd
OldWndProc = SetWindowLong(thWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong thWnd, GWL_WNDPROC, OldWndProc
End Sub
in Module...
- Код: Выделить всё
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = -4
'Public Const WM_ACTIVATE = &H6
Public thWnd As Long
Public OldWndProc As Long
Public Const WM_MOUSEACTIVATE = &H21
Function WindowProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
WindowProc = CallWindowProc(OldWndProc, hWnd, Msg, wParam, lParam)
If Msg = WM_MOUSEACTIVATE Then
Debug.Print Msg
End If
End Function
Это работает, но меню и выделения все равно происходят. Как быть??? Может есть более простые пути???