Man kann eine Eigenschaft nachträglich wie folgt "schreibschützen":
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| type TMyClass = class(TParentClass) private procedure SetMyProperty(Value : Integer); function IsMyPropertyStored : Boolean; published property MyProperty write SetMyProperty stored IsMyPropertyStored; end;
procedure TMyClass.SetMyProperty(Value : Integer); begin if not MyPropertyReadOnly then inherited MyProperty := Value; end;
function TMyClass.IsMyPropertyStored : Boolean; begin Result := not MyPropertyReadOnly; end; |
Der Ausdruck "MyPropertyReadOnly" entspricht dabei der Bedingung, wann die Eigenschaft nicht geändert werden darf. Die Funktion "IsMyPropertyStored" sorgt dafür, daß die Eigenschaft dann auch nicht in der Formulardatei gespeichert wird.
Wenn Du die Eigenschaft "Height" schreibschützen möchtest, dann solltest Du aber besser den folgenden Quelltext verwenden (beim Ändern von "Height" wird intern die Funktion "SetBounds" aufgerufen):
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| type TMyClass = class(TParentClass) private function IsHeightStored : Boolean; public procedure SetBounds(ALeft, ATop, AWidth, AHeight : Integer); override; published property Height stored IsHeightStored; end;
procedure TMyClass.SetBounds(ALeft, ATop, AWidth, AHeight : Integer); begin if HeightReadOnly then AHeight := Height; inherited SetBounds(ALeft, ATop, AWidth, AHeight); end;
function TMyClass.IsHeightStored : Boolean; begin Result := not HeightReadOnly; end; |