お久しぶりです。
またまたお力を拝借させていただきたいです。
TEditを数字しか入力できないようにしているんですが、
そうするとCtrl + Vなどで貼り付けをすることもできなくなってしまします。
右クリックから貼り付けなどはできるので、
キーボードでもできるようにしたいのですが、
どのようにすればよいでしょうか??
> TEditを数字しか入力できないようにしているんですが、
> そうするとCtrl + Vなどで貼り付けをすることもできなくなってしまします。
どういった実装になっているのかが判りませんが、
D2006/2007であればクラスヘルパーでTEditを拡張する事ができます。
http://homepage1.nifty.com/ht_deko/tech022.html
この場合には普通にコピー&ペーストが可能です。
・D2009以降には NumbersOnly プロパティがあります。
・D2006以前であれば、SetWindowLong でスタイルを変更する必要があります。
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キーも入力許可するだけでしょうか??
> 右クリックから貼り付けなどはできるので、
> キーボードでもできるようにしたいのですが、
> どのようにすればよいでしょうか??
実装している内容を見る限りでは、
> 単にCtrlキーとVキーも入力許可するだけでしょうか??
まさにCtrl+Vを許可すればマウスの貼り付けと同等の動きはしますが、たぶん期待通りには動かないかと思います。
Ctrl+Vを許可するとなると、
・キーによる数字以外の文字の入力不可
・ただし、マウスおよびキーボードからの貼り付けで「数字以外の文字」も入力可
という動作になります。
もし貼り付けでも数字のみにしたいのであれば、WM_PASTEメッセージが来たらクリップボードの内容を取得し、
A.数字のみの内容なら貼り付け許可。それ以外は貼り付け禁止。
もしくは、
B.数字以外の文字を削除して、数字のみの文字列にした状態で貼り付け。
のどちらかということになるかと思います。
にしの様
ご指摘の党利です。
ですが、Edit1のExitイベントで、数字以外のものを削除するような処理を施してあります。
ちなみに、先ほどの数字のみの入力許可の部分でCtrlキーとVキーなどを許可するにはどのように書いたらいいでしょう。。。
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が用意されてるのでそっちを使ったほうがよろしいかと。
「制御文字」について調べれば、もっとシンプルなコードでいけると思う。
^C, ^V, ^X, ^Z でOKだと思うよ。
どのイベントで判定してるのか書いてないけど、Keyが文字らしいからOnKeyPressかな?
特殊キーの判定だったらOnKeyDownの方が適切ですね。Ctrlの有無も引数で教えてくれますし。
ところでShift+Insでは貼り付けできなくてもいいんでしょうか。
ActionListにアクションを追加して、ショートカットキーを「Ctrl+V」に設定。そこでコード書けば?
ぬおっっ!
出張行ってる間にみなさんいろんなご指導ありがとうございます!
感激です。
今から早速みなさんのを試して行きたいと思います。
お返事が遅れましてすいません。
同僚と相談した結果monaa産のやり方で進めることにしました。
自分の指摘時間にほかの方にご指導いただいと事を試して
我が力に変えたいと思います。
毎回どうもありがとうございます。
ツイート | ![]() |