StringGridにてセル入力確定直後に、入力チェック・データ修正するには??


りょーちん  2003-10-27 23:18:28  No: 5455

※前回質問させて頂いたときに「〜について」という表記をしてしまいました。
  以後気をつけます。

度々申し訳ありません。  今度はStringGridを使って、セルの入力確定直後に
(確定直後というのはセルにデータを入力して、Enterで確定した時のことです)
入力チェックを行って、ある特定のデータ形式に修正するということを行いたく
試行錯誤しているのですが、どうもうまくいきません。

詳細な内容はというと
セルに金額の数字「98000」と入力して確定する。「セルには\98,000」と表示
される。  という感じです。

OnSetEditTextイベントを利用してやってみたのですが、確定前の1文字入力す
る度にイベントが発生してしまい、1文字入力するたびに全体が選択されてしまい
続けて入力しようとすると、1文字入力後にカーソルキーで選択を解除してやらな
ければならず、非常に扱いにくいような感じです。

なんとか、Enterキーで確定した時だけに処理を行わせることはできないもので
しょうか...  OnSelect と OnExitイベントで処理を行わせてもいいのですが、
なんとかできるなら、入力確定直後に修正したいのです。

どうかお知恵をお貸し下さい。  宜しくお願い致します。

function CutStr(strCutStr : String):String;
var
  i : integer;
  tmpS : string;
  tmpC : Char;

begin
// 文字列から数値以外の文字を取り除きます。

  for i := 1 to Length(WideString(strCutStr)) do
  begin
    tmpS := Copy(strCutStr,i,1);
    tmpC := tmpS[1];
    if tmpC in ['0'..'9'] Then
    Result := Result + tmpC;
  end;

end;

procedure TForm5.StringGrid1SetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: String);
begin
  with StringGrid1 do
    begin
    // 文字列がなんもなしじゃ無い場合だけ処理します。
    if CutStr(Value) <> EmptyStr Then
    begin
      // 金銭表示に修正します。
      Cells[ACol,ARow] := FloatToStrF(StrToFloat(CutStr(Value)), ffCurrency, 15, 0);
    end;
  end;

end;


LupinⅢ  URL  2003-10-27 23:38:10  No: 5456

リターンキーを押したときだけということなのでStringGridのKeyPressイベントを使ってみてはどうでしょう?
ちなみにOptionsのgoEditingがTrueの時にイベントが実行されます。

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
   if Key = #13 then begin
      //やりたい処理
   end;
end;


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

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






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