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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2013, 20:16   #1
Paskal1
Пользователь
 
Аватар для Paskal1
 
Регистрация: 22.10.2010
Сообщений: 69
Вопрос Закачка в масив с инета

Приветствую. Есть такая задачка нужно проверить на серваке если есть в определенной папке файлы точнее их количество то загрузить все эти файлы в переменную и отобразить в Timage каждый в отдельном.
Определение количества файлов я разберусь а вот создать объект от количество файлов без пон.
Я пользуюсь пока для одного файла но как сделать для нескольких подскажите с чего начать.

мой код для одного файла. (Заранее поклон и благодарность)
Код:
 Y1:= SourceFile+RezName+'/1.jpg';
//ьеру объект
 LoadStream := TMemoryStream.Create; // выделение памяти под переменную
  try
  idHTTP1.Get(Y1, LoadStream); // загрузка в поток данных из сети
 // сохраняю данные из потока на жестком диске
  LoadStream.Position := 0;
  jpg:=TJpegImage.Create;
  jpg.LoadFromStream(LoadStream);
  form1.Image1.Picture.Graphic:=jpg;
  form3.Image2.Picture.Graphic:=jpg
  except
    showmessage('error');
    end;
  idHTTP1.Free;
  LoadStream.Free;  // освобождаем память
  jpg.Free;
Ребята а можно создать масив с типом TJpegImage и в цикле выгружать типа такого

Код:
myArray[n]:=LoadFromStream(LoadStream);
а потом из него и брать
Код:
Image1.Picture.Graphic:=myArray[n];
Paskal1 вне форума Ответить с цитированием
Старый 30.01.2013, 20:32   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Даю наводку:
Код:
 
jpegCont:=TObjectList.Create;
 LoadStream := TMemoryStream.Create; // выделение памяти под переменную
for i:=1 to 10 do begin
Y1:= SourceFile+RezName+'/'+inttostr(i)+'.jpg';
  try
  LoadStream.Clear;
  idHTTP1.Get(Y1, LoadStream); // загрузка в поток данных из сети
  LoadStream.Position := 0;
  jpg:=TJpegImage.Create; jpegCont.add(jpg);
  jpg.LoadFromStream(LoadStream);
  except
    showmessage('error');
    end;
end;
  idHTTP1.Free;
  LoadStream.Free;  // освобождаем память
Теперь по списку загруженного:
Код:
for i:=0 to jpegCont.Count-1 do begin
 form1.ImageТакое-то.Picture.Graphic:=TJpegImage(jpegCont[i]);
end;
Нужен uses contnrs для TObjectList

После jpegCont.Clear поможет освободить память.

Идея ясна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.01.2013, 00:43   #3
Paskal1
Пользователь
 
Аватар для Paskal1
 
Регистрация: 22.10.2010
Сообщений: 69
По умолчанию

Всем Спасибо кто откликнулся
заделал все сам
вот процедура может подход конечно не тот но это только альфа
Код:

procedure TForm1.sButton2Click(Sender: TObject);
const
  // URL Location
  SourceFile = 'http://сайт/';
var
  pDevice: pChar;
  pDriver: pChar;
  pPort: pChar;
  hDMode: THandle;
  biteInt:integer;
  LoadStream: TMemoryStream;
  jpg: TJpegImage;
  Y1:string;
  SizeOfApp: Int64;
  //------проверка на существование файлов..
  nFS, fps:integer;
  NameFormat:String;
  NameFailServer : Array[1..30] of string;
  //закачка нескольких файлов
  hi:integer;

begin
sButton2.Enabled:=false;
NameFormat:='.jpg';
incFile:=0;
  sLabelFX3.Caption:='Пожайлусто подождите идет верификация данных.';
  sPanel2.Visible:=true;
  for nFS:=1 to 25 do
  begin
       try
                                                  //Собираю линк
       IdHTTP4.Get('http://сайт/'+RezName+'/'+ IntToStr(nFS) +'.jpg');
       except
                                                  //Ошибка!
       end;                                       //проверяю ответ сервера
           if idHTTP4.Response.ResponseCode = 200 then
           begin
             NameFailServer[nFS]:=IntToStr(nFS);  //Если файл есть заношу в масив
             incFile:=incFile + 1;                //количетво файлов
             sLabel6.Caption:=inttostr(incFile);
             Application.ProcessMessages();
           end;
  end;

  if incFile = 0 then
    begin
     beep;
     ShowMessage('Нет объектов для печати, обратитесь к разработчикам ПО');
     form1.Close;
    end
    else
   // Качаю файлы  в потоке в переменнуюю
   sLabelFX3.Caption:='    Пожайлусто подождите идет загрузка данных.';
for hi:=1 to incFile do
begin
 Y1:= SourceFile+RezName+'/'+ inttostr(hi) +'.jpg'; //Создаю линк
                                                          //беру объект
 LoadStream := TMemoryStream.Create; // выделение памяти под переменную
  try
  idHTTP1.Get(Y1, LoadStream);       // загрузка в поток данных из сети
                                     // сохраняю данные из потока
  LoadStream.Position := 0;
  DataFails[hi]:=TJpegImage.Create;
  DataFails[hi].LoadFromStream(LoadStream);
  sLabel3.Caption:=Inttostr(hi);
 // form1.Image1.Picture.Graphic:=DataFails[hi];
 // form3.Image2.Picture.Graphic:=DataFails[hi]
  except
    //showmessage('Ошибка загрузки объекта!');
   // Form1.Close;
  end;

end;
    sPanel2.Visible:=false;
  //  idHTTP1.Free;
  //  LoadStream.Free;  // освобождаем память
  //  jpg.Free;
    form3.Image2.Picture.Graphic:=DataFails[1];
    Form1.Visible:=false;
    form3.Show;

  {   резерв для одного файла
   Y1:= SourceFile+RezName+'/1.jpg';
//беру объект
 LoadStream := TMemoryStream.Create; // выделение памяти под переменную
  try
  idHTTP1.Get(Y1, LoadStream); // загрузка в поток данных из сети
 // сохраняю данные из потока на жестком диске
  LoadStream.Position := 0;
  jpg:=TJpegImage.Create;

  jpg.LoadFromStream(LoadStream);
  form1.Image1.Picture.Graphic:=jpg;
  form3.Image2.Picture.Graphic:=jpg
  except
    showmessage('Ошибка загрузки объекта!');
    Form1.Close;
    end;
  idHTTP1.Free;
  LoadStream.Free;  // освобождаем память
  jpg.Free;
  Form1.Visible:=false;
  form3.Show;
  }
end;
Paskal1 вне форума Ответить с цитированием
Старый 31.01.2013, 05:50   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

котгавно
ты дважды загружаешь файлы первый при определении колва второй при загрузке

как ты лодку назвал - fail, так она и поплыла


Код:
procedure TForm1.Button1Click(Sender: TObject);
const
  FileFormatURL = 'http://ru.fishki.net/%s/dem-00%d.jpg';
var
  i,TryCount:integer;
  Dir:string;
  LoadStream: TMemoryStream;
  jpg: TJpegImage;
  jpgs:TList;
begin
  Dir:='picsw/012013/30/post/dem';
  jpgs:=TList.Create;
  try
    LoadStream:=TMemoryStream.Create;
    try
      i:=1;
      while i<1000 do
      begin
        LoadStream.Clear;
        try
          TryCount:=3;
          while TryCount>0 do
          try
            idHTTP1.Get(Format(FileFormatURL,[Dir,i]), LoadStream);
            break;
          except
            on EIdSocketError do
            begin
              dec(TryCount);
              if TryCount=0 then raise;
            end;
          end;

          jpg:=TJpegImage.Create;
          try
            LoadStream.Position:=0;
            jpg.LoadFromStream(LoadStream);
            jpgs.Add(jpg);
          except
            jpg.Free;
            raise;
          end;
          inc(i);
        except
          on EIdSocketError do break;
          on EIdHTTPProtocolException do break;
          else raise;
        end;
      end;
    finally
      LoadStream.Free;
    end;

    if jpgs.Count=0 then
      Application.MessageBox('Íåò îáúåêòîâ äëÿ ïå÷àòè, îáðàòèòåñü ê ðàçðàáîò÷èêàì ÏÎ','',0);

    for i:=0 to jpgs.Count-1 do
    begin
      Image1.Picture.Assign(TJpegImage(jpgs[i]));
      Application.ProcessMessages;
      sleep(2000);
    end;
  finally
    for i:=0 to jpgs.Count-1 do
      TObject(jpgs[i]).Free;
    jpgs.Free;
  end;
end;
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 31.01.2013 в 06:37.
Slym вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файл из инета MNaz Помощь студентам 0 19.06.2011 22:50
Настройка инета... VintProg Операционные системы общие вопросы 1 31.12.2010 10:45
загрузка с инета StartMis Работа с сетью в Delphi 2 09.10.2008 14:33
Закачка файлы из Инета KoLiN Работа с сетью в Delphi 1 31.07.2008 17:45