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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2011, 18:52   #1
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию Сообщение об окончание загрузки!

Есть код! Скажу сразу большую его часть я писал не сам, а именно функции загрузки! Скопировал из учебника! В большей его части я разобрался кое что вырезал и теперь меня гложет вопрос, а как сделать чтобы после окончания загрузки файла вылетало какое нить сообщение или выполнялось действие? За ошибки в написании и логическом построение кода РУГАЙТЕ!!!!! Буду очень благодарен если кто нить что нить дельное подскажет)
Код:
const
MY_MESS = WM_USER + 100;/// этого я не понял но думаю что нужно)

type
    TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    XPManifest1: TXPManifest;
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure thrTerminate(Sender:TObject);
  end;
var
  Form1: TForm1;
  s2,S:TStringList;
  buf2,buf:integer;
implementation

{$R *.dfm}
type
  TDownLoader = class(TThread)
  private
    FToFolder: string;
    FURL: string;
    protected
      procedure Execute;override;
    public
      property URL:string read FURL write FURL;
      property ToFolder:string read FToFolder write FToFolder;
      procedure IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
      AWorkCount: Integer);
      procedure IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
      AWorkCountMax: Integer);
    procedure IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
  end;


{ TDownLoader }

procedure TDownLoader.Execute;
  var http:TIdHTTP;
      str:TFileStream;
begin  
  http:=TIdHTTP.Create(nil); 
   http.OnWorkEnd:=IdHTTP1WorkEnd;//Создаю класс для закачки
  
  ForceDirectories(ExtractFileDir(ToFolder));//каталог, куда файл положить
  
  str:=TFileStream.Create(ToFolder, fmCreate);//Поток для сохранения
  try
    
    http.Get(url,str);//Качаю
  finally
    
    http.Free;
    str.Free;//Нас учили чистить за собой
  end;
end;

  procedure TForm1.FormActivate(Sender: TObject);
   var d:TDownLoader;
    begin
   showmessage ('Новая версия!');
  //Создадим класс потока.
  //Поток для начала будет остановлен
  d:=TDownLoader.Create(true);
  //Передадим параметры потоку
  d.URL:='URL!!!';
  d.ToFolder:='Dir!!!!';
  //Поток должен удалить себя по завершению своей работы
  d.FreeOnTerminate:=true;
  d.OnTerminate:=thrTerminate;
  //И запустим его на закачку.
  d.Resume;
  //Теперь с процедуры мы выйдем, но поток работает
  //и живёт своей жизней

{Обработка текста!!!! В первом эмм... загрузчике, потоке незнаю как это назвать я загружаю TXT файл! и теперь мне нужно снять с него опр. инфу!}
Sleep(1000); ///Это я сделал для того чтобы файл успел загрузиться т.к. не знаю как получить сообщение о том что он загружен!
  S:= TStringList.Create; S.LoadFromFile('D:\version.txt');
 s2:= tstringlist.Create; s2.loadfromfile('vr.txt');
 buf:=strtoint(s[0]);
 buf2:=strtoint(s2[0]);
 if buf>buf2 then begin
 Buf2:=buf2+1;
 s2.Delete(0);
 s2.Add(inttostr(buf2));
 s2.SaveToFile('vr.txt');//// это некоторые манипуляции файлом;
{Загрузка файла!!! Здесь если значеие в TXT верное начинается загрузка второго файла}

//Создадим класс потока.
  //Поток для начала будет остановлен
  d:=TDownLoader.Create(true);
  //Передадим параметры потоку
  d.URL:='URL';
  d.ToFolder:='Dir';
  //Поток должен удалить себя по завершению своей работы
  d.FreeOnTerminate:=true;
  d.OnTerminate:=thrTerminate;
  //И запустим его на закачку.
  d.Resume;
  //Теперь с процедуры мы выйдем, но поток работает
  //и живёт своей жизней
  {Обработка Файла!!!!}
   end else showmessage ('Более новая версия программы отсутствует!'); end;

