EditBoxのサブクラス化による文字入力制限について
Posted: 2017年3月08日(水) 16:42
数年ぶりにプログラムを書いています。
AB4にて、EditBoxのサブクラス化による文字入力制限をしていますが問題が有ります。
1、規制文字に"%"と"'"を加えると、EditBox内で左右キーによるカーソル移動ができなくなる。
2、Debugモードにて起動すると、EditBoxを選択すると例外処理エラーとなる。
(実行形式にコンパイルすると動作する。)
よろしくお願いします。
AB4にて、EditBoxのサブクラス化による文字入力制限をしていますが問題が有ります。
1、規制文字に"%"と"'"を加えると、EditBox内で左右キーによるカーソル移動ができなくなる。
2、Debugモードにて起動すると、EditBoxを選択すると例外処理エラーとなる。
(実行形式にコンパイルすると動作する。)
よろしくお願いします。
コード: 全て選択
Dim DefEditProc As VoidPtr Function LimitedEditProc(hWnd As HWND, message As DWORD, wParam As WPARAM, lParam As LPARAM) As DWORD Dim LimitChar As String 'OK LimitChar=" !#$&()*+,/<=>?@[\]^_`{|}~"+Chr$(&H22) 'NG LimitChar=" !#$%&'()*+,/<=>?@[\]^_`{|}~"+Chr$(&H22) LimitChar=" !#$&()*+,/<=>?@[\]^_`{|}~"+Chr$(&H22) If InStr(1, LimitChar, Chr$(wParam As Byte)) Then LimitedEditProc=0 Exit Function End If LimitedEditProc=CallWindowProc(DefEditProc , hWnd, message, wParam, lParam) End Function Sub MainWnd_Destroy() SetWindowLong(GetDlgItem(hMainWnd, EditBox1), GWL_WNDPROC, DefEditProc As Long) ---------省略---------- End Sub Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT) DefEditProc=SetWindowLong(GetDlgItem(hMainWnd, EditBox1), GWL_WNDPROC, AddressOf(LimitedEditProc) As Long) As VoidPtr End Sub