Jag har en sträng i en Textbox. När man klickar i Textboxen Jag känner inte till något lätt sätt att göra det på. Men det går att göra med Subclassing. Vilket har nackdelen att det inte låter dig stega igenom dit projekt. För då kommer ett fel upstå och VB kommer att stängas. Om man inte kapslar koden i en DLL. Om du absolut måste göra det så kan du använda följande kod:Förhindra mus-klick händelse i en Textbox
ska klickhändelsen ignoreras och insättningspunkten ska stanna
i sitt ursprungliga läge.
Fråga 1: hur ser koden ut som ignorerar denna klickhändelse ?
Fråga 2: har du en bra länk på Internet med sådana koder ?
GunnarSv: Förhindra mus-klick händelse i en Textbox
(Jag hindrar bara händelser för vänsterklick. Om du vill hindra alla typer och klick, lägger du bara till WM_MBUTTONDBLCLK, WM_MBUTTONDOWN, WM_MBUTTONUP, WM_RBUTTONDBLCLK, WM_RBUTTONDOWN, WM_RBUTTONUP på första case raden.)
'Module1
Option Explicit
Private Const GWL_WNDPROC As Long = (-4)
Private Const WM_DESTROY = &H2
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_MBUTTONDBLCLK = &H209
Private Const WM_MBUTTONDOWN = &H207
Private Const WM_MBUTTONUP = &H208
Private Const WM_RBUTTONDBLCLK = &H206
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Private Const PropertyName As String = "PrevWndFunc"
Private Declare Function GetProp Lib "user32" Alias "GetPropA" (ByVal hWnd As Long, ByVal lpString As String) As Long
Private Declare Function SetProp Lib "user32" Alias "SetPropA" (ByVal hWnd As Long, ByVal lpString As String, ByVal hData As Long) As Long
Private Declare Function RemoveProp Lib "user32" Alias "RemovePropA" (ByVal hWnd As Long, ByVal lpString As String) 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 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 Function DisableMouseSelect(TextBox As TextBox) As Boolean
Dim lReturn As Long
lReturn = GetProp(TextBox.hWnd, PropertyName)
If lReturn Then
DisableMouseSelect = False
Else
lReturn = SetWindowLong(TextBox.hWnd, GWL_WNDPROC, AddressOf WindowProc)
If lReturn Then
SetProp TextBox.hWnd, PropertyName, lReturn
DisableMouseSelect = True
Else
DisableMouseSelect = False
End If
End If
End Function
Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim lReturn As Long
Dim lpPrevWndFunc As Long
On Error GoTo WindowProc_Err
lpPrevWndFunc = GetProp(hWnd, PropertyName)
Select Case uMsg
Case WM_LBUTTONDBLCLK, WM_LBUTTONDOWN, WM_LBUTTONUP
Case WM_DESTROY
SetWindowLong hWnd, GWL_WNDPROC, lpPrevWndFunc
RemoveProp hWnd, PropertyName
WindowProc = CallWindowProc(lpPrevWndFunc, hWnd, uMsg, wParam, lParam)
Case Else
WindowProc = CallWindowProc(lpPrevWndFunc, hWnd, uMsg, wParam, lParam)
End Select
WindowProc_Exit:
Exit Function
WindowProc_Err:
MsgBox Err.Description, vbCritical
Resume WindowProc_Exit
End Function
'Form1
' * Text1: Multiline=True, ScrollBars = 3 - Both
Option Explicit
Private Sub Form_Load()
DisableMouseSelect Text1
End Sub
Private Sub Form_Resize()
Text1.Move ScaleLeft, ScaleTop, ScaleWidth, ScaleHeight
End Sub