Synapse

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Cool-Tuc
Beiträge: 100
Registriert: Mi 6. Apr 2011, 17:10

Synapse

Beitrag von Cool-Tuc »

Hallo alle,

ich verwende Lazarus in der aktuellsten Version in Verbindung mit Synapse. Nun möchte ich in einem TImage-Object ein (kleines) Bild (jpg) anzeigen, welches aber auf einem entfernten Server liegt. Verwende ich nun FTP oder HTTP? Mit beiden hatte ich bisher leider keinen Erfolg :( . Sowohl "Login", "Logout" als auch "ftpdownload" (und andere Funktionen) funktionieren aber einwandfrei... :)
Beim TImage-Object gibt es ja die Möglichkeit "...LoadFromFile..." oder "...LoadFromStream..." anzuwenden, aber leider ist es mir bisher nicht gelungen das Bild über ftp in einen Stream zu laden und dann dem TImage-Object zu übergeben... :|

Kann mir jemand einen Tipp geben?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Synapse

Beitrag von Christian »

Du musst das bild zuerst runterladen das machst du mit httpsend.
Nachdem das heruntergehaladen ist liegts im Stream Document von httpsend.
von dort kannsts mit Image.Picture.Loadfromstream laden
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Cool-Tuc
Beiträge: 100
Registriert: Mi 6. Apr 2011, 17:10

Re: Synapse

Beitrag von Cool-Tuc »

Hallo Christian,

leider erfolgt sofort eine Fehlermeldung zu Beginn der Routine 'HTTPSender.HTTPMethod('GET', URL)'

Code: Alles auswählen

begin
  {initial values}
  Result := False;
  FResultCode := 500;


Das macht aber gar keinen Sinn...

Udo

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: Synapse

Beitrag von creed steiger »

http://synapse.ararat.cz/doku.php/publi ... tpdownload
wäre ein Beispiel für http

Allerdings scheint es mir so,als ob du selbst nicht genau weißt,was du da tust.
Der Unterschied zwischen FTP oder HTTP sollte einem schon klar sein bevor man sich an eine Problemlösung macht.

Cool-Tuc
Beiträge: 100
Registriert: Mi 6. Apr 2011, 17:10

Re: Synapse

Beitrag von Cool-Tuc »

Hallo,

der Unterschied ist mir schon klar....nur bei dem Wetter vertippt man sich schon mal....und haut anständig daneben... :oops:
Aber spätestens beim Aufruf

Code: Alles auswählen

jpg.LoadFromStream(Document)
erscheint die Fehlermeldung "JPEG Error...Bad address..." :(

Udo

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Synapse

Beitrag von Michl »

Evtl. falsches Bild-Format (kein jpg????)!

Kannst ja mal analog oben geposteten Bsp folgendes probieren:

- neues Projekt
- ein Button und ein TImage auf die Form plazieren

dann:

Code: Alles auswählen

uses ..., HTTPSend; //Falls nicht gefunden: unter Projekt -> Projekteinstellungen -> Compilereinstellungen -> Pfade -> andere Units: den Pfad von Synapse einstellen
...
procedure TForm1.Button1Click(Sender: TObject);
begin
  with THTTPSend.Create do
  begin
    if HTTPMethod('GET','http://upload.wikimedia.org/wikipedia/commons/b/b5/Lazarus_0.9.7.png') then
    try
      Image1.Picture.LoadFromStreamWithFileExt(Document,'png');
    except
      Application.MessageBox('Cannot display','Error', 0);
    end;
    Free;
  end;
end;
Funktioniert, eben getestet!

Falls nicht, bitte Fehlertext und Fehlerposition posten!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Cool-Tuc
Beiträge: 100
Registriert: Mi 6. Apr 2011, 17:10

Re: Synapse

Beitrag von Cool-Tuc »

Hallo,

der Code läuft soweit einwandfrei. Ersetze ich nun die URL durch meine eigene, bekomme ich leider die Fehlermeldung:

Code: Alles auswählen

Debuggerausnahmen-Nachricht
PNGImageException
This is not PNG-Data

Natürlich, ist ja auch ein JPG. JPGs funktionieren direkt in der IDE unter "picture" aber leider nicht als Stream...oder ich habe etwas übersehen...
Selbst bei Angabe der korrekten Dateiendung

Code: Alles auswählen

Image1.Picture.LoadFromStreamWithFileExt(Document,'JPG');

erscheint der Fehler:

Code: Alles auswählen

JPEG Error bei Adresse XYZ


Udo

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Synapse

Beitrag von Michl »

Verstehe ich nicht, bitte kompletten Code posten! Evtl. hast du vergessen, den Stream als 'jpg' zu definieren?!

eben getestet:

Code: Alles auswählen

    if HTTPMethod('GET','http://www.archispass.org/wp-content/uploads/2007/02/hallo.jpg') then
    try
      Image1.Picture.LoadFromStreamWithFileExt(Document,'jpg'); //hier sagst du, dass der vorliegende Stream als jpg gelesen werden soll
funktioniert!

Wollt eigentlich kein jpg einer Drittseite verlinken, weiss nicht, ob das legitim ist, habe aber auf die Schnelle kein anderes gefunden (ansonsten entferne ich die URL wieder)!

[EDIT] Huch, "LoadFromStreamWithFileExt(Document,'jpg');" , hast du in der Zwischenzeit gepostet! Bitte kompletten Code posten!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Cool-Tuc
Beiträge: 100
Registriert: Mi 6. Apr 2011, 17:10

Re: Synapse

Beitrag von Cool-Tuc »

Hallo,

kann das sein, das es nur an der exakten groß/kleinschreibung von "jpg" liegt? Schreibe ich "JPG" funktionierts, bei "jpg" nicht mehr... :oops: :?: :shock:

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Synapse

Beitrag von Michl »

Code: Alles auswählen

Image1.Picture.LoadFromStreamWithFileExt(Document,'jpg'); //funktioniert!
Image1.Picture.LoadFromStreamWithFileExt(Document,'JPG'); //funktioniert!
Image1.Picture.LoadFromStreamWithFileExt(Document,'Jpg'); //auch das funktioniert
wobei es bei dem Dateinamen in der URL schon auf die Groß- und Kleinschreibung drauf ankommt!

Code: Alles auswählen

HTTPMethod('GET','http://www.archispass.org/wp-content/uploads/2007/02/hallo.jpg'); //funktioniert
HTTPMethod('GET','http://www.archispass.org/wp-content/uploads/2007/02/hallo.JPG'); //funktioniert nicht, da Datei nicht vorhanden!
Zitat: Die meisten Server-Rechner im heutigen Web haben ein Unix- oder von Unix abgeleitetes Betriebssystem. Unix unterscheidet strikt zwischen Groß- und Kleinschreibung bei Dateinamen.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Cool-Tuc
Beiträge: 100
Registriert: Mi 6. Apr 2011, 17:10

Re: Synapse

Beitrag von Cool-Tuc »

Hallo an alle Helfenden,

gut dass man darüber reden kann, dann kommt man meistens Kleinigkeiten auf die Spur die man einfach nicht mehr sieht...nun funktioniert es so wie ich möchte. War eine unglückliche Kombination von Groß/Kleinschreibung....

Danke an alle

Udo

Antworten