VB6在富文本框中按下向上/向下箭头时禁用系统哔声?

Posted

技术标签:

【中文标题】VB6在富文本框中按下向上/向下箭头时禁用系统哔声?【英文标题】:VB6 Disable system beep sound when arrow up/down is pressed inside rich text box? 【发布时间】:2016-03-12 22:05:42 【问题描述】:

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

When the rich text box is selected and mouse wheel is rotated up/down it sends keys UP and DOWN to they rich text box to "mimic" the scroll effect.

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

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

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

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

【问题讨论】:

您可以添加更多代码吗? 请在标记您的问题时更加小心。 VB6 不是 VBA !!!正确标记也对您有利,因为这样合适的人会看到您的问题。 【参考方案1】:

使用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

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

希望有帮助:)

【讨论】:

当我这样做时,我无法再用鼠标滚轮滚动文本框了。 是的,你是对的..我已经编辑了我的答案,它会完全按照你的意愿去做..请检查一下 这实际上工作得很好!谢谢你的回答。 很高兴我能帮上忙 :)【参考方案2】:

在函数/子之外

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 上发布的旧帖子的一些副本。

【讨论】:

多么幼稚的评论。这显示了一种技术。你实际上必须编写代码。 我应该多说什么?它只是行不通。我完全按照你的描述添加了它。 It 代码从程序中提取。你需要做更多的事情。您必须阅读 RTF WINDOWS 的文档,获取常量,阅读 EDIT CONTROL 样式和 SendMessage。该链接在上下文中显示它。但是您仍然需要从 Windows 软件开发工具包中的 winuser.h 获取常量。这曾经在 MSDN helpdoc-online.com/… 和 helpdoc-online.com/…

以上是关于VB6在富文本框中按下向上/向下箭头时禁用系统哔声?的主要内容,如果未能解决你的问题,请参考以下文章

想要文本框中的向上和向下箭头来更改列表框选择

如何防止在WinForms TextBox中按下alt键引起的哔声?

当我在文本框中按 Enter 键时发出恼人的哔哔声

如何在自动建议框中使用向下箭头键?

检测在 VB6 输入框中按下的取消

使用 OnKeyUp 在 TextBox 中按下 Enter 时避免 Windows 'Ding'