Die Variable wird standardmäßig nicht initialisiert. Es bezieht sich nicht automatisch auf eine vom Compiler generierte Instanz TStringList
. Sie müssen Result
einen Wert zuweisen. Das bedeutet eine Zeile wie diese irgendwo in Ihrem Code mit:
Result := ...;
Ein Ausdruck wie Result.X
ist der Wert Result
, um das Lesen einen Verweis auf seine X
Mitglied zu bekommen, so dass Sie Result
gegeben haben brauchen eine Wert bereits. Larry's answer demonstriert, wie man das macht. Es generiert eine neueTStringList
Instanz, so dass der Aufrufer dieser Funktion irgendwann Free
für dieses Objekt aufrufen muss.
Aber in einem Kommentar erwähnen Sie, dass Sie diese Funktion als Eigenschaft Accessor verwenden. Es ist unangenehm für Anrufer, Objekte jedes Mal freizugeben, wenn sie eine Eigenschaft lesen, so dass Ihr gesamter Plan unangemessen ist. Da es aussieht wie du bist versuchen, den Beschreibungstext zu belichten, können Sie diese stattdessen berücksichtigen:
function TfPackagedItemEdit.GetRTFDescription: TStrings;
begin
Result := richDescription.Lines;
end;
Hinweis zuerst, dass ich die Rückkehr Typ TStrings
geändert haben, die im Wesentlichen die abstrakte Basisklasse ist alle Arten von String-Listen in der VCL. TStringList
ist ein Nachkomme, aber TRichEdit.Lines
verwendet TStringList
nicht. Stattdessen verwendet es einen speziellen TStrings
Nachkommen, der mit dem zugrunde liegenden Rich-Edit-Steuerelement interagieren kann.
Als nächstes beachten Sie, dass ich keine neuen Objekte erstellt habe. Stattdessen habe ich einen Verweis direkt auf die Eigenschaft Lines
des Steuerelements zurückgegeben. Benutzer Ihrer RTFDescription
-Eigenschaft müssen sich nicht mehr darum kümmern, das Objekt zu befreien, das sie erhalten.
Warnungen sind Sie Freund. 99% der Zeit lassen sie dich über etwas sehr Schlechtes wissen. –
LOL, ich habe gerade ein Problem untersucht, das damit in Zusammenhang zu stehen schien - ich wollte sehen, ob ich Recht hatte (definitiv NICHT OK, wenn man annimmt, dass eine boolesche Funktion false zurückgibt, wenn man vor der Aufgabe verschwindet). Ich lag richtig. Wichtiger Hinweis: Deaktivieren Sie die Compilerwarnungen nicht. Dieses spezielle Projekt hatte sie alle ausgeschaltet. D'OH! (nicht ich, btw.) –