• ベストアンサー

16進数入力制限方法

いつもお世話になっております。 今回はEDITボックスの入力制限方法についてお聞きしたいです。 現在、あるプログラムで、EDITボックスに16進数で入力する欄を作っています。 今の状態では、入力後ボタンを押したときに一文字ずつチェックして一つでも失敗すればエラーを返すのですが、 できればEDITボックスに0~9、a~f、A~F以外の文字を入力しようとしても無視するように(無反応に)したいです。 EDITボックスをサブクラス化すればできそうですが、もっとスマートにできると思って探してみましたが見つけられませんでした。 何か方法があればご教授願いたいです。 環境はWindowsXP,VC6.0 使えるのはSDK,ATL/WTL,STLです。 以上、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.3

>キーボードフックとかあるのですが うーん、自分のアプリケーションに対する文字入力の制限に フックなんて大げさな。。。 と思ってしまうのだけど 特にグローバルフックによる「横取り」は、 ウィルス対策ソフトにウィルスと誤認される可能性もありますし、 アプリケーションが強制終了などするとシステム全体が 不安定になったりして変に多用するとあまりいいことがありません。 素直にキーが押されて内容が変更された場合に、 想定している物かどうかをチェックして、 削除でいいと思います。 #No1さんの方法。

iec1128
質問者

お礼

