tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル SetWindowLongの動作
投稿日: 2017/06/20(Tue) 11:02
投稿者KH
お世話になります。KHと申します。

VB6で作成しました、「テキストボックスに全角文字を入力すると半角カナを表示」する
プログラムをVB.NET(VB2005)に変換したのですが、
VB6のときには問題なく動作していたのが、VB.NETだと途中でエラーになってしまいます。
下記のソースコードの、StartEditの中の
m_lpOrg = SetWindowLong(m_txtSrc.handle, GWL_WNDPROC, AddressOf pWindowProc)
の行で、
「現在の場所のソースコードを表示できません」とエラー表示されますので
どういったことが考えられるかご教授いただけると幸いです。
よろしくお願い致します。


●入力フォームの文字入力部分
    Private Sub Kanji_KeyDown(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyEventArgs) Handles Kanji.KeyDown
        Dim KeyCode As Short = eventArgs.KeyCode
        Dim Shift As Short = eventArgs.KeyData \ &H10000
        Module1.KeyDownEdit(Kanji, Kana)
    End Sub


●フリガナ取得部分
Module Module1
    Private fEditing As Boolean
    Private m_txtSrc As Object
    Private m_txtDest As Object
    Private m_lpOrg As Long
    Public Const GCS_RESULTREADSTR As Short = &H200s
    Public Const GCS_RESULTSTR As Short = &H800s
    Public Const WM_IME_COMPOSITION As Short = &H10Fs
    Public Const GWL_WNDPROC As Short = (-4)
    Public Const WM_CHAR As Short = &H102s
    
    Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As IntPtr, ByVal nIndex As Short, ByVal dwNewLong As WindowProcDelegate) As Long
    Declare Function SetWindowLong2 Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As IntPtr, ByVal nIndex As Short, ByVal dwNewLong As Short) As Short
    Public Delegate Function WindowProcDelegate(ByVal hwnd As IntPtr, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

    Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As IntPtr, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

    Public Sub EndEdit()
        '(メソッド)IMEふりがな入力の監視を終了する
        If fEditing = True Then
            '終了処理
            fEditing = False
            'UPGRADE_WARNING: オブジェクト m_txtSrc.hwnd の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。
            m_lpOrg = SetWindowLong2(m_txtSrc.hwnd, GWL_WNDPROC, m_lpOrg)
        End If
    End Sub
    
    Public Sub KeyDownEdit(ByRef txtSrc As Object, ByRef txtDest As Object)
        '(メソッド)キーボード入力のたびにふりがな入力を監視する
        'KeyDownイベントから呼び出します
        'txtSrc     漢字を入力するテキストボックス
        'txtDest    ふりがなを自動入力するテキストボックス
        
        'ふりがな監視/終了
        StartEdit(txtSrc, txtDest)
        System.Windows.Forms.Application.DoEvents()
        EndEdit()
        '連動消去
        If m_txtSrc.Text = "" Then m_txtDest.Text = ""
        
    End Sub
    
    Public Sub StartEdit(ByRef txtSrc As Object, ByRef txtDest As Object)
        '(メソッド)IMEふりがな入力の監視を開始する
        'txtSrc     漢字を入力するテキストボックス
        'txtDest    ふりがなを自動入力するテキストボックス
        '--準備
        If fEditing = True Then Call EndEdit() 'EndEditを忘れている場合の処理
        m_txtSrc = txtSrc
        m_txtDest = txtDest
        fEditing = True
        '--サブクラス化開始
        m_lpOrg = SetWindowLong(m_txtSrc.handle, GWL_WNDPROC, AddressOf pWindowProc)
    End Sub
    
    Public Function pWindowProc(ByVal hwnd As IntPtr, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

<ここで振り仮名を取得>
    
    End Function
End Module

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。