Moin
das erstellt auch ein Bild und so weiter. Aber danach kannst du darauf ja nicht mehr zugreifen. Und das ist das Hauptproblem: Du solltest ja zum Beispiel ein Parent setzen, damit das Ding angezeigt wird. Und natürlich musst du es auch wieder freigeben.
Deshalb würde ich als einfachste Lösung vorschlagen, du gibst das Bild als Funktion zurück. Dann kannst du nachträglich zum Beispiel den Parent setzen. Übrigens das Bild würde automatisch freigegeben, wenn der Owner freigegeben wird. Da du aber keinen übergibst, wird das auch nicht automatisch freigegeben. D.h. entweder Owner setzen oder selber nachher freigeben. Aber für ersteres müsste die Methode den Owner kennen und zweites müsstest du das spätere Bild kennen.
Übrigens bevor jemand meint so macht man es nicht und mir vorwirft ich empfehle unsichere Methoden:
Eigentlich ist es immer am besten, wenn du das Objekt erstellst, dann einer Methode übergibst. Du hingegen erzeugst ein Objekt in der Methode und das führt unweigerlich zu den Problem: Wer gibt das jetzt wieder frei? Deshalb hat es sich durchgesetzt das Objekt zu übergeben.
Ein Beispiel:
Du hast eine coole Methode geschrieben, die den Inhalt einer Datei in eine StringList speichert. Anfangs wird man das in der Regel so schreiben:
Delphi-Quellcode:
var
content : TStringList;
begin
content := readFile();
end;
function readFile();
begin
Result := TStringList.Create();
Result.LoadFromFile('....');
end;
Stattdessen sollte man es so machen:
Delphi-Quellcode:
var
content : TStringList;
begin
content := TStringList.Create;
readFile(content);
content.Free;
end;
procedure readFile(ALines : TStringList;);
begin
ALines.LoadFromFile('....');
end;
In diesem Fall erspart es nichts, aber wenn man dann noch etwas anderes macht wie z.B. besondere Zeilen zu löschen, dann ist das schon etwas anderes. Und man weiß im zweiten Fall wer das Objekt freigibt oder ähnliches.
Wenn man dennoch die erste Methode "zufällig" bevorzugt (es kann Gründe davor geben), dann würde ich das nicht readFile nennen, sondern eher was mit createListAndRead().
MfG
Fabian