7

だから私はすでにコードを持っています。しかし、実行時にバックスペースキーが許可されない場合は、スペースが必要ないため、バックスペースキーを許可し、スペースバーを削除する必要があります。

procedure TForm1.AEditAKeyPress(Sender: TObject; var Key: Char);
var s:string;
begin
s := ('1 2 3 4 5 6 7 8 9 0 .'); //Add chars you want to allow
if pos(key,s) =0 then begin Key:=#0;
showmessage('Invalid Char');
end;

助けが必要ですありがとう:D

4

3 に答える 3

9

すでにコードに含まれているコメントに注意してください。

procedure TForm1.AEditKeyPress(Sender: TObject; var Key: Char);
var s:string;
begin
  s := ('1234567890.'#8); //Add chars you want to allow
  if pos(key,s) =0 then begin
    Key:=#0;
    showmessage('Invalid Char');
  end;
end;
于 2012-07-31T09:01:19.867 に答える
5

許可キーを定数 (速度、最適化) としてセットに入れることをお勧めします。

#2 10 進文字のみを許可し、DecimalSeparator を適切に処理するように更新しました。

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
  Backspace = #8;
  AllowKeys: set of Char = ['0'..'9', Backspace];
begin
  if Key = '.' then Key := DecimalSeparator;
  if not ((Key in AllowKeys) or
    (Key = DecimalSeparator) and (Pos(Key, Edit1.Text) = 0)) then
  begin
    ShowMessage('Invalid key: ' + Key);
    Key := #0;
  end;
end;

より良い結果を得るには、DevExpress、JVCL、EhLib、RxLib、およびその他の多くのライブラリに含まれる TNumericEdit コンポーネントを調べてください。

于 2012-07-31T09:07:29.463 に答える
1

超能力を使用して、浮動小数点値を検証しようとしていると予測します。

コントロールの OnExit イベントまたはフォームの Ok/Save 機能を使用して、次のように正しい形式を確認できます。

procedure TForm1.Edit1Exit(Sender: TObject);
var
  Value: Double;
begin
  if not TryStrToFloat(Edit1.Text, Value) then begin
    // Show a message, make Edit1.Text red, disable functionality, etc.
  end;
end;

このコードは、ロケール固有の小数点記号を使用することを前提としています。

a のみを許可する場合は、3 番目のパラメーターとしてレコードを に'.'渡すことができます。TFormatSettingsTryStrToFloat

于 2012-07-31T15:30:49.557 に答える