0

我有一个富文本框控件。它没有滚动条,因为我正在使用鼠标滚轮模块来捕获鼠标滚轮事件。

选择丰富的文本框并向上/向上旋转鼠标轮时,它会将键{up}和{down}发送到他们丰富的文本框中,以“模仿”滚动效果。

但是,当您处于文本框内容的开头或结尾时(例如,没有任何内容可滚动),会播放令人讨厌的哔声系统声音。我需要禁用它,任何想法如何做到这一点?

已经尝试在富文本框的按键事件中添加此代码:

If KeyAscii = 38 Or KeyAscii = 40 Then
KeyAscii = 0
End If

不工作。不知道为什么它只是在它应该工作的时候不起作用。

4

2 回答 2

0

使用KeyDownevent 代替KeyPress,并且KeyCode仅当光标位于第一/最后一行时才禁用 ,以防止完全禁用箭头键(上/下)。

首先,您需要在声明中添加以下内容:

Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Private Const EM_LINEFROMCHAR = &HC9
Private Const EM_GETLINECOUNT = &HBA

Private Function GetCurrentLine(Txt As RichTextBox) As Long
    GetCurrentLine = SendMessage(Txt.hWnd, EM_LINEFROMCHAR, Txt.SelStart, 0&) + 1
End Function

Private Function GetLineCount(Txt As RichTextBox) As Long
    GetLineCount = SendMessage(Txt.hWnd, EM_GETLINECOUNT, 0&, 0&)
End Function

然后KeyDown按照描述使用事件:

Private Sub RichTextBox1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyUp Then
        If GetCurrentLine(RichTextBox1) = 1 Then KeyCode = 0
    ElseIf KeyCode = vbKeyDown Then
        If GetCurrentLine(RichTextBox1) = GetLineCount(RichTextBox1) Then KeyCode = 0
    End If
End Sub

当然,您需要替换RichTextBox1为 RichTextBox 的名称。

希望有帮助:)

于 2016-03-13T09:58:52.697 回答
0

在函数/子之外

Public Declare Function SendMessageByVal Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

在您的子/功能中

Ret = SendMessageByVal(gRtfHwnd, EM_SETEDITSTYLE, SES_ALLOWBEEPS + SES_USECRLF, SES_ALLOWBEEPS + SES_USECRLF)

要查看更多信息,请参阅http://ambracode.com/index/show/1405175,这是我在 SO 上发表的旧帖子的一些副本。

于 2016-03-13T10:04:57.683 回答