假设在你自编的记事本中,有这样的文本: ① ② ③ ④ ⑤ 北京 上海 天津 重庆 深圳 你要编辑成这样的形式: ①北京 ②上海 ③天津 ④重庆 ⑤深圳 你是不是要先复制再粘贴来回折腾5次?这还只是有5个条目的情况,如果有100个甚至更多,你还不烦死?你一定会想:如果能一次搞定该多好啊!不错,人越懒才越有创新,本功能正是来解决这个问题的。代码如下: Option Explicit * Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long * 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了!代码很简单又有注释,笔者就不详细分析了。本代码同样适用于富文本框。
|