3桁区切りのプログラムをコンポネとか入れずに使いたい人。
OnKeyPressにコピペしたらすぐに使えるという内容。 参考までにどうぞ。
とりあえず 10桁までにしておきます。 それ以上必要な方はカスタムしてください。
動作の保証は出来ません。 あくまで自己責任でどうぞ。分かりやすく解説コメントいれてます。
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
lcnt1:integer;
lcma1:string;
ans1 :string;
back_log1:integer;
down_cnt1:integer;
NUM:string;
begin
NUM := '0123456789';
if (Pos(Key,NUM)=0) and (Ord(Key) <> VK_BACK) then
Key := #0000
else
//初期値
lcnt1 := Length(Edit1.Text);
lcma1 := ',';
ans1 := Edit1.Text;
back_log1 := 1;//カウントダウン用変数
//カウントダウン処理はカウントアップ処理より先が都合良さそうです。
//カウントカウントダウン処理
if (Ord(Key) = VK_BACK) then begin//BackSpaceキーが押されたら処理開始
down_cnt1 := Length(Edit1.Text);
if down_cnt1 = 5 then begin//3桁目の処理
delete(ans1,2,1); //文字列の2バイト目から1バイト消す。
aEdit1.Text := ans1;
end;
if down_cnt1 = 6 then begin//4桁目の処理
delete(ans1,3,1); //文字列の2バイト目から1バイト消す。
Insert(lcma1,ans1, 2);//2バイト目に入力
Edit1.Text := ans1;
end;
if down_cnt1 = 7 then begin//5桁目の処理
delete(ans1,4,1); //文字列の4バイト目から1バイト消す。
Insert(lcma1,ans1, 3);//3バイト目に入力
Edit1.Text := ans1;
end;
if down_cnt1 = 8 then begin//6桁目の処理
delete(ans1,5,1); //文字列の5バイト目から1バイト消す。
Insert(lcma1,ans1, 4);//4バイト目に入力
Edit1.Text := ans1;
end;
if down_cnt1 = 9 then begin//2つのカンマ処理
delete(ans1,2,1); //文字列の2バイト目から1バイト消す。
delete(ans1,5,1); //文字列の5バイト目から1バイト消す。
Insert(lcma1,ans1, 4);//4バイト目に入力
Edit1.Text := ans1;
end;
if down_cnt1 = 10 then begin//2つのカンマ処理
delete(ans1,3,1); //文字列の3バイト目から1バイト消す。
delete(ans1,6,1); //文字列の6バイト目から1バイト消す。
Insert(lcma1,ans1, 2);//2バイト目に入力
Insert(lcma1,ans1, 6);//6バイト目に入力
Edit1.Text := ans1;
end;
if down_cnt1 = 11 then begin//2つのカンマ処理
delete(ans1,4,1); //文字列の4バイト目から1バイト消す。
delete(ans1,7,1); //文字列の7バイト目から1バイト消す。
Insert(lcma1,ans1, 3);//3バイト目に入力
Insert(lcma1,ans1, 7);//7バイト目に入力
Edit1.Text := ans1;
end;
if down_cnt1 = 13 then begin//3つのカンマ処理
delete(ans1,2,1); //文字列の4バイト目から1バイト消す。
delete(ans1,5,1); //文字列の7バイト目から1バイト消す。
delete(ans1,8,1); //文字列の7バイト目から1バイト消す。
Insert(lcma1,ans1, 4);//4バイト目に入力
Insert(lcma1,ans1, 8);//8バイト目に入力
Edit1.Text := ans1;
end;
back_log1 := 2;
end;
//カウントアップ処理
if back_log1 = 1 then begin
if (lcnt1 = 3)or(lcnt1 = 5)or(lcnt1 = 6) or(lcnt1 = 7)or
(lcnt1 = 8)or(lcnt1 = 9)or(lcnt1 = 10)or(lcnt1 = 11) then begin//3桁目にカンマを入れる
if lcnt1 = 3 then begin
Insert(lcma1,ans1, 2);//2バイト目に入力
Edit1.Text := ans1;
end;
if lcnt1 = 5 then begin
delete(ans1,2,1); //文字列の2バイト目から1バイト消す。
Insert(lcma1,ans1, 3);//3バイト目に入力
Edit1.Text := ans1;
end;
if lcnt1 = 6 then begin
delete(ans1,3,1); //文字列の3バイト目から1バイト消す。
Insert(lcma1,ans1, 4);//4バイト目に入力
Edit1.Text := ans1;
end;
if lcnt1 = 7 then begin //2つのカンマ処理
delete(ans1,4,1); //文字列の3バイト目から1バイト消す。
Insert(lcma1,ans1, 2);//2バイト目に入力
Insert(lcma1,ans1, 6);//6バイト目に入力
Edit1.Text := ans1;
end;
if lcnt1 = 9 then begin
delete(ans1,2,1); //文字列の2バイト目から1バイト消す。
delete(ans1,5,1); //文字列の5バイト目から1バイト消す。
Insert(lcma1,ans1, 3);//3バイト目に入力
Insert(lcma1,ans1, 7);//7バイト目に入力
Edit1.Text := ans1;
end;
if lcnt1 = 10 then begin
delete(ans1,3,1); //文字列の2バイト目から1バイト消す。
delete(ans1,6,1); //文字列の5バイト目から1バイト消す。
Insert(lcma1,ans1, 4);//3バイト目に入力
Insert(lcma1,ans1, 8);//7バイト目に入力
Edit1.Text := ans1;
end;
if lcnt1 = 11 then begin //3つのカンマ処理
delete(ans1,4,1); //文字列の2バイト目から1バイト消す。
delete(ans1,7,1); //文字列の5バイト目から1バイト消す。
Insert(lcma1,ans1, 2); //3バイト目に入力
Insert(lcma1,ans1, 6); //7バイト目に入力
Insert(lcma1,ans1, 10);//7バイト目に入力
Edit1.Text := ans1;
end;
end;
end;
SendMessage(Edit1.Handle, WM_KeyDown, VK_End, 0); //常にキャレットを右に置く処理
end;
|