Den Eigenschaftswert setzen
Nach oben zu Die Eigenschaft als Text bearbeiten
Die Methode SetValue nimmt einen im Objektinspektor eingegebenen String entgegen, konvertiert ihn in den entsprechenden Typ und weist ihn der Eigenschaft als Wert zu. Enthält der String keinen für die Eigenschaft gültigen Wert, sollte SetValue eine Exception auslösen und den Wert nicht verwenden.
Um String-Werte in Eigenschaften zu speichern, überschreiben Sie die Methode SetValue des Eigenschaftseditors.
In SetValue sollte der String konvertiert und vor dem Aufrufen einer der Set-Methoden validiert werden.
Beispiel
Das folgende Beispiel zeigt die Verwendung der Methoden GetValue und SetValue für den Integertyp von TIntegerProperty. Weil Integer ein Ordinaltyp ist:
- Ruft GetValue GetOrdValue auf und konvertiert das Ergebnis in einen String.
- Konvertiert SetValue den String in einen Integerwert, führt Bereichsprüfungen durch und ruft anschließend SetOrdValue auf.
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;
Die Details in diesem Beispiel sind weniger wichtig als das Grundprinzip:
- GetValue konvertiert den Wert in einen String.
- SetValue konvertiert den String und validiert vor dem Aufrufen einer der Set-Methoden den Wert.