Thema: Delphi Eigene Delphi Procedure

Einzelnen Beitrag anzeigen

Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Eigene Delphi Procedure

  Alt 23. Jun 2010, 14:19
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
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler

Geändert von xZise (23. Jun 2010 um 14:24 Uhr) Grund: +Beispiel;
  Mit Zitat antworten Zitat