たびたび質問だらけですみません。
Edit内に文字を入力して、OKボタンを押したら
それをStringGridに表示させる処理を書いているのですが
今の処理のままだと、半角文字も全角文字も表示されてしまいます。
ここを、もし半角文字だけの入力限定にするか、全角文字を入力
してOKボタンを押したら、「半角文字を入力してください」という
エラーメッセージを出したいのですが・・・
すみません長くなって、要はOKボタンを押した時に
全角文字を不正とする方法を教えてください。
よろしくお願い致します。
これなんかは
procedure TForm1.Button1Click(Sender: TObject);
var
ws: WideString;
begin
ws := Edit1.Text;
if (Length(Edit1.Text) <> Length(ws)) then
ShowMessage('全角文字がふくまれています!');
end;
それからハンドルに「初心者」とか付けるのは好感できない人が多いようです。
半角しか入れないのであればimeModeでimDisableにしておけばいいんじゃないですか? うちはこの方法でやって、シロートのオペレータさんが間違えたケースはありません。全角で入れる部分はimOpenにしておけば、いたでも全角で入れてくれるし…
>半角しか入れないのであればimeModeでimDisableにしておけばいいんじゃ...
それじゃぁ、コピペの全角入力は防げないよ。
うちは社内開発・社内稼働なんですが、運用上そういう技を使う人はいないのよ。
>...運用上そういう技を使う人はいないのよ。
そんな思い込み、独り善がりが大失敗の元。
入力制限をかける例です。
type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FEditDefProc: TWndMethod;
procedure EditProc(var Message: TMessage);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses
Clipbrd;
procedure TForm1.FormCreate(Sender: TObject);
begin
FEditDefProc:= Edit1.WindowProc;
Edit1.WindowProc:= EditProc;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Edit1.WindowProc:= FEditDefProc;
end;
procedure TForm1.EditProc(var Message: TMessage);
var
wMsg: TMsg;
S : String;
i : Integer;
begin
// 2バイト文字チェック
case Message.Msg of
WM_CHAR:
if Chr(Message.WParam) in LeadBytes then
begin
// メッセージキューのTrailByteを削除
if PeekMessage(wMsg, Edit1.Handle, WM_CHAR, WM_CHAR, PM_NOREMOVE) and
(wMsg.message = WM_CHAR) and (wMsg.wParam in [$40..$FF]) then
PeekMessage(wMsg, Edit1.Handle, WM_CHAR, WM_CHAR, PM_REMOVE);
MessageBeep($FFFFFFFF);
Exit;
end;
WM_PASTE:
if Clipboard.HasFormat(CF_TEXT) then
begin
S:= Clipboard.AsText;
for i:= 1 to Length(S) do
if S[I] in LeadBytes then
begin
MessageBeep($FFFFFFFF);
Exit;
end;
end;
end;
// Edit1デフォルト処理
FEditDefProc(Message);
end;
end.
TEditのimDisableってコピペできるんですか?
Delphi7ですが、CTRL+Vで張り付かなかったんですが、どういう状況でコピペ可能なんでしょうか?
今やってみたら、普通に貼り付きますね。D6 ですが。フォーカス当たってますか?
あー、右クリックでのポップアップ入力が生きてますね。
ショートカットキーはやっぱり殺されてます。
2006ですがCtrl+Vも効きます。
じゃぁ、OSによるのかなぁ?
WIN2000使ってます。
もちろんWin2000でも効きますよ。
おそらくその環境ではimDisableでなくても効かないのでは?
ウチのメインはimHiraとimDisableを使ってるんですが、imHiraのEdit内ではCtrl+V,Ctrl+X,Ctrl+Cは効きますが、imDisableでは効きませんね。
Atok17とIME2000で両方試しましたがウチでは現象変わりませんね。
よくわからん。
まぁ、問題がある以上対策は考えます。
とりあえず、横槍は解決ということで
遅くなってすみません。色々お答えいただいてありがとうございました。
どうにか解決しました。
本当にありがとうございました。
ツイート | ![]() |