テンキー入力に関して、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関数を使って、制御しようとしています。まだ、プログラム文の書き方に問題があるせいか、制御できません。お分かりになる方いらっしゃいますか?
MaskEditでいいのでは?
できれば、TEditでの書き方を教えていもらえないでしょうか?
> if space1.Tet <> '' then
でコンパイルエラーになりません?
あと、if文でbegin endがあるものと、ないものがありますが。
打ち間違えです。すいません。以下の表記で、マイナスと小数点を除いた制御はできています。
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;
> if space1.Text <> '' then
にbegin end は?
あと、
>pos関数を使って、制御しようとしています。
の部分のコードは?
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やコロンなどの書き忘れは、実際にプログラムをコンパイル・実行するときに、調整することができると思います。
りなさん、すみません。先ほど、りなさんの書き込みを見ていたせいか、そのままりなさんのペンネームを使ってしまいました。本当に、すみませんでした。
>beginやendやコロンなどの書き忘れは、実際にプログラムをコンパイル・実行するときに、調整することができると思います。
bigin endのある・なしで動作が変わりますので、
少なくとも、ここで質問されるときは、bigin end のある・なし
は、きちんと区別(確認)して書いたほうがよいかと思います。
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;
ほかはわかったんですけれども、マイナス(VK_SUBTRACT?)と小数点のキーコードがどれかわかりません。知っている方いらっしゃいますか?
よく読んでないけど
http://www.comrade.co.jp/ftp/km2/manual/Properties/VKeyCode.htm
ツイート | ![]() |