Timage i ladowanie obrazka prosto z strony www

0

Czy jest jakiś prosty sposób aby załadowac obrazek do komponentu Timage z strony www ,

gdy robie to w taki sposob

image1.Picture.LoadFromFile('http://mojastrona.com/200.jpg');

pojawia sie blad ...

0

najpierw pobierz plik na dysk, pozniej laduj.
a w ogole to poszukaj bo juz bylo nie raz poruszane.

0

Nie musisz koniecznie pobierać do pliku możesz pobrać do strumienia pamięci MemoryStream i później pokazać
w Image. Poniższy kod robi to przy użyciu modułu WinInet. I nawet nie googlowałeś, bo spokojnie znalazł byś
taki kod. Jak nie chcesz korzystać z wolnego modułu wykorzystującego Internet Explorera to polecam do tego
komponenty Synapse. Jeszcze od biedy może być Indy. Jednak Synapse, wydają mi się do tego nieco lepsze.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, JPEG, WinInet;

type
  TForm1 = class(TForm)
    Button1 : TButton;
    Image1 : TImage;
    procedure Button1Click(Sender : TObject);
  private
  public
  end;

var
  Form1 : TForm1;

implementation

{$R *.dfm}

procedure DownloadToStream(const URL : string; const MyStream : TStream);
var
  Buffer : array[1..1024] of Byte;
  hSession, hURL : HINTERNET;
  dwRead : DWORD;
  pBuf : Pointer;
  dwBufLen : DWORD;
  dwIndex : DWORD;
begin
  hSession := InternetOpen('Opera/9.63 (Windows NT 5.1; U; pl)',
    INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    hURL := InternetOpenURL(hSession, PChar(URL), nil, 0, INTERNET_FLAG_RELOAD, 0);
    Application.ProcessMessages;
    dwBufLen := 1024;
    dwIndex := 0;
    GetMem(pBuf, dwBufLen);
    HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH, pBuf, dwBufLen, dwIndex);
    FreeMem(pBuf, dwBufLen);
    try
      repeat
        Application.ProcessMessages;
        InternetReadFile(hURL, @Buffer, SizeOf(Buffer), dwRead);
        MyStream.WriteBuffer(Buffer, dwRead);
        Application.ProcessMessages;
      until dwRead = 0;
    finally
      InternetCloseHandle(hSession);
    end;
  finally
    InternetCloseHandle(hURL);
  end;
end;

procedure TForm1.Button1Click(Sender : TObject);
var
  Jpg : TJpegImage;
  MemStream : TMemoryStream;
begin
  Jpg := TJpegImage.Create;
  MemStream := TMemoryStream.Create;
  MemStream.Position := 0;
  DownloadToStream('http://www.gover.pl/userfiles/publikacje/szczecin.jpg', MemStream);
  MemStream.Position := 0;
  Jpg.LoadFromStream(MemStream);
  Image1.Picture.Assign(Jpg);
  MemStream.Free;
end;

end.
0

Przyklad olesia jest z uzyciem WinInet a ja uzywam komponentu z pakietu INDY TidHTTP np:

 
 memstr := TMemoryStream.Create ;
 http := TIdHTTP.Create;
 http.MaxAuthRetries:=1;
 try
   //inetfile2stream('http://admin:[email protected]/GetImage.cgi?CH=0',memstr) ;
   http.Request.Username := User ;
   http.Request.Password := Password ;
   //URL := 'http://'+Form3.Edit2.text+'/GetImage.cgi?CH=0'
   http.HTTPOptions := http.HTTPOptions + [hoInProcessAuth]  ;
   try
    Application.ProcessMessages;
//    http.ReadTimeout := 2000; // tu mozesz dac czas oczekiwania komponentu
    http.Get('http://google.com/zdjecie.jpg' ,memstr);
   except
   // tu mozesz sobie zrobic obsluge bledow
   end;
   memstr.Position := 0;
   if memstr.size > 0 then
     memstr.SaveToFile(nazwa.jpg);
 finally
   memstr.Free;
   http.Free;
 end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1