簡単な質問です。情報が見つかりません。
私が作成しているコンポーネントの 1 つに、整数型の値があります。
オブジェクト インスペクタに入力された値のみが 0 ~ 10 の範囲内になるようにする必要があります。この範囲外の値はすべて、入力された値が適切でないというメッセージを表示し、フォーカスを Delphi オブジェクト インスペクタに戻します。 .
例:
TMyComponent = class(TComponent)
private
FRangeVal: Integer;
procedure SetRangeVal(const Value: Integer);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property RangeVal: Integer read FRangeVal write SetRangeVal default 0;
end;
...
procedure SetRangeVal(const Value: Integer);
var
OldValue: Integer;
begin
OldValue := Value;
if (Value < 0) or (Value > 10) then
begin
MessageDlg('Please enter a value between 0-10', mtError, [mbOK], 0);
// FRangeVal := OldValue; ?? revert to the last value that worked
// return focus back to property in Inspector ??
end
else
begin
if Value <> FRangeVal then
begin
FRangeVal := Value;
end;
end;
end;
おそらく気付いていない特別な組み込み例外を発生させる必要がありますか? 上記はメッセージ ボックスのポップアップで動作しますが、オブジェクト インスペクタの犯人プロパティへのフォーカスが失われ、再度クリックして値を再度変更する必要があります。入力した値が正しくない場合は、メッセージを表示してフォーカスを戻したいので、新しい値をすばやく入力できます。
PS、上記のコードは Web ブラウザーで記述されているため、元の質問では、プロパティ RangeVal にセッター SetRangeVal を使用しなかったことが示されました。これは単なる入力ミスでした。