The Result
variable is not initialized by default. It doesn't automatically refer to some compiler-generated TStringList
instance. You need to assign a value to Result
. That means having a line like this somewhere in your code:
Result := ...;
An expression like Result.X
is reading the value of Result
in order to get a reference to its X
member, so you need to have given Result
a value already. Larry's answer demonstrates how to do that. It generates a new TStringList
instance, so the caller of this function needs to call Free
on that object sometime.
But in a comment, you mention that you're using this function as a property accessor. It's inconvenient for callers to have to free objects every time they read a property, so your whole plan might be inappropriate. Since it looks like you're trying to expose the description text, you might want to consider this instead:
function TfPackagedItemEdit.GetRTFDescription: TStrings;
begin
Result := richDescription.Lines;
end;
Notice first that I've changed the return type to TStrings
, which is essentially the abstract base class of all kinds of string lists throughout the VCL. TStringList
is one descendant, but TRichEdit.Lines
doesn't use TStringList
. Instead, it uses a specialized TStrings
descendant that knows how to interact with the underlying rich edit control.
Next, notice that I have not created any new objects. Instead, I have returned a reference directly to the control's Lines
property. Users of your RTFDescription
property no longer need to worry about freeing the object they get.