procedure TForm1.thrTerminate(Sender: TObject); 
begin  ShellExecute(1, nil, 'd:\rem\bat.exe', '', SW_SHOW);
 halt;
end;//// сначала я думал что это сообщение об окончание загрузки! Но после теста оказалалось что действия выполняются без задержки(((

procedure TDownLoader.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
begin
  PostMessage(Application.MainForm.Handle,MY_MESS,1,AWorkCount);
end;

procedure TDownLoader.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Integer);
begin
  PostMessage(Application.MainForm.Handle,MY_MESS,0,AWorkCountMax);
end;

procedure TDownLoader.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);//// еще была надежда на эту процедуру но так же никаких результатов(( 
begin

end;

end.
Интернет как жизнь - смысла нет, а уходить не хочется!

Последний раз редактировалось JasperCRT; 21.01.2011 в 18:55.
JasperCRT вне форума Ответить с цитированием
Старый 21.01.2011, 18:54   #2
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию

Как вы наверное уже догадались это моя личная программа для обновления самой себя! X) Сначала гружу текстовый файл в нём записано число (версия) после этого сравнивается текущая версия (txt в папке с программой) и та которая выложена в интернете если выложена более новая версия начинается загрузка программы) После загрузки (я не могу понять как сделать чтобы это было именно после загрузки а не во время!) открывается батник (в дальнейшем надеюсь переделать) который копирует и заменяет старую версию на новую) а так же удаляет txt загруженый с интернета) Ну и запускает программу заново) У кого какие идеи? ))))
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Старый 21.01.2011, 18:57   #3
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
procedure TDownLoader.Execute;
  var http:TIdHTTP;
      str:TFileStream;
begin  
  http:=TIdHTTP.Create(nil); 
   http.OnWorkEnd:=IdHTTP1WorkEnd;//Создаю класс для закачки
  
  ForceDirectories(ExtractFileDir(ToFolder));//каталог, куда файл положить
  
  str:=TFileStream.Create(ToFolder, fmCreate);//Поток для сохранения
  try
    
    http.Get(url,str);//Качаю
  finally
    
    http.Free;
    str.Free;//Нас учили чистить за собой
  end;
showmessage('вот сюда надо сообщение ')
end;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 21.01.2011, 19:04   #4
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию

Mad_Cat Нет это не то)
Я наверное написал много а главную мысль не выразил X(
Мне нужно чтобы ИМЕННО ПОСЛЕ загрузки txt выполнялось вот это:
Код:
S:= TStringList.Create; S.LoadFromFile('D:\version.txt');
 s2:= tstringlist.Create; s2.loadfromfile('vr.txt');
 buf:=strtoint(s[0]);
 buf2:=strtoint(s2[0]);
 if buf>buf2 then begin
 Buf2:=buf2+1;
 s2.Delete(0);
 s2.Add(inttostr(buf2));
 s2.SaveToFile('vr.txt');//// это некоторые манипуляции файлом;
И именно после загрузки второго файла выполнялось это:
Код:
ShellExecute(1, nil, 'd:\rem\bat.exe', '', SW_SHOW);

 halt;
Вот как-то так)
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Старый 21.01.2011, 19:15   #5
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию

Хм... Mad_Cat хотя да подходит) СпасибО) Маленько не то чего я хотел, но как нить разберёмся! )) Спасибо большое))
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
окончание работы ололошенько Visual C++ 26 27.09.2010 22:05
окончание ScrollBar Elfist Общие вопросы Delphi 6 26.07.2010 16:35
Окончание слова, в зависимости от числа. Bonio Помощь студентам 4 27.02.2010 19:40
[Delphi] Правильное окончание слова Derol Помощь студентам 2 01.06.2009 07:50
Окончание сессии Neymexa Свободное общение 32 17.02.2009 13:45