TDBGridで入力制限を行ないたい(小数第1位まで)のです。
Table コンポーネントで onValidate で処理する方法がありますが、キー入力を無効にしたいのです。なにかよい方法はありませんか
ピーマコ : 「前にも同じ質問ありましたよねぇ」
なかざわ : 「そやったかな〜」
ピーマコ : 「あれ〜?ミソジになってからもの忘れ激しいんじゃないですか〜?1年くらい前のことですけど」
なかざわ : 「なんや?DBGridやのうて StringGridでの質問やろ。それならおぼえとるわい!」
オジャマ : 「あの時に使われていたTInplaceEditは DBGridの場合でもOKなんですか?」
なかざわ : 「TInplaceEditやったら DBGridでも一緒やで」
オジャマ : 「でも〜それだとチョット問題があったんですよね〜」
ピーマコ : 「そうそう、たしか小数点があると〜途中の文字編集が出来なくなっちゃいます」
オジャマ : 「そうなんです。その問題…なんとかなりませんか?」
なかざわ : 「ンなもん簡単や。caret位置のチェック追加しといたらエエやん。」
オジャマ : 「あッそっか。caretの位置が小数点の右側にある時だけ無効にすればいいんですよね」
ピーマコ : 「お〜ナルホド…、これでもうカンペキですよ〜」
なかざわ : 「い〜やまだやな、ホカにもまだマズイとこあるで」
オジャマ : 「え〜?何かまだ問題残ってましたっけ?」
なかざわ : 「小数点を後から追加することもあるやんか。その位置のチェックもしとかなアカン」
ピーマコ : 「さすがナカザワさん、細かいとこまで良く気がつきますね〜よる年ナミのせいですか〜?」
オジャマ : 「ピーマコさん、それをいうなら'年のコウ'でしょ♪^^;」
なかざわ : 「(--;…ホンマにもう…、ウチを年寄り扱いするヤツは今日のお昼もおごってやらん!」
ピーマコ : 「あぁっ^^; チョッと口がスベッタだけですぅ〜今月も大ピンチなんでお願いしますよ〜」
オジャマ : 「ピーマコさ〜ん、それをいうなら'チョッと口が過ぎた'では…^^;;;」
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
const
MNCNT = 1;
var
K, dotPos, crtPos, numLen : Integer;
ipEdit : TInplaceEdit;
begin
K := ord(Key);
if K = $08 then exit;
if not(K in [$2E, $30..$39]) then begin
Key := #0;
exit;
end;
if TWinControl(Sender).ControlCount > 0 then begin
ipEdit := TWinControl(Sender).Controls[0] as TInplaceEdit;
numLen := Length(ipEdit.Text);
crtPos := ipEdit.SelStart;
dotPos := Pos('.', ipEdit.Text);
if dotPos > 0 then begin
case K of
$2E: Key := #0;
else if (numLen - dotPos >= MNCNT)and(crtPos >= dotPos) then Key := #0;
end;
end else if (K = $2E)and(numLen - crtPos > MNCNT) then Key := #0;
end;
end;
どうもありがとうございました。
桁数チェックもうまくいきました。
ツイート | ![]() |