プロパティ値の設定

提供: RAD Studio
移動先: 案内検索

テキストとしてのプロパティの編集 への移動


プロパティ エディタの SetValue メソッドでは、[オブジェクト インスペクタ]でユーザーから入力された文字列を受け取り、その文字列を適切な型に変換してプロパティの値に設定します。受け取った文字列がプロパティの適切な値を表していない場合、SetValue では例外を送出し、間違った値を使用しないようにしなければなりません。

文字列値を読み取ってプロパティに格納するには、プロパティ エディタの SetValue メソッドをオーバーライドします。

SetValue では、文字列を変換し、その値を検証してから、Set メソッドの 1 つを呼び出します。

次のコードでは、Integer 型のプロパティ TIntegerProperty の GetValue メソッドと SetValue メソッドの例を示しています。整数は順序型なので、

  • GetValue では、GetOrdValue を呼び出し、その結果を文字列に変換しています。
  • SetValue では、文字列を整数に変換し、何らかの範囲チェックを実行してから、SetOrdValue を呼び出しています。
function TIntegerProperty.GetValue: string;
begin
  with GetTypeData(GetPropType)^ do
    if OrdType = otULong then // unsigned
      Result := IntToStr(Cardinal(GetOrdValue))
    else
      Result := IntToStr(GetOrdValue);
end; 
procedure TIntegerProperty.SetValue(const Value: string);
  procedure Error(const Args: array of const);
  begin
    raise EPropertyError.CreateResFmt(@SOutOfRange, Args);
  end;
var
  L: Int64;
begin
  L := StrToInt64(Value);
  with GetTypeData(GetPropType)^ do
    if OrdType = otULong then
    begin   // unsigned compare and reporting needed
      if (L < Cardinal(MinValue)) or (L > Cardinal(MaxValue)) then
      // bump up to Int64 to get past the %d in the format string
        Error([Int64(Cardinal(MinValue)), Int64(Cardinal(MaxValue))]);
    end
    else if (L < MinValue) or (L > MaxValue) then
      Error([MinValue, MaxValue]);
  SetOrdValue(L);
end;

上記のような特定の例の詳細よりも、下記の原則の方が重要です。

  • GetValue では値を文字列に変換します。
  • SetValue では、文字列を変換し、その値を検証してから、"Set" メソッドの 1 つを呼び出します。

関連項目