ご回答ありがとうございます。 フックの方法は確かにたいそうなものになってしまうのでサブクラス化してWM_CHARで入力毎に確認して実現しました。 ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

 こんばんは。  まあ、キーボードフックとかあるのですが、反ってメッセージのもぐら叩きになってしまう様です。  雑ですが、こんな感じで大方達成出来きるようです。VC6のATL/WTLです。 class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>, public CMessageFilter, public CIdleHandler { public: // 省略・・・ // //エディットボックス LRESULT OnEdit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { if(wID != IDC_EDIT1) return 0; switch(wNotifyCode) { case EN_SETFOCUS://フォーカスが来たらフック _S_hhk = ::SetWindowsHookEx(WH_KEYBOARD, &CMainDlg::KeyHookProc, ::GetModuleHandle(0), 0); break; case EN_KILLFOCUS: //フォーカスが失効したら、フック解除 ::UnhookWindowsHookEx(_S_hhk); } return 0; } //0~9のテンキーとナンバーキーとA~Fと←→↑↓とリターンキーとスペースキーとバックキーとタブキー static bool IsAcept(WORD wCode) { return (wCode >= 0x30 && wCode <= 0x39) || (wCode >= 0x60 && wCode <= 0x69) || (wCode >= 0x41 && wCode <= 0x46) || (wCode >= 0x25 && wCode <= 0x28) || (wCode == VK_RETURN) || (wCode == VK_SPACE) || (wCode == VK_BACK) || (wCode == VK_TAB); } //フックプロシージャ static LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam) { if(nCode < 0) return CallNextHookEx(_S_hhk, nCode, wParam, lParam); //ココで受け入れるかどうか決める if(IsAcept(wParam)) return CallNextHookEx(_S_hhk, nCode, wParam, lParam); return TRUE; } //フックハンドル static HHOOK _S_hhk; }; HHOOK CMainDlg::_S_hhk = 0;

iec1128
質問者

お礼

ご回答ありがとうございます。 フックの方法はたいそうなものになってしまうのでサブクラス化してWM_CHARで入力毎に確認して実現しました。 サンプルまで示していただきありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

EN_UPDATEの契機で、該当のエディトボックスの内容を取得して、 16進数以外の文字が入っていたら削除して再設定し直す。 というのはどうでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • テキストボックスの入力文字を16進数のみに制限する

    VC++2005、.NET2.0、C++/CLIにてWindowsアプリを作成しています。 テキストボックスの入力文字について、 「00」~「FF」の16進数文字(半角)のみ入力可能としたいのですが、 どうやって制限をかければ良いのでしょうか? また、もし16進数のみの制限が不可能であれば、 半角英数字のみの制限でも良いと考えています。

  • 入力できる文字数を制限する方法

    ACCESS2000でVBA を使用して、フォーム上の非連結テキスト ボックスに入力できる文字数を制限する方法を教えて下さい。(更新前処理のイベントでは、文字のチェックを行います。)

  • ExcelVBAでテキストボックスに入力制限をする方法

    Excelのプログラムで、フォームのテキストボックスに数値のみ入力許可したり、文字のみ入力許可したり、特定の文字のみ入力許可にするなど、入力制限を行う方法はどのようにすればよいでしょうか? 回答よろしくお願いします。

  • 入力を制限したい

    自分の力ではどうしようもなく、ご質問させてください。 2つ以上のテキストボックス(A,B) に数を入力して、その和を(C)以上にならないように制限をしたいのですが、JavaScriptで可能でしょうか。 またテキストボックスA,Bはセレクトボックスで書き出したく思っています。 解り難くて申し訳ありません

  • テキストBOXの入力制限について

    テキストBOXを下記のように設定したとします。 <input type="text"name="***" maxlength="30"> この場合は、全角・半角関係なく文字数を30文字入力することができますよね? 今回、私がやりたいことは、バイト数の制限をやりたいんです。 例えばバイト数を30バイトにした場合は、 全角では15文字しか入力できなくて 半角では30文字入力制限をする方法を探しています。 何かよい方法はないものでしょうか???

  • EXCEL: 文字数制限

    すみません、どなたか教えてください。 セルC1に対して、文字数制限(50文字まで)をかけたいのです。メッセージboxを表示して。 C1には関数で「=A1&" "&B1」となっています。 A1とB1には文字列が入力されています。 この2つの文字列を組み合わせた文字列がC1にきます。 C1に対して、メニューバーの「データ」/「入力規則」で設定はしているのですが、関数で値を求めているせいか、メッセージboxが表示されません。セルC1に直接入力するとメッセージは表示されるのですが…。ちなみに、文字列にあるスペースもカウントしたいです。 よろしくお願いします。

  • cgiによる文字入力数の制限について

    perlについては素人な者ですが、私の質問をお願いします。 フリーの掲示板cgiを使っていますが、IDネームを決定する際に入力できる文字数の制限がありません。 「未入力」と「全角」を含む場合は、以下の部分でエラーを出せますが、 if ($in{'name'} eq "" || $in{'name'} =~ /[^a-zA-Z0-9]/) { &error("IDネームを確認してください。");} この箇所に書き加えて、4文字から10文字以内といった文字入力数の制限を加えるにはどうしたらよいのでしょうか? cgiは携帯用なのでJavaScriptは使わない方法で何かあればお願い致します。

    • ベストアンサー
    • CGI
  • ワードで入力できる文字数を制限する方法

    質問シートを作成中ですが、回答を入力すると、フォーマットが壊れてしまいます。 入力できる文字数を制限し固定する方法を教えてください。 パソコン初心者です。 いろいろ検索しましたが、よい方法が見つかりません。 よろしくお願いします。

  • EXCEL入力規則で文字数制限

    EXCEL2002です。 A列に入力規則をかけ、全角20文字、半角40文字以内にしたいと思っています。 「エクセル技道場→入力規則→全角5文字、半角10文字」を参考にさせていただき、以下の式で入力規則のユーザー設定を行いました。 =AND(ISTEXT(A1),LENB(A1)<=40) この場合、最初の文字が半角の場合に制限数以下でもエラーメッセージが出てしまいます。 最初の文字が全角でも半角でも制限数以下であればエラーメッセージが出ないようにする方法はありますか? よろしくお願いします。 http://www2.odn.ne.jp/excel/waza/validation.html#SEC10

  • GetWindowTextについて

    いつもお世話になっております。 今回はGetWindowTextについてお聞きします。 現在ATLでダイアログベースのアプリを作っておりますが、 EDITボックスの文字を取得する際、String型で受け取りたいのですが、 MFCではできるような方法があったのですが ATLでは同様の処理ができるのでしょうか? 何か方法がありましたらご教授願います。