AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Delphi Procedure

Ein Thema von Chris92 .A · begonnen am 23. Jun 2010 · letzter Beitrag vom 23. Jun 2010
Antwort Antwort
Chris92 .A

Registriert seit: 19. Mai 2010
56 Beiträge
 
#1

Eigene Delphi Procedure

  Alt 23. Jun 2010, 13:00
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Eigene Delphi Procedure

  Alt 23. Jun 2010, 13:04
Wie jeden anderen Typ auch
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Eigene Delphi Procedure

  Alt 23. Jun 2010, 13:24
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?

Geändert von implementation (23. Jun 2010 um 13:59 Uhr) Grund: noch Möglichkeiten hinzugefügt...
  Mit Zitat antworten Zitat
Chris92 .A

Registriert seit: 19. Mai 2010
56 Beiträge
 
#4

AW: Eigene Delphi Procedure

  Alt 23. Jun 2010, 14:10
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.
  INIT_Player();

Geändert von mkinzler (23. Jun 2010 um 14:12 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat
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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:18 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