Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2013, 23:15   #1
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
Вопрос TMemoryStream полный геморрой

Снова я и снова с очередным гемором. Вобщем нужно в TMemoryStream используя LoadFromStream загрузить картинку с сайта, при этом в ссылке используется переменная типа string, и оно мне пишет что не совместимые типы (даже если ссылку без переменной типа string пихаю, пишет это же):

Код:
[Error] Incompatible types: 'TStream' and 'String'
Уже несколько часов парюсь, ранее не имел дела с TMemoryStream, прошу помощи у профи. Может кто-то нормально обьяснить как правильно TMemoryStream юзать? Спасибо.
FleXik вне форума Ответить с цитированием
Старый 02.10.2013, 23:39   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
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 вне форума Ответить с цитированием
Старый 02.10.2013, 23:43   #3
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

BDA, у меня синапс...
FleXik вне форума Ответить с цитированием
Старый 02.10.2013, 23:43   #4
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

Пример загрузки изображения с сайта:
Код:
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 Опередили
kangreon вне форума Ответить с цитированием
Старый 02.10.2013, 23:57   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Не тестировал:
Код:
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;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.10.2013, 00:03   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
нужно в TMemoryStream используя LoadFromStream загрузить картинку с сайта, при этом в ссылке используется переменная типа string
это вы в LoadFromStream пихаете строку? ну не мудрено что ошибка, в названии метода все сказано
eval вне форума Ответить с цитированием
Старый 03.10.2013, 00:23   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ещё вариант, на упрощённом синапсе.
Код:
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;
Человек_Борща вне форума Ответить с цитированием
Старый 03.10.2013, 01:30   #8
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

всем спасибо за помощь
FleXik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Снова я и снова геморрой, только уже с многопоточностью FleXik Общие вопросы Delphi 26 07.07.2013 16:48
Геморрой с потоками FleXik Общие вопросы Delphi 31 06.07.2013 18:22
TMemoryStream Volkogriz Общие вопросы Delphi 2 09.01.2013 12:55
TMemoryStream Владимир1988 Помощь студентам 0 13.02.2010 13:04