ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 01:32

全ての表示時間は UTC+09:00 です




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - EditBoxのサブクラス化による文字入力制限について
作成者 メッセージ
  記事の件名:  Re: EditBoxのサブクラス化による文字入力制限について  引用付きで返信する
たかせ様

どうも、お久しぶりです。
キーコードとダブっているとは思いませんでした。
ご指摘ありがとうございます。

メインの開発環境はWin7 64Bitですが、押入れの奥に有るXpを久しぶり出してみます。

redfox様

うまく行きました、ありがとうございます。


何度か別の言語にも浮気したのですが、ABが一番しっくり来るんですょねぇ~
投稿記事 Posted: 2017年5月10日(水) 10:13
  記事の件名:  Re: EditBoxのサブクラス化による文字入力制限について  引用付きで返信する
WindowProc内でキー入力を無視するのであれば 引数のmessageがWM_CHARの場合に対処するようにしてみましょう
コード:
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 message = WM_CHAR then
        If InStr(1, LimitChar, Chr$(wParam As Byte)) Then
            LimitedEditProc=0
            Exit Function
        End If
    End If
    LimitedEditProc=CallWindowProc(DefEditProc , hWnd, message, wParam, lParam)
End Function
投稿記事 Posted: 2017年4月09日(日) 11:02
  記事の件名:  Re: EditBoxのサブクラス化による文字入力制限について  引用付きで返信する
お久しぶりです。

1について
%の16進表現は&H25、'の16進表現は&H27となります。
またABのHELPにあるInkey$関数のサンプルプログラムを実行すると、
左カーソルキーを押下すると&H25(VK_LEFT)が返却されます。
右カーソルキーを押下すると&H27(VK_RIGHT)が返却されます。
なので規制文字に%と'を加えて左右カーソルキーを動かそうとしてもそれが禁止文字と一致したためカーソル移動ができなくなると思います。

2について
TAKOさんのPCはWindows 7(32Bit/64Bit)ですか?
私のPCはWindows 7(32Bit)です。
Windows XPだと問題なくDebugモードにて起動できました。
Windows 7だとなぜかDebugモードにすると異常終了することがあります。
Windows 8.1/10についてはわかりませんが。
原因がわからないので私はあきらめています。

ご確認よろしくお願いいたします。
投稿記事 Posted: 2017年4月04日(火) 21:20
  記事の件名:  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
    
投稿記事 Posted: 2017年3月08日(水) 16:42

全ての表示時間は UTC+09:00 です


ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean