StringGridの小数入力制限


やす  2003-05-10 09:55:20  No: 3517

StringGrid各セルの入力値を小数1桁までまたか小数以下なしに
制限したいと思ってます。
SetEditTextを使えば制限を掛けれますが、どうも自分の望んでい
る物と違っていて。。。
そこで、入力を検査する関数を作りたいのですが、良い案が浮かび
ません、どなたかサンプルになる様なコードを教えていただけない
でしょうか?


かっぱの花道  2003-05-11 16:56:27  No: 3518

「かごッパ」 小数1桁までの数字制限なら、これでいけるッパでしょ。

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var
  K, vp : 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;
  ipEdit := FindControl(GetWindow(StringGrid1.Handle, GW_CHILD)) as TInplaceEdit;
  if Assigned(ipEdit) then begin
    vp := Pos('.', ipEdit.Text);
    if (vp > 0)and(vp < Length(ipEdit.Text)) then  Key := #0;
  end;
end;

「つじッパ」 おぉ〜ナルホド…これでイッケンラクチャクでケロ…ではメシ…
「かごッパ」 けど…チョット問題が残ってるッパよ。
「つじッパ」 ン?まだでケロ…
「らぶッパ」 そっか、これだと小数点がある文字列の途中が編集できないっパ。
「みかッパ」 もし入力間違えしたら、お尻から消してやり直せばいいッパじゃん。
「つじッパ」 そうでケロ…これでやっとメシ…
「らぶッパ」 でも〜やっぱり、それじゃ少し面倒ッパね。
「かごッパ」 うーん、やり方変えなくちゃダメッパか〜
「つじッパ」 ン…ならお先に…でケロ…
「らぶッパ」 変更前じゃなくて〜、このように変更後にチェックした方がいいッパかも。
var
  SavedCell : string;

procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String);
begin
  SavedCell := Value;
end;

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String);
var
  vp : Integer;
begin
  vp := Pos('.', Value);
  if (vp > 0)and(vp < Length(Value)-1) then begin
    StringGrid1.Cells[ACol, ARow] := SavedCell;
    StringGrid1.EditorMode := True;
  end else begin
    SavedCell := Value;
  end;
end;

「かごッパ」 これに数字キーチェックを追加したらOKッパかな。
「みかッパ」 この続きは後にして、そろそろ食事にするッパ。
「らぶッパ」 あれっ?、キュウリが全部なくなってるッパです〜
「みかッパ」 コラッ、つじッパ!
「つじッパ」 …Zzz…もうコレ以上食えないでケロ…Zzzz…


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

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






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