数字限定EditでCtrl + V などを有効にするには

解決


PG  2009-07-30 17:17:54  No: 35283

お久しぶりです。
またまたお力を拝借させていただきたいです。

TEditを数字しか入力できないようにしているんですが、
そうするとCtrl + Vなどで貼り付けをすることもできなくなってしまします。
右クリックから貼り付けなどはできるので、
キーボードでもできるようにしたいのですが、
どのようにすればよいでしょうか??


DEKO  2009-07-30 18:00:11  No: 35284

> TEditを数字しか入力できないようにしているんですが、
> そうするとCtrl + Vなどで貼り付けをすることもできなくなってしまします。

どういった実装になっているのかが判りませんが、
D2006/2007であればクラスヘルパーでTEditを拡張する事ができます。
http://homepage1.nifty.com/ht_deko/tech022.html
この場合には普通にコピー&ペーストが可能です。

・D2009以降には NumbersOnly プロパティがあります。
・D2006以前であれば、SetWindowLong でスタイルを変更する必要があります。


PG  2009-07-30 20:05:11  No: 35285

if (Sender = Edit1) then begin
    if not (Key in ['0','1','2','3','4','5','6','7','8','9',#8]) then begin
      Key := #0;
    end;
  end;

という感じで実装しています。

単にCtrlキーとVキーも入力許可するだけでしょうか??


にしの  2009-07-30 21:32:25  No: 35286

> 右クリックから貼り付けなどはできるので、
> キーボードでもできるようにしたいのですが、
> どのようにすればよいでしょうか??

実装している内容を見る限りでは、

> 単にCtrlキーとVキーも入力許可するだけでしょうか??

まさにCtrl+Vを許可すればマウスの貼り付けと同等の動きはしますが、たぶん期待通りには動かないかと思います。

Ctrl+Vを許可するとなると、
・キーによる数字以外の文字の入力不可
・ただし、マウスおよびキーボードからの貼り付けで「数字以外の文字」も入力可
という動作になります。

もし貼り付けでも数字のみにしたいのであれば、WM_PASTEメッセージが来たらクリップボードの内容を取得し、
A.数字のみの内容なら貼り付け許可。それ以外は貼り付け禁止。
もしくは、
B.数字以外の文字を削除して、数字のみの文字列にした状態で貼り付け。
のどちらかということになるかと思います。


PG  2009-07-30 21:57:44  No: 35287

にしの様
ご指摘の党利です。
ですが、Edit1のExitイベントで、数字以外のものを削除するような処理を施してあります。
ちなみに、先ほどの数字のみの入力許可の部分でCtrlキーとVキーなどを許可するにはどのように書いたらいいでしょう。。。


monaa  2009-07-30 23:36:15  No: 35288

if ((not (Key in ['0','1','2','3','4','5','6','7','8','9',#8])) and
        (not ((Key = #$16) and (GetKeyState(VK_CONTROL)<1) )))then
    begin
      Key := #0;
    end;

うーん、でもこんなことするよりWindowsには数値入力Editが用意されてるのでそっちを使ったほうがよろしいかと。


検索で  2009-07-30 23:43:31  No: 35289

「制御文字」について調べれば、もっとシンプルなコードでいけると思う。


GetKeyState を使わなくても  2009-07-31 00:21:34  No: 35290

^C, ^V, ^X, ^Z でOKだと思うよ。


ttt  2009-07-31 01:54:35  No: 35291

どのイベントで判定してるのか書いてないけど、Keyが文字らしいからOnKeyPressかな?
特殊キーの判定だったらOnKeyDownの方が適切ですね。Ctrlの有無も引数で教えてくれますし。
ところでShift+Insでは貼り付けできなくてもいいんでしょうか。


  2009-07-31 04:58:50  No: 35292

ActionListにアクションを追加して、ショートカットキーを「Ctrl+V」に設定。そこでコード書けば?


PG  2009-07-31 08:33:01  No: 35293

ぬおっっ!
出張行ってる間にみなさんいろんなご指導ありがとうございます!
感激です。
今から早速みなさんのを試して行きたいと思います。


PG  2009-07-31 23:09:21  No: 35294

お返事が遅れましてすいません。
同僚と相談した結果monaa産のやり方で進めることにしました。
自分の指摘時間にほかの方にご指導いただいと事を試して
我が力に変えたいと思います。

毎回どうもありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加