Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Eigene Delphi Procedure (https://www.delphipraxis.net/152456-eigene-delphi-procedure.html)

Chris92 .A 23. Jun 2010 13:00

Eigene Delphi Procedure
 
Hallo, ich wollte euch fragen ob ihr mir bei einem Problem helfen könntet und zwar wollte ich wissen wie ich in einer eigenen Procedure ein Image benutzen kann. Die Procedure soll ein Bild mit "Picture.LoadFromFile" laden.


Schonmal Danke im vorraus.


MFG Chris92. A

mkinzler 23. Jun 2010 13:04

AW: Eigene Delphi Procedure
 
Wie jeden anderen Typ auch

implementation 23. Jun 2010 13:24

AW: Eigene Delphi Procedure
 
Delphi-Quellcode:
// z.B. so:
procedure TForm1.Prozedur;
begin
  Image1.Picture.LoadFromFile(...);
end;
// oder so:
procedure Prozedur(Image: TImage);
begin
  Image.Picture.LoadFromFile(...);
end;
// Wenn du's unbedingt selbst createn willst:
procedure TForm1.Prozedur(out Image: TImage);
begin
  Image := TImage.Create(self);
  Image.Picture.LoadFromFile(...);
end;
// oder...
function TForm1.Funktion: TImage;
var
  Image: TImage;
begin
  Image := TImage.Create(self);
  Image.Picture.LoadFromFile(...);
  Result := Image;
  // oder im alten TP-Style:
  Funktion := Image;
end;
// und es gibt noch hunderte mehr Möglichkeiten............
Was ist daran jetzt so schwer? :gruebel:

Chris92 .A 23. Jun 2010 14:10

AW: Eigene Delphi Procedure
 
Danke ich hatte es am Anfang anders versucht ich deklarierte intern in der Procedure die image variabel wie folgender Maßen


Delphi-Quellcode:
procedure INIT_Player();
var Bild:TImage;
begin
  Bild:= Form1.Image1;
  Bild.Picture.LoadfromFile('Bild.jpg');
end;
Und dann halt danach beim FormCreate aufgerufen.
Delphi-Quellcode:
  INIT_Player();

xZise 23. Jun 2010 14:19

AW: Eigene Delphi Procedure
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz