プロパティ値の設定
テキストとしてのプロパティの編集 への移動
プロパティ エディタの 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 つを呼び出します。