用WINDOWS的消息机制来实现吧
首先获得TEXTBOX的总行数 用EM_GETLINECOUNT 消息
然后得到当前显示的文本所在行的区间 可以利用卷动的消息计算得之
循环得到区间内各行的文本 用EM_GETLINE 消息
这是编程原理,主要用到SENDMESSAGE函数与WINDOWS的消息机制
如果实现有困难请将E-MAIL留下
有时间我会做一个例程的
首先获得TEXTBOX的总行数 用EM_GETLINECOUNT 消息
然后得到当前显示的文本所在行的区间 可以利用卷动的消息计算得之
循环得到区间内各行的文本 用EM_GETLINE 消息
这是编程原理,主要用到SENDMESSAGE函数与WINDOWS的消息机制
如果实现有困难请将E-MAIL留下
有时间我会做一个例程的
Const EM_LINELENGTH = &HC1
Const EM_GETFIRSTVISIBLELINE = &HCE
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Sub Command1_Click()
Dim n As Long
'获得显示的开始行
n = SendMessage(Text1.hwnd, EM_GETFIRSTVISIBLELINE, 0, 0)
'获得第1行的字节数
n = SendMessage(Text1.hwnd, EM_LINELENGTH, 0, 0)
End Sub
EM_LINELENGTH 得到字符的长度(可以用len函数代替)
应该不可能得到显示的字符串吧???
Const EM_GETFIRSTVISIBLELINE = &HCE
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
Dim Maxlen As Long
'得到可显示的字符个数
Private Sub GetDispNum()
'保存设置
Dim Txt As String
Dim SelS As Long
Dim Sellength As Long
Dim S As Long
Txt = Text1.Text
SelS = Text1.SelStart
Sellength = Text1.Sellength
Text1.Visible = False
Text1.Text = String(255, " ")
Text1.SelStart = 255
S = SendMessage(Text1.hwnd, EM_GETFIRSTVISIBLELINE, 0, 0)
Maxlen = 255 - S '获得
Text1.Text = Txt
Text1.SelStart = SelS
Text1.Sellength = Sellength
Text1.Visible = True
End SubPrivate Sub Command2_Click()
GetDispNum
MsgBox Maxlen
End SubPrivate Sub Form_Load()
'得到text1控件可以显示的字符个数(一个汉字算2)
GetDispNum
MsgBox Maxlen
End SubPrivate Sub Command1_Click()
Dim n As Long
Dim I As Long
Dim Txt As String
Dim S As String
'获得显示的开始行
n = SendMessage(Text1.hwnd, EM_GETFIRSTVISIBLELINE, 0, 0)
'如果不包含双字节,用下面的方法就可以
'MsgBox Mid(Text1.Text, n + 1, Maxlen)
'如果包含双字节则就需要处理字符串了
'我也没有好办法,只能用笨办法
Txt = ""
For I = 1 To Len(Text1.Text)
S = VBA.Left$(Text1.Text, I)
If LenB(StrConv(S, vbFromUnicode)) > n Then
S = Mid(Text1, I, 1)
If LenB(StrConv(S + Txt, vbFromUnicode)) <= Maxlen Then
Txt = Txt + S
Else
Exit For
End If
End If
Next I
MsgBox Txt
End Sub