'没有GetLine用EM_FINDTEXTEX如何?该消息可以指定范围(CHARRANGE )查找 EM_FINDTEXTEX Finds text within a rich edit control.EM_FINDTEXTEX wParam = (WPARAM) (UINT) fuFlags; lParam = (LPARAM) (FINDTEXTEX FAR *) lpFindText;
其中引用类型FINDTEXTEX FINDTEXTEX Contains information about text to search for in a rich edit control. This structure is used with the EM_FINDTEXTEX message.typedef struct _findtextex { CHARRANGE chrg; // range to search LPSTR lpstrText; // null-terminated string to find CHARRANGE chrgText; // range in which text is found } FINDTEXTEX;
Const EM_LINEINDEX = 187 Const EM_LINELENGTH = 193Dim sFileName As String Dim WinH As Long Dim i As Integer Dim LineLength As Long Dim charOffset As Long WinH = Rich.hwnd i = 0 '0为第一行,1为第二行,依次类推 charOffset = SendMessage(WinH, EM_LINEINDEX, i, 0) '获得指定行开始位置 LineLength = SendMessage(WinH, EM_LINELENGTH, charOffset, 0) '行长度 sFileName = Mid$(Text1.Text, charOffset + 1, LineLength) '取行内容 Debug.Print sFileName
综合“myhgyp(也许是这样的,信不信由你) ”和“rainstormmaster(暴风雨 v2.0)”给出的方法,可以得到下列函数(经试验成功) Public Function GetLineText(RichTextBox As RichTextBox, LineNum As Long) Dim sFileName As String Dim WinH As Long Dim i As Long Dim LineLength As Long Dim charOffset As Long i = LineNum '0为第一行,1为第二行,依次类推 charOffset = SendMessage(RichTextBox.hWnd, EM_LINEINDEX, i, 0) '获得指定行开始位置 LineLength = SendMessage(RichTextBox.hWnd, EM_LINELENGTH, charOffset, 0) '行长度 'sFileName = MidB(RichTextBox1.Text, charOffset + 1, LineLength) '取行内容 sFileName = StrConv(MidB(StrConv(RichTextBox.Text, vbFromUnicode), charOffset + 1, LineLength), vbUnicode) GetLineText = sFileName End Function在此,谢谢以上各位,给我提供了好的思路,谢谢大家!!
EM_FINDTEXTEX
Finds text within a rich edit control.EM_FINDTEXTEX
wParam = (WPARAM) (UINT) fuFlags;
lParam = (LPARAM) (FINDTEXTEX FAR *) lpFindText;
其中引用类型FINDTEXTEX
FINDTEXTEX
Contains information about text to search for in a rich edit control. This structure is used with the EM_FINDTEXTEX message.typedef struct _findtextex {
CHARRANGE chrg; // range to search
LPSTR lpstrText; // null-terminated string to find
CHARRANGE chrgText; // range in which text is found
} FINDTEXTEX;
Const EM_LINELENGTH = 193Dim sFileName As String
Dim WinH As Long
Dim i As Integer
Dim LineLength As Long
Dim charOffset As Long
WinH = Rich.hwnd
i = 0 '0为第一行,1为第二行,依次类推
charOffset = SendMessage(WinH, EM_LINEINDEX, i, 0) '获得指定行开始位置
LineLength = SendMessage(WinH, EM_LINELENGTH, charOffset, 0) '行长度
sFileName = Mid$(Text1.Text, charOffset + 1, LineLength) '取行内容
Debug.Print sFileName
myhgyp(也许是这样的,信不信由你
我尝试了你的代码,有错,charOffset LineLength 是字节起始和字节个数,用mid有错,
midB把字母数字这些当作双字节处理,linelength给出的是中文双自己,数字英文单字节这样统计个数,望高手仔细思考,我在线等,这个问题我一直没有解决
ss = "我们abc"
MsgBox MidB(StrConv(ss, vbFromUnicode), 1, 2)
结果出来不是 我 这个字
WHY
Public Function GetLineText(RichTextBox As RichTextBox, LineNum As Long)
Dim sFileName As String
Dim WinH As Long
Dim i As Long
Dim LineLength As Long
Dim charOffset As Long
i = LineNum '0为第一行,1为第二行,依次类推
charOffset = SendMessage(RichTextBox.hWnd, EM_LINEINDEX, i, 0) '获得指定行开始位置
LineLength = SendMessage(RichTextBox.hWnd, EM_LINELENGTH, charOffset, 0) '行长度
'sFileName = MidB(RichTextBox1.Text, charOffset + 1, LineLength) '取行内容
sFileName = StrConv(MidB(StrConv(RichTextBox.Text, vbFromUnicode), charOffset + 1, LineLength), vbUnicode)
GetLineText = sFileName
End Function在此,谢谢以上各位,给我提供了好的思路,谢谢大家!!