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.