RichTextBox 中英文位置问题!
我需要在RichTextBox中动态处理文本, 如:我在键入完一行文本回车后, 需要一段程序立即给出当前编辑行的开始位置和结束位置
sBuffer=RichText1.Text
for i= 开始位置 to 结束位置
Select Case Asc(Mid(sBuffer, i, 1))
处理过程
......
我知道 API 可以完成, 现在的问题是, 文本中既有英文也有中文,用API 方式找到的位置在中英文混合方式下位置不对! 请不管用是么方法给出回车行的开始和结束的两个位置, 并在整个循环过程里把每个字符包括中文都能准确读到. (请给出代码,UP等.. 无分)
问题点数:50、回复次数:4Top
1 楼acev(睡眠不足(域名 .com ¥55,.cn ¥30 QQ:230567))回复于 2002-05-24 19:41:30 得分 10
关注,UPTop
2 楼YHeng(我来也!!!!!!)回复于 2002-05-25 15:55:29 得分 40
Public Sub Get_Line()
Dim lLineCount As Long, lLineIndex As Long, lCurrentByte As Long, i As Long, J As Long
Dim lColNo As Long, lLineLength As Integer
With FrmMain.RichEdit
lLineCount = SendMessage(.hwnd, EM_GETLINECOUNT, ByVal 0&, .SelStart)
lLineIndex = .GetLineFromChar(.SelStart) + 1
lCurrentByte = SendMessage(.hwnd, EM_LINEINDEX, -1, 0) '取得目前光标所在行前面有多少个Byte
lLineLength = SendMessage(.hwnd, EM_LINELENGTH, lCurrentByte, 0) + 1 '取得当前行的长度
i = SendMessage(.hwnd, EM_GETSEL, ByVal 0&, ByVal 0&)
J = i / 65536 '取得目前光标所在位置前有多少个Byte
lColNo = J - lCurrentByte + 1
End With
FrmMain.LbRow.Caption = "行:" & lLineIndex & " / " & lLineCount
FrmMain.LbCol.Caption = "列:" & lColNo & " / " & lLineLength
' With FrmMain.StatusBar1
' .Panels(2) = "行:" & lLineIndex & " / " & lLineCount
' .Panels(3) = "列:" & lColNo & " / " & lLineLength
' End With
End Sub
以上代码摘自我自己的一个程序中的一个过程,您自己试试,希望能给您点帮助!Top
3 楼rise139()回复于 2002-05-26 01:40:00 得分 0
处理中文还是不成Top
4 楼rise139()回复于 2002-05-27 16:32:44 得分 0
谢谢各位,我想出办法解决了。
'返回当前行第一个字符位置, 行字符数量
Private Sub FindChar(RTFBox As RichTextBox, FChar As Long, BuffLen As Long)
Dim astr As String
Dim l, l1, l2 As Long
Dim SBuffer As String
Dim lBufferLen As Long
Dim F As Long
With RTFBox
SBuffer = Trim(.text & " ")
lBufferLen = Len(SBuffer)
'返回当前行的字符串
astr = Space(1024)
l = SendMessage(.hwnd, EM_LINEINDEX, -1, 0)
iLineY = SendMessage(.hwnd, EM_LINEFROMCHAR, l, 0) '取当前行号
'取当前行前的字符总数
For F = 0 To iLineY - 1
astr = Space(1024)
l = SendMessageStr(.hwnd, EM_GETLINE, F, ByVal astr)
FChar = FChar + Len(Trim(astr))
Next
'当前行开始位置
FChar = FChar + 1: astr = Space(1024)
l = SendMessageStr(.hwnd, EM_GETLINE, iLineY, ByVal astr)
astr = Trim(astr) '取得光标所在行全部字符
BuffLen = Len(astr) - 2 '文本长度
End With
End SubTop




