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;


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