´支持中文,一个汉字算一列
´有问题请给我写邮件
´作者:Matrix
´邮件:ASPBIT@163.COM
´2003-01-24修正了马虎的错误
´************************************************************
财管家.园.fs119.net
OptionExplicit
财.管家园.fs119.net
PublicConstWM_USER=&H400
PublicConstEM_EXGETSEL=WM_USER52
PublicConstEM_LINEFROMCHAR=&HC9
PublicConstEM_LINEINDEX=&HBB
PublicConstEM_GETSEL=&HB0
PublicTypeCHARRANGE
cpMinAsLong
cpMaxAsLong
EndType 财软联盟,fs119.net
PublicTypePOINTAPI
xAsLong
yAsLong
EndType 财软联 盟 fs119.net
PublicDeclareFunctionSendMessageLib"user32"Alias_
"SendMessageA"(ByValhWndAsLong,ByValwMsgAs_
Long,ByValwParamAsLong,lParamAsAny)AsLong 财.软联盟.fs119.net
PublicDeclareSubCopyMemoryLib"kernel32"Alias_
"RtlMoveMemory"(pDstAsAny,pSrcAsAny,_
ByValByteLenAsLong) 财软 联盟 fs119.net
´取得光标所在的行和列
PublicFunctionGetCurPos(ByRefTextControlAsControl)AsPOINTAPI
DimLineIndexAsLong
DimSelRangeAsCHARRANGE
DimTempStrAsString
DimTempArray()AsByte
DimCurRowAsLong
DimCurPosAsPOINTAPI
财 管家园 fs119.net
TempArray=StrConv(TextControl.Text,vbFromUnicode)
财管 家园 fs119.net
´取得当前被选中文本的位置适用于RichTextBox
´TextControl用EM_GETSEL消息
CallSendMessage(TextControl.hWnd,EM_EXGETSEL,0,SelRange) 财软联 盟 fs119.net
´根据参数wParam指定的字符位置返回该字符所在的行号
CurRow=SendMessage(TextControl.hWnd,EM_LINEFROMCHAR,SelRange.cpMin,0) 财软联盟,fs119.net
´取得指定行第一个字符的位置
LineIndex=SendMessage(TextControl.hWnd,EM_LINEINDEX,CurRow,0)
IfSelRange.cpMin=LineIndexThen
GetCurPos.x=1
Else 财.管家园.fs119.net
TempStr=String(SelRange.cpMin-LineIndex,13) 财软,联盟,fs119.net
´复制当前行开始到选择文本开始的文本
CopyMemoryByValStrPtr(TempStr),ByValStrPtr(TempArray)LineIndex,SelRange.cpMin-LineIndex
TempArray=TempStr 财管,家园,fs119.net
´删除无用的信息
ReDimPreserveTempArray(SelRange.cpMin-LineIndex-1)
财软 联盟 fs119.net
´转换为Unicode
TempStr=StrConv(TempArray,vbUnicode)
GetCurPos.x=Len(TempStr)1
EndIf
GetCurPos.y=CurRow1
EndFunction
财.软联盟.fs119.net
Google.cn搜索相关文章:
谷歌中搜索全球网 取得TextBox、RichTextBox光标所在的行和列(支持中文)修正
百度中搜索 取得TextBox、RichTextBox光标所在的行和列(支持中文)修正
谷歌中搜索www.fs119.net 取得TextBox、RichTextBox光标所在的行和列(支持中文)修正
下一篇:利用动态创建自动化接口实现VB的函数指针调用