Diese Implementierung funktioniert bei mir einwandfrei:
Delphi-Quellcode:
unit tststrings;
interface
uses
Classes,
SysUtils;
type
TTstStrings =
class(TComponent)
private
FStrings: TStrings;
procedure SetStrings(
const Value: TStrings);
public
constructor Create(AOwner: TComponent);
override;
destructor Destroy;
override;
published
property Strings: TStrings
read FStrings
write SetStrings;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
TstStrings', [TTstStrings]);
end;
{ TTstStrings }
constructor TTstStrings.Create(AOwner: TComponent);
begin
inherited;
FStrings:= TStringList.Create;
end;
destructor TTstStrings.Destroy;
begin
FreeAndNil(FStrings);
inherited;
end;
procedure TTstStrings.SetStrings(
const Value: TStrings);
begin
Assert( Assigned(Value) );
FStrings.Assign(Value);
end;
end.
Die Methode nach der write-Direktive gibt den Setter an, der Aufgerufen wird. Statt der Getter und Setter, wie in Java, C++, Smalltalk, etc. üblich, gibt es unter Delphi diese Spezialität, die Properties, um es dem Entwickler "angenehmer" zu machen. Außerdem basieren andere Konzepte zB der Object-Inspector auf dem Prinzip der Properties (in Java hingegen muss man sich für ähnlichen Komfort an genaue Namenskonventionen halten)