VB6在富格文本框内按下向上/向下箭头时是否禁用系统蜂鸣声?

VB6在富格文本框内按下向上/向下箭头时是否禁用系统蜂鸣声?,vb6,richtextbox,keypress,beep,system-sounds,Vb6,Richtextbox,Keypress,Beep,System Sounds,我有一个富文本框控件。它没有滚动条,因为我使用鼠标滚轮模块捕捉鼠标滚轮事件 选中富格文本框并上/下旋转鼠标滚轮时,它会向富格文本框发送{up}和{down}键,以“模拟”滚动效果 但是,当您在文本框内容的开头或结尾时(例如,没有任何内容可滚动),会播放恼人的嘟嘟声系统声音。我需要禁用这个,有什么办法吗 已尝试在富文本框的按键事件中添加此代码: If KeyAscii = 38 Or KeyAscii = 40 Then KeyAscii = 0 End If 不起作用。不知道为什么当它应该工作

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

选中富格文本框并上/下旋转鼠标滚轮时,它会向富格文本框发送{up}和{down}键,以“模拟”滚动效果

但是,当您在文本框内容的开头或结尾时(例如,没有任何内容可滚动),会播放恼人的嘟嘟声系统声音。我需要禁用这个,有什么办法吗

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

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

不起作用。不知道为什么当它应该工作时它就不工作。

使用
KeyDown
事件而不是
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
当然,您需要用RichTextBox的名称替换
RichTextBox 1


希望有帮助:)

在函数/sub之外

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)

若要查看更多内容,请查看哪篇文章是我在SO发表的旧文章的副本。

能否添加更多代码?请在标记问题时更加小心。VB6不是VBA!!!正确标记也对您有利,因为正确的人会看到您的问题。当我这样做时,我无法再使用鼠标滚轮在文本框中滚动。是的,您是对的。。我已经编辑了我的答案,它将完全符合你的要求。。请检查一下,这确实很有效!谢谢你的回答。很高兴我能帮忙:)多么幼稚的评论。这显示了一种技巧。实际上你必须写代码。我还应该说什么?它就是不起作用。我完全按照你的描述添加了它。它是从程序中提取的代码。你需要做更多的事情。您必须阅读RTF窗口的文档,获取常量,阅读编辑控件样式和发送消息。链接在上下文中显示它。但您仍然需要从Windows软件开发工具包中的winuser.h获取常量。这曾经是在MSDN和