※前回質問させて頂いたときに「〜について」という表記をしてしまいました。
以後気をつけます。
度々申し訳ありません。 今度は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;
リターンキーを押したときだけということなのでStringGridのKeyPressイベントを使ってみてはどうでしょう?
ちなみにOptionsのgoEditingがTrueの時にイベントが実行されます。
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then begin
//やりたい処理
end;
end;
ツイート | ![]() |