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

解決


PG  2009-07-30 08:17:54  No: 35283  IP: 192.*.*.*

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

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

編集 削除
DEKO  2009-07-30 09:00:11  No: 35284  IP: 192.*.*.*

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

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

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

編集 削除
PG  2009-07-30 11:05:11  No: 35285  IP: 192.*.*.*

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 12:32:25  No: 35286  IP: 192.*.*.*

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

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

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

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

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

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

編集 削除
PG  2009-07-30 12:57:44  No: 35287  IP: 192.*.*.*

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

編集 削除
monaa  2009-07-30 14:36:15  No: 35288  IP: 192.*.*.*

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 14:43:31  No: 35289  IP: 192.*.*.*

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

編集 削除
GetKeyState を使わなくても  2009-07-30 15:21:34  No: 35290  IP: 192.*.*.*

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

編集 削除
ttt  2009-07-30 16:54:35  No: 35291  IP: 192.*.*.*

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

編集 削除
 2009-07-30 19:58:50  No: 35292  IP: 192.*.*.*

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

編集 削除
PG  2009-07-30 23:33:01  No: 35293  IP: 192.*.*.*

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

編集 削除
PG  2009-07-31 14:09:21  No: 35294  IP: 192.*.*.*

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

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

編集 削除