TMemoryStream полный геморрой

Снова я и снова с очередным гемором. Вобщем нужно в TMemoryStream используя LoadFromStream загрузить картинку с сайта, при этом в ссылке используется переменная типа string, и оно мне пишет что не совместимые типы (даже если ссылку без переменной типа string пихаю, пишет это же):
[Error] Incompatible types: 'TStream' and 'String'
Уже несколько часов парюсь, ранее не имел дела с TMemoryStream, прошу помощи у профи. Может кто-то нормально обьяснить как правильно TMemoryStream юзать? Спасибо.
7 ответов

var
 MS: TMemoryStream;
 HTTP: TIdHTTP;
begin
 MS := TMemoryStream.Create;
 HTTP := TIdHTTP.Create;
 IdHTTP1.Get(
 'http://i.s-microsoft.com/global/ImageStore/PublishingImages/FY14/Surface/SurfaceRT_EtaBG_0211_1600x540_RU_RU.jpg', MS);
 MS.savetofile('SurfaceRT.jpg');
 MS.Free;
 HTTP.Free;
end;


BDA, у меня синапс...


Пример загрузки изображения с сайта:
function DownloadPage(ImageLink: string; var Stream: TMemoryStream): Boolean;
var
 http: TIdHTTP;
begin
 Stream.Position := 0;
 Stream.Size := 0;

 http := TIdHTTP.Create;
 try
 try
 http.Get(ImageLink, Stream);
 Result := True;
 except
 Result := False;
 end;
 finally
 http.Free;
 end;

 Stream.Position := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Stream: TMemoryStream;
 PageLink: string;
begin
 PageLink := 'http://site.com/1.png';

 Stream := TMemoryStream.Create;
 try
 if DownloadPage(PageLink, Stream) then
 begin
 // Тут выполнять действия с загруженными данными
 end;
 finally
 Stream.Free;
 end;
end;
UPD Опередили


Не тестировал:
procedure TForm1.Button1Click(Sender: TObject);
var
 HTTP: THTTPSend;
 MS: TMemoryStream;
 Res: boolean;
begin
 HTTP := THTTPSend.Create;
 MS := TMemoryStream.Create;
 try
 HTTP.Headers.Clear;
 Res := HTTP.HTTPMethod('Get', 'http://i.s-microsoft.com/global/ImageStore/PublishingImages/FY14/Surface/SurfaceRT_EtaBG_0211_1600x540_RU_RU.jpg');
 if Res then
 begin
 MS.LoadFromStream(HTTP.Document);
 MS.savetofile('SurfaceRT.jpg');
 end;
 finally
 HTTP.Free;
 MS.Free;
 end;
end;


нужно в TMemoryStream используя LoadFromStream загрузить картинку с сайта, при этом в ссылке используется переменная типа string
это вы в LoadFromStream пихаете строку? ну не мудрено что ошибка, в названии метода все сказано


Ещё вариант, на упрощённом синапсе.
var
 http:THTTPSendEx;
 sURL,sSavePath:string;
begin
 http:=THTTPSendEx.Create;
 try
 sURL:='http://localhost/file.jpg';
 sSavePath:='c:\file.jpg';
 if http.DownloadFile(sURL,sSavePath) then
 begin
 if http.IsSuccessfull then
 ShowMessage('Скачался')
 else
 ShowMessage('Нету файла в сети.');
 end
 else ShowMessage('Обломчик, интернетов нет. ');

 finally
 freeAndNil(http);
 end;
end;


всем спасибо за помощь