Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TImage zu Laufzeit zuordnen (https://www.delphipraxis.net/57088-timage-zu-laufzeit-zuordnen.html)

fran 15. Nov 2005 17:18


TImage zu Laufzeit zuordnen
 
Hallo Leute,

ich hätte da mal wieder eine Frage an alle Delphi Experten.

Also ich schreibe da gerade eine Client/Server Anwendung. Der Client holt sich neben anderen Daten auch eine URL auf ein JPEG Bild, für die entsprechenden Daten.

Ein Bild zur Laufzeit zu zuordnen ist ja kein Problem. Ich habe das schon oft wie im folgenden Beispiel gemacht.

Delphi-Quellcode:
image6.Picture.LoadFromFile('c:\bilder\1.jpg');
Aber leider funktioniert das nicht mit einer URL.

Jetzt meine Frage: Gibt es da eine Möglichkeit, das das irgendwie doch geht?

Vielen Dank im Voraus sagt schon mal

Fran

Khabarakh 15. Nov 2005 17:21

Re: TImage zu Laufzeit zuordnen
 
Du kannst dir per TIdHttp.Get (Indy-Komponente) das Bild in einen Stream und von diesem dann in das Image (Delphi-Referenz durchsuchenLoadFromStream) laden.

SirThornberry 15. Nov 2005 17:22

Re: TImage zu Laufzeit zuordnen
 
du musst das bild zuvor herunterladen (in Speicher oder Datei), dazu geeignet sind zum Beispiel die Indy-Komponenten. Wenn du das Bild von der URL geladen hast (idealerweise in einen memorystream damit nicht zwischengespeichert werden muss) kannst du dann mit LoadFromStream das ganze in ein JPEGImage laden.

fran 15. Nov 2005 18:16

Re: TImage zu Laufzeit zuordnen
 
Da ich bisher nicht wußte, das ich das Bild erst runterladen muss, konnte ich natürlich auch nicht danach suchen, aber jetzt da ich es weiß habe ich hier im Forum eine einfache und geniale Möglichkeit gefunden. Und man muss nicht zwangsweise INDY verwenden.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var Datei,Ziel:PChar;
begin
   try
    Datei := 'http://127.0.0.1/bilder/1.jpg';
    Ziel := 'E:\temp\0.jpg';
    UrlDownloadToFile(nil, Datei, Ziel, 0, nil);
   except
    // Fehlermeldung ausgeben
  end;
end;
Das Einzige was zusätzlich noch zu tun wäre, ist den Temp Ordner beim Beenden zu leeren.

Khabarakh 15. Nov 2005 19:40

Re: TImage zu Laufzeit zuordnen
 
Zitat:

Zitat von fran
Da ich bisher nicht wußte, das ich das Bild erst runterladen muss, konnte ich natürlich auch nicht danach suchen, aber jetzt da ich es weiß habe ich hier im Forum eine einfache und geniale Möglichkeit gefunden.

Die von mir und SirThornberry beschriebene Methode ist aber genialer :mrgreen: . Jedenfalls läuft alles im Arbeitsspeicher ab, es muss keine temporäre Datei erstellt werden.

PS: Ich z.B. besitze kein Laufwerk "E" :wink: .
Delphi-Referenz durchsuchenGetTempFileName

fran 15. Nov 2005 19:50

Re: TImage zu Laufzeit zuordnen
 
Zitat:

Zitat von Khabarakh
Die von mir und SirThornberry beschriebene Methode ist aber genialer :mrgreen: . Jedenfalls läuft alles im Arbeitsspeicher ab, es muss keine temporäre Datei erstellt werden.

PS: Ich z.B. besitze kein Laufwerk "E" :wink: .
Delphi-Referenz durchsuchenGetTempFileName

Genialer ist sie schon, aber ich schrieb genial und einfach und für mich als Delphi Anfänger ist meine gefundene Methode doch erheblich einfacher. Bei eurer Methode mit streams habe ich leider keine Ahnung wie ich das hinkriegen sollte.

P.S. Ich besitze schon ein Laufwerk E. Ich weiß das hat nicht jeder, ist allerdings auch nur eine einfache Testversion. Ich werde später selbstverständlich nicht direkt E darein schreiben. Entweder nehme ich das Temp Laufwerk von Windows, das vom Internet-Explorer (falls möglich) oder ich schreibe das noch zusätzlich in meine bereits vorhandene INI Datei mitrein.

P.P.S: Übrigens bleibt auch die IP und damit die URL des Bildes nicht so wie im Beispiel. Sonst könnte man ja nur Bilder von sich herunterladen.

Der_Unwissende 15. Nov 2005 20:35

Re: TImage zu Laufzeit zuordnen
 
Zitat:

Zitat von fran
Da ich bisher nicht wußte, das ich das Bild erst runterladen muss, konnte ich natürlich auch nicht danach suchen, aber jetzt da ich es weiß habe ich hier im Forum eine einfache und geniale Möglichkeit gefunden. Und man muss nicht zwangsweise INDY verwenden.

Na ja, wenn du nicht irgendeinen guten Grund hast, kein Indy zu nehmen
Delphi-Quellcode:
var jpg : TJPEGImage; // Globaler und irgendwann eine Instanz erzeugt
...
...

var url : String;
    buffer : TMemoryStream;
begin
  buffer := TMemoryStream.Create;
  url := 'http://127.0.0.1/bilder/1.jpg';
  IdHttp.Get(url, buffer);
  jpg.LoadFromStream(buffer);
  buffer.Free;
end;

SirThornberry 16. Nov 2005 16:03

Re: TImage zu Laufzeit zuordnen
 
@Der_Unwissende: Du solltest noch "Buffer.Position := 0" hinzufügen sonst dürfte das ganze schief gehen. Und wenn du den MemoryStream zur Laufzeit erzeugst wäre es auch sinnvoll TIdHttp auch zur Laufzeit zu erstellen und dann freizugeben. Damit hätte man dann alles in einer procedure und muss nicht erst ein Tidhttp aufs formular packen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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