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 ...
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 ...
najpierw pobierz plik na dysk, pozniej laduj.
a w ogole to poszukaj bo juz bylo nie raz poruszane.
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.
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:admin@192.168.1.200/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;
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.