テンキー入力の-と点の処理


LUKU  2010-01-10 04:03:59  No: 36868

テンキー入力に関して、ETeditのkeypressに以下のようなコードを書きました(計算機プログラムです)。

var 
  ival  : double;
begin
 if space1.Tet <> '' then
     ival := StrToFloat(space1.Text);
       if ival = 0 then
          space1.Text := '';
          space1.Maxlength := 8;
       if not (Key in ['0'..'9', Char(VK_BACK)]) then
          begin
            key  := #0:
            space1.Maxlength  := 8;
           end;
end;

このようにしたら、桁数を八ケタ・space1への入力は数字とバックスペースのみと、そして頭に0があり、そのあとにそれ以外の数字が入力されたら、0を消してから入力されるという、制御をすることができました。その後、小数点と-の制御をしようとしているのですが、詰まっています。小数点は、スペースに1回のみで、先頭に入力できないようにしようとしています。そして、マイナスも1回のみの入力で、先頭のみにしか入力できないようにしています。pos関数を使って、制御しようとしています。まだ、プログラム文の書き方に問題があるせいか、制御できません。お分かりになる方いらっしゃいますか?


ん?  2010-01-10 04:12:18  No: 36869

MaskEditでいいのでは?


LUKU  2010-01-10 18:13:19  No: 36870

できれば、TEditでの書き方を教えていもらえないでしょうか?


igy  2010-01-10 18:20:54  No: 36871

> if space1.Tet <> '' then

でコンパイルエラーになりません?

あと、if文でbegin endがあるものと、ないものがありますが。


LUKU  2010-01-10 18:39:19  No: 36872

打ち間違えです。すいません。以下の表記で、マイナスと小数点を除いた制御はできています。
var 
  ival  : double;
begin
 if space1.Text <> '' then
     ival := StrToFloat(space1.Text);
       if ival = 0 then
         begin
          space1.Text := '';
          space1.Maxlength := 8;
         end;
       if not (Key in ['0'..'9', Char(VK_BACK)]) then
          begin
            key  := #0:
            space1.Maxlength  := 8;
           end;
end;


igy  2010-01-10 19:51:31  No: 36873

> if space1.Text <> '' then

にbegin end は?


igy  2010-01-10 20:00:23  No: 36874

あと、

>pos関数を使って、制御しようとしています。

の部分のコードは?


りな  2010-01-10 20:32:17  No: 36875

pos関数を使って、制御しようとすると、ほかのところに不具合が出てしまうので、お伺いしました。

var 
  ival  : double;
begin
 if space1.Text <> '' then
     begin
     ival := StrToFloat(space1.Text);
       if ival = 0 then
         begin
          space1.Text := '';
          space1.Maxlength := 8;
         end;
       if not (Key in ['0'..'9','.','-', Char(VK_BACK)]) then
          begin
            key  := #0:
            space1.Maxlength  := 8;
             if (space1.text = '') and pos('-', space1.text) <= 1)
             then この命令文がちょっとわからないです。
             if (space1.text <> '') and pos('.', space1.text) <= 1)
              then ここの部分も小数点をうったら、表示されるという命令文を書きたいのですが、どうかけばいいのか詰まっています。  
           end;
    end

beginやendやコロンなどの書き忘れは、実際にプログラムをコンパイル・実行するときに、調整することができると思います。


LUKU  2010-01-10 20:42:11  No: 36876

りなさん、すみません。先ほど、りなさんの書き込みを見ていたせいか、そのままりなさんのペンネームを使ってしまいました。本当に、すみませんでした。


igy  2010-01-10 23:10:23  No: 36877

>beginやendやコロンなどの書き忘れは、実際にプログラムをコンパイル・実行するときに、調整することができると思います。

bigin endのある・なしで動作が変わりますので、
少なくとも、ここで質問されるときは、bigin end のある・なし
は、きちんと区別(確認)して書いたほうがよいかと思います。


これでイケル?  2010-01-10 23:35:44  No: 36878

Space1(TEdit)のOnKeyPressイベント

var
 isDot: Boolean;
 sst, Minus: Integer;
 ss: string;
begin
  ss := Space1.Text;
  sst := Space1.SelStart;
  isDot := (Pos('.', ss) > 0);
  Minus := Integer(Pos('-', ss) > 0);
  Space1.Maxlength := 8 + Minus;
  case Key of
   Char(VK_BACK): exit;
   '1'..'9':
        if (ss[Minus+1] = '0')and(ss[Minus+2] <> '.') then
        begin
         Delete(ss, Minus+1, 1);
         Space1.Text := ss;
         Space1.SelStart := sst-1;
        end;
   '0': if (sst = Minus+1)and(ss[Minus+1] = '0') then Key := #0;
   '-': if (sst > 0) then Key := #0;
   '.': if (isDot)or(sst = Minus) then Key := #0;
   else
    Key := #0;
  end;
end;


LUKU  2010-01-11 19:49:28  No: 36879

ほかはわかったんですけれども、マイナス(VK_SUBTRACT?)と小数点のキーコードがどれかわかりません。知っている方いらっしゃいますか?


けど  2010-01-11 20:07:22  No: 36880

よく読んでないけど
http://www.comrade.co.jp/ftp/km2/manual/Properties/VKeyCode.htm


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

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






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