4 3桁区切りのプログラム(シンプルというより分かりやすく、原始的に作っています。)

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;

back