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