VB6中剪切至剪贴板,粘贴unicode中文出现乱码的解决方法


VB6中剪切至剪贴板,粘贴unicode中文出现乱码的解决方法

    VB6设置了CF_TEXT(ANSI)内容到Clipboard中,对于ANSI软件(如VB6中所用的TextBox控件)读取它没有问题;对于使用Unicode的软件,则受限于做复制时的输入法状态,即当复制时输入法为非中文(输入法状态栏显示的是非CN,如EN)时,粘贴后出现中文乱码。

    解决的方法一是,在剪切时,先将输入法设置在中文状态时,既可简单解决此问题。
    第二是对Clipboard应用API编程

要进行剪切扣件的控件TEXT2中代码如下:

Private Sub Text2_KeyPress(KeyAscii As Integer)
   If KeyAscii = 3 Then                 ' 是Ctrl C
        Dim bPaste As Boolean
        bPaste = ClipboardSetText(Me.hWnd, Text2.SelText)
        KeyAscii = 0                    '取消 Ctrl + C, 避免进行剪切至剪贴板的自动操作
    End If
End Sub

  参考代码 http://www.xtremevbtalk.com/general/265879-clipboard-unicode.html

 1 Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
 2 Private Declare Function SetClipboardData Lib "user32" (ByVal Format As Long, ByVal hMem As Long) As Long
 3 Private Declare Function CloseClipboard Lib "user32" () As Long
 4 Private Declare Function EmptyClipboard Lib "user32" () As Long
 5 Private Declare Function GlobalAlloc Lib "kernel32" (ByVal Flags As Long, ByVal length As Long) As Long
 6 Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
 7 Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
 8 Private Declare Sub RtlMoveMemory Lib "kernel32" (ByVal pDest As Long, ByVal pSource As Long, ByVal length As Long)
 9 
10 Private Const CF_UNICODETEXT = &HD&
11 Private Const GMEM_MOVEABLE = &O2&
12 Private Const GMEM_ZEROINIT = &O40&
13 
14 ' hWnd 一般可用Me.HWnd,也可为0
15 '  StringToCopy = "Whatever blah blah blah"
16 Function ClipboardSetText(ByVal hWnd As Long, ByVal StringToCopy As String) As Boolean
17     Dim hMem As Long, pMem As Long
18 
19     Call OpenClipboard(hWnd)
20     Call EmptyClipboard
21     
22     hMem = GlobalAlloc(GMEM_MOVEABLE Or GMEM_ZEROINIT, LenB(StringToCopy))
23     pMem = GlobalLock(hMem)
24     
25     Call RtlMoveMemory(pMem, StrPtr(StringToCopy), LenB(StringToCopy))
26     Call GlobalUnlock(hMem)
27     Call SetClipboardData(CF_UNICODETEXT, hMem)
28     Call CloseClipboard
29 End Function

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM