![]() |
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 |
AW: Eigene Delphi Procedure
Wie jeden anderen Typ auch
|
AW: Eigene Delphi Procedure
Delphi-Quellcode:
Was ist daran jetzt so schwer? :gruebel:
// 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............ |
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:
Und dann halt danach beim FormCreate aufgerufen.
procedure INIT_Player();
var Bild:TImage; begin Bild:= Form1.Image1; Bild.Picture.LoadfromFile('Bild.jpg'); end;
Delphi-Quellcode:
INIT_Player();
|
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:
Stattdessen sollte man es so machen:
var
content : TStringList; begin content := readFile(); end; function readFile(); begin Result := TStringList.Create(); Result.LoadFromFile('....'); end;
Delphi-Quellcode:
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.
var
content : TStringList; begin content := TStringList.Create; readFile(content); content.Free; end; procedure readFile(ALines : TStringList;); begin ALines.LoadFromFile('....'); end; 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 00:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz