Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поток, INDY загрузка изображении и последующая выгрузка в ImageList

88K
24 сентября 2015 года
Станислав Скидан
3 / / 24.09.2015
Привет всем, кто нибудь знает как правильно в потоке загружать через INDY изображения и выводить их ImageList?
88K
24 сентября 2015 года
Станислав Скидан
3 / / 24.09.2015
Вот что я реализовал, правильно ЛИ?
Код:
type
  TSKS = class(TThread)
    HTTP, HTTP2: TIdHTTP;
    NamePack, AutorPack, FilePack, UrlScren, UrlVideo, SizeFile: String;
    Size: integer;
    Int: integer;
    bmp: TBitmap;
    ImgBuf: TMemoryStream;
    Picture: TWICImage;
    Test: String;
    procedure SyncronizeSKS;
  protected
    procedure Execute; override;
  end;


procedure TSKS.Execute;
var
  EnumSkins_JSON: TJSONArrayEnumerator;
  LJsonArr: TJSONArray;
begin
  HTTP := TIdHTTP.Create(nil);
  HTTP.AllowCookies := True;
  HTTP.HandleRedirects := True;
  HTTP.ProtocolVersion := pv1_1;
  HTTP.ReadTimeout := 10000;
  HTTP.ConnectTimeout := 10000;
  HTTP.Request.UserAgent := ShowFormWoTArchive.Caption;
  HTTP.Request.CacheControl := 'no-cache';

  HTTP2 := TIdHTTP.Create(nil);
  HTTP2.AllowCookies := True;
  HTTP2.HandleRedirects := True;
  HTTP2.ProtocolVersion := pv1_1;
  HTTP2.ReadTimeout := 10000;
  HTTP2.ConnectTimeout := 10000;
  HTTP2.Request.UserAgent := ShowFormWoTArchive.Caption;
  HTTP2.Request.CacheControl := 'no-cache';

  Picture := TWICImage.Create;
  ImgBuf := TMemoryStream.Create;
  bmp := TBitmap.Create;
  try
    {Test := SKSIO.AsString;}

  LJsonArr := TJSONObject.ParseJSONValue(HTTP.Get('ссылка на сервер API')) as TJSONArray;
  EnumSkins_JSON := TJSONArrayEnumerator.Create(LJsonArr);
  while EnumSkins_JSON.MoveNext do
  begin
  ImgBuf.Position := 0;
  NamePack := (EnumSkins_JSON.GetCurrent as TJSONObject).Values['name'].value;
  UrlScren := (EnumSkins_JSON.GetCurrent as TJSONObject).GetValue('url_screenshot').Value;
  HTTP2.Get(Trim(UrlScren), ImgBuf);
  UrlVideo := (EnumSkins_JSON.GetCurrent as TJSONObject).GetValue('url_video').Value;
  FilePack := (EnumSkins_JSON.GetCurrent as TJSONObject).GetValue('url_archive').Value;
  AutorPack := (EnumSkins_JSON.GetCurrent as TJSONObject).GetValue('author').Value;
  SizeFile := (EnumSkins_JSON.GetCurrent as TJSONObject).GetValue('size').Value;
  Picture.LoadFromStream(ImgBuf);
  bmp.Assign(Picture);

  Synchronize(SyncronizeSKS);
  end;

  finally
    HTTP.Disconnect;
    HTTP.Free;
    HTTP2.Disconnect;
    HTTP2.Free;
    Picture.Free;
    ImgBuf.Free;
    bmp.Free;
    LJsonArr.Free;
    EnumSkins_JSON.Free;
  end;
end;

procedure TSKS.SyncronizeSKS;
begin
  // Переменные внутри Потока Thread""
  {TestTo := Test;
  Showmessage(TestTo);}

  NamePackTo := NamePack;
  AutorPackTo := AutorPack;
  SizeFileTo := SizeFile;
  FilePackTo := FilePack;
  UrlScrenTo := UrlScren;
  UrlVideoTo := UrlVideo;

  ShowFormWoTArchive.ListImage.Add(bmp, nil);
  ShowFormWoTArchive.AddNewItems(1);
end;
278
24 сентября 2015 года
Alexander92
1.1K / / 04.08.2008
У тебя работает? Если работает, значит, правильно, если не работает -- неправильно, логично же... :)
88K
24 сентября 2015 года
Станислав Скидан
3 / / 24.09.2015
Цитата: Alexander92
У тебя работает? Если работает, значит, правильно, если не работает -- неправильно, логично же... :)

Данный код не срабатывает в скомпилированной программе на базе Windows XP SP3, на остальных ОС выше, прекрасно выгружается в ListView и показывает...

Мне нужна подсказка... все правильно ли я построил)))

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог