通常我们要获得EDIT编辑框的某一行的文本,只要用sendmessage发送EM_GETLINE消息就可以了,然而当我们试图发送EM_GETLINE消息给Richtextbox控件时,却得不到正确的数据,这在Richtextbox控件同时包含中文和英文时表现的很明显,而如果Richtextbox控件的内容只有英文时,发送EM_GETLINE消息则可以得到正确的数据(写到这里,不由得开始羡慕米国人不需要同unicode打交道)。
我的做法是发送EM_GETTEXTRANGE消息给Richtextbox控件,代码如下:
Option Explicit
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Private Const GTL_NUMBYTES = 16&
Private Const EM_LINEINDEX = &HBB
Private Const EM_GETLINECOUNT = &HBA
Private Const EM_LINELENGTH = &HC1
Const WM_USER = &H400
Const EM_GETTEXTRANGE = (WM_USER + 75)
Private Type CHARRANGE 'cr
cpMin As Long
cpMax As Long
End Type
Private Type TEXTRANGE
chrg As CHARRANGE
lpstrText As String ' alloca

在处理包含中文和英文的Richtextbox控件时,使用EM_GETLINE消息无法正确获取某一行文本。通过发送EM_GETTEXTRANGE消息,可以解决这个问题。本文提供了一个VBA函数,用于从Richtextbox控件中获取指定行的文本,详细阐述了实现方法和调用方式。
最低0.47元/天 解锁文章
1232

被折叠的 条评论
为什么被折叠?



