タイトル : 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 |