by Tako » 2017年3月08日(水) 16:42
数年ぶりにプログラムを書いています。
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
数年ぶりにプログラムを書いています。
AB4にて、EditBoxのサブクラス化による文字入力制限をしていますが問題が有ります。
1、規制文字に"%"と"'"を加えると、EditBox内で左右キーによるカーソル移動ができなくなる。
2、Debugモードにて起動すると、EditBoxを選択すると例外処理エラーとなる。
(実行形式にコンパイルすると動作する。)
よろしくお願いします。
[list][code]
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
[/code][/list]