PDA

Просмотр полной версии : ***Учимся создавать UPDATER***


oleg.svs
15.07.2012, 22:28
Всем привет!Сегодня я научу делать вас UPADTER на Delphi .
Итак :
1)Создаем новый проект.(File->New->Application).
2)Кидаем на форму progressbar из вкладки win32
3)Memo из вкладки standart.
4)Кнопку из вкладки standart.
Должно получиться примерно так:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
5)Теперь начнем кодить.
Для загрузки файла из интернета есть замечательная процедурка=)
Вот ее код:
procedure GetIntetFile(URL, SavetoFile: string);
var
TM: TMemoryStream;
begin
try
TM:= TMemoryStream.Create;
Form1.id[Ссылки могут видеть только зарегистрированные и активированные пользователи](URL,TM);
finally
TM.SavetoFile(SavetoFile);
end;
TM.Free;
end;
Вставляете ее после строки
{$R *.dfm}
6)Теперь два раза нажмем на кнопку и у нас появится процедура нажатия на button.
Давайте сделаем так , чтобы по нажатию на кнопку наш файл закачался в c:\ под именем Wh.dll(можно любой файл - для exe - 1.exe и тд).
Должно получиться примерно так :
procedure TForm1.Button1Click(Sender: TObject);
begin
GetIntetFile('[Ссылки могут видеть только зарегистрированные и активированные пользователи]ваш_сайт/wh.dll','c:\wh.dll');
end;
7)Чтобы все это заработало нужно кинуть на форму компонент idhhtp из вкладки indyclients.
Можно тестить!загрузка работает.
8)Теперь давайте добавим визульно закачку файла;
В нашу процедуру getinetfile добавим:
form1.Memo1.Lines.Add('Файл загружается');
form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+25;
sleep(300);
form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+25;
form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+50;
form1.ProgressBar1.Position:=0;
form1.Memo1.Lines.Add('Загрузка завершена, ищите файл в c:\wh.dll');
В итоге должно получиться примерно так:
procedure GetIntetFile(URL, SavetoFile: string);
var
TM: TMemoryStream;
begin
try
TM:= TMemoryStream.Create;
Form1.id[Ссылки могут видеть только зарегистрированные и активированные пользователи](URL,TM);
form1.Memo1.Lines.Add('Файл загружается');
form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+25;
sleep(300);
form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+25;
finally
TM.SavetoFile(SavetoFile);
form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+50;
form1.ProgressBar1.Position:=0;
form1.Memo1.Lines.Add('Загрузка завершена, ищите файл в c:\wh.dll');
end;
TM.Free;
end;
Вот так это будет выглядеть:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Теперь остановимся на вопросе :Как сделать так , чтобы updater сначала проверял , есть ли у него обновления?
Если у вас нет своего сайта/ftp/хостинга , то лугче всего зарегистрировать себе сайт на [Ссылки могут видеть только зарегистрированные и активированные пользователи]
Эту процедуру сможет пройти любой homo sapiens=)
НУ вот , за 5 минут вы создали сайт и уже сидите в админке.
Заходим в управление файлами и загружаем туда , например wh.dll(то,что будет качать ваш упдатер),updater.exe(новая версия updater'a и versionupdater.txt.
Опишу алгоритм работы updater'a:
1)Программа идет на ваш сайт и качает versionupdater.txt.Если версия будет другой(в программе) ,
то она выводит в memo 'Есть обновление , для закачки нажмите кнопку обновить updater'.
Если нету , то выводит 'Обновлений updater'a не обнаружено'.
2)Тоже самое с wh , только файл версий будет - versionwh.txt
Алгоритм мы написали , теперь будем кодить)
Чтобы при запуске программы она проверила свою версию , нужно
1)Поместить на форму второй memo и сделать его visible:=false(невидимым),поместить вторую кнопку(по ней будет обновляться updater.
2)Заходим в events формы и на событие onshow(программа показалась) прописываем следующий код:
var
version:string;
begin
version:='1.0';//наша версия
memo1.Lines.Add('Ваша версия updater = '+version);
GetIntetFile2('[Ссылки могут видеть только зарегистрированные и активированные пользователи]ваш_сайт/versionupdater.txt','c:\windows\upd.txt');
memo2.Lines.LoadFromFile('c:\windows\upd.txt');
if memo2.Text<>version then //Если версия другая то
begin
memo1.Lines.Add('обнаружена новая версия updater = '+memo2.Text);
memo1.Lines.Add('Для закачки нажмите на кнопку обновить updater');
end //Если версия такая же
else memo1.Lines.Add('обновлений не обнаружено');
end;
Так же добавьте следующую процедуру для Загрузки обновления.
procedure GetIntetFile2(URL, SavetoFile: string);
var
TM: TMemoryStream;
begin
try
TM:= TMemoryStream.Create;
Form1.id[Ссылки могут видеть только зарегистрированные и активированные пользователи](URL,TM);
finally
TM.SavetoFile(SavetoFile);
form1.Memo1.Lines.Add('Успешно');
end;
TM.Free;
end;
Чтобы это работало , нужно залить на сайт versionupdater.txt (в нем строчка , например 1.0).
Версия программы меняется в исходе .
Теперь по нажатию на кнопку пихаем этот код:
var
version:string;
begin
version:='1.0';//наша версия
memo1.Lines.Add('Ваша версия updater = '+version);
GetIntetFile2('[Ссылки могут видеть только зарегистрированные и активированные пользователи]ваш_сайт/versionupdater.txt','c:\windows\upd.txt');
memo2.Lines.LoadFromFile('c:\windows\upd.txt');
if memo2.Text<>version then //Если версия другая то
begin
memo1.Lines.Add('обнаружена новая версия updater = '+memo2.Text);
memo1.Lines.Add('Закачка производится в c:\updaternew.exe');
GetIntetFile2('[Ссылки могут видеть только зарегистрированные и активированные пользователи]ваш_сайт/updater.exe','c:\updaternew.exe');
end //Если версия такая же
else memo1.Lines.Add('обновлений не обнаружено');
end;
Думаю, на этом с делфи всё=)Если есть вопросы-задавайте в теме, постараюсь ответить...
VT нету , тк нет исполняемых файлов.
[Ссылки могут видеть только зарегистрированные и активированные пользователи] ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

#Nike
29.09.2012, 14:32
Ох, ну и быдло код...
form1.Memo1.Lines.Add('Файл загружается'); form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+25; sleep(300); form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+25; form1.ProgressBar1.Position:=form1.ProgressBar1.Po sition+50; form1.ProgressBar1.Position:=0;
Это ужас...

ProgressBar1.Position := ProgressBar1.Position + id[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Вот так не проще?

P.S. для хорошей работоспособности, к этому коду нужно еще кое чего...

metraz
29.09.2012, 14:47
antifreeze и application.processmesages.