主题:[原创]一个非常有用的编辑功能代码
国庆长假过完,我们又要言归正传,该干啥就干啥了。今天笔者就介绍一个自创的世界上独一无二的编辑功能。
假设在你自编的记事本中,有这样的文本:
①
②
③
④
⑤
北京
上海
天津
重庆
深圳
你要编辑成这样的形式:
①北京
②上海
③天津
④重庆
⑤深圳
你是不是要先复制再粘贴来回折腾5次?这还只是有5个条目的情况,如果有100个甚至更多,你还不烦死?你一定会想:如果能一次搞定该多好啊!不错,人越懒才越有创新,本功能正是来解决这个问题的。代码如下:
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 Sub Command1_Click()
On Error GoTo 100
Dim Pos1 As Long, Pos2 As Long, k As Integer, L As Long, Line As Long, st1 As String, st2() As String
st1 = Clipboard.GetText: If Len(st1) = 0 Then Exit Sub
Do While Right$(st1, 2) = Chr(13) & Chr(10): st1 = Left$(st1, Len(st1) - 2): Loop '去掉字串后面的回车
Do While Left$(st1, 2) = Chr(13) & Chr(10): st1 = Mid$(st1, 3): Loop '去掉字串前面的回车
st2 = Split(st1, vbCrLf)
Line = SendMessage(Text1.hWnd, 186, 0, 0) - 1 '获取文本总行数
SendMessage Text1.hWnd, 176, 0, L '获取光标在文本中的位置
Pos1 = SendMessage(Text1.hWnd, 201, L, 0) '获取光标所在行号
Do
Pos2 = SendMessage(Text1.hWnd, 187, Pos1, 0) '获取该行首字符位置
L = SendMessage(Text1.hWnd, 193, Pos2, 0) '获取指定位置对应行的长度
st1 = Space(L)
SendMessage Text1.hWnd, 196, Pos1, ByVal st1 '获取该行字串
Text1.SetFocus
SendMessage Text1.hWnd, 177, Pos2, ByVal Pos2 + L '反相显示文本选定范围
st1 = st1 & st2(k)
SendMessage Text1.hWnd, 194, 0, ByVal st1 '用指定文本替换选定内容
Pos1 = Pos1 + 1: k = k + 1
Loop Until k > UBound(st2) Or Pos1 > Line
100
End Sub
使用方法与通常的复制粘贴没有什么区别。先一次性复制整个的字符串:
北京
上海
天津
重庆
深圳
再将光标定位到“①”(在“①”的前面或者后面都行),点击本功能按纽,就一切OK了!代码很简单又有注释,笔者就不详细分析了。本代码同样适用于富文本框。
声明:未经笔者同意,禁止将本代码发布到其它网站,否则将追究法律责任!
假设在你自编的记事本中,有这样的文本:
①
②
③
④
⑤
北京
上海
天津
重庆
深圳
你要编辑成这样的形式:
①北京
②上海
③天津
④重庆
⑤深圳
你是不是要先复制再粘贴来回折腾5次?这还只是有5个条目的情况,如果有100个甚至更多,你还不烦死?你一定会想:如果能一次搞定该多好啊!不错,人越懒才越有创新,本功能正是来解决这个问题的。代码如下:
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 Sub Command1_Click()
On Error GoTo 100
Dim Pos1 As Long, Pos2 As Long, k As Integer, L As Long, Line As Long, st1 As String, st2() As String
st1 = Clipboard.GetText: If Len(st1) = 0 Then Exit Sub
Do While Right$(st1, 2) = Chr(13) & Chr(10): st1 = Left$(st1, Len(st1) - 2): Loop '去掉字串后面的回车
Do While Left$(st1, 2) = Chr(13) & Chr(10): st1 = Mid$(st1, 3): Loop '去掉字串前面的回车
st2 = Split(st1, vbCrLf)
Line = SendMessage(Text1.hWnd, 186, 0, 0) - 1 '获取文本总行数
SendMessage Text1.hWnd, 176, 0, L '获取光标在文本中的位置
Pos1 = SendMessage(Text1.hWnd, 201, L, 0) '获取光标所在行号
Do
Pos2 = SendMessage(Text1.hWnd, 187, Pos1, 0) '获取该行首字符位置
L = SendMessage(Text1.hWnd, 193, Pos2, 0) '获取指定位置对应行的长度
st1 = Space(L)
SendMessage Text1.hWnd, 196, Pos1, ByVal st1 '获取该行字串
Text1.SetFocus
SendMessage Text1.hWnd, 177, Pos2, ByVal Pos2 + L '反相显示文本选定范围
st1 = st1 & st2(k)
SendMessage Text1.hWnd, 194, 0, ByVal st1 '用指定文本替换选定内容
Pos1 = Pos1 + 1: k = k + 1
Loop Until k > UBound(st2) Or Pos1 > Line
100
End Sub
使用方法与通常的复制粘贴没有什么区别。先一次性复制整个的字符串:
北京
上海
天津
重庆
深圳
再将光标定位到“①”(在“①”的前面或者后面都行),点击本功能按纽,就一切OK了!代码很简单又有注释,笔者就不详细分析了。本代码同样适用于富文本框。
声明:未经笔者同意,禁止将本代码发布到其它网站,否则将追究法律责任!