TDBGridで入力値を小数第1位までと制限するには

解決


クッキー  2004-06-07 02:35:31  No: 9323

TDBGridで入力制限を行ないたい(小数第1位まで)のです。
Table コンポーネントで  onValidate で処理する方法がありますが、キー入力を無効にしたいのです。なにかよい方法はありませんか


HPW  2004-06-09 08:34:10  No: 9324

ピーマコ :  「前にも同じ質問ありましたよねぇ」
なかざわ :  「そやったかな〜」
ピーマコ :  「あれ〜?ミソジになってからもの忘れ激しいんじゃないですか〜?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;


クッキー  2004-06-10 07:11:10  No: 9325

どうもありがとうございました。
桁数チェックもうまくいきました。


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

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






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