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在富文本框中按下向上/向下箭头时禁用系统哔声?的主要内容,如果未能解决你的问题,请参考以下文章