Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.129.211.87] |
|
Сообщ.
#1
,
|
|
|
Цитата Mischka @ 10.01.05, 06:43 ага И на стартовой странице яндекса выложить последний номер своего обновления Ну Яндэкс это условно Конешно и мэмо не стоит применять для подобных целей. Я думаю лучше переменную завети типа String и в HTML прописать цифру следующей версии т.е. новой, а потом проверять переменную стринг... Короче хорошая идея! Спасибки за идею! Добавлено Значит с Вашей помощью я разобрался с инициализацией обновления... А вот как организовать саму закачку файла (предположим zip). Нашол примерчик воттакой: function GetInetFile(const fileURL, FileName: String): boolean; const BufferSize = 1024;// var hSession, hURL: HInternet; Buffer: array[1..BufferSize] of Byte; BufferLen: DWORD; f: File; sAppName: string; begin Result:=False; sAppName := ExtractFileName(Application.ExeName); hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);//Коннект к инету и возвращает дескриптор сесии try hURL := InternetOpenURL(hSession, PChar(fileURL),nil,0,0,0);//открываем URL try AssignFile(f, FileName); Rewrite(f,1); repeat //Читаем инфу дескриптора hURL в буфер InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen); BlockWrite(f, Buffer, BufferLen)//Запись из буфера в файл until BufferLen = 0; //При нулевом колличестве бит для чтения-выпрыгует CloseFile(f);//Закрываем результат закачки Result:=True; finally InternetCloseHandle(hURL) //Закрываем установленное подключение end finally InternetCloseHandle(hSession) end end; procedure TForm1.Button1Click(Sender: TObject); var FileOnNet, LocalFileName: string; begin FileOnNet:='http://screwaka.nm.ru/1.JAD'; LocalFileName:='1.jad'; if GetInetFile(FileOnNet,LocalFileName)=True then ShowMessage('Закачал.') else ShowMessage('Не закачал.') end; Да он (пример) вполне рабочий. Хотелось бы организовать закачку файла с помощью стандартных средств Delphi, т.е с помощью компонентов... Использовать WinInet в данном случае не хочется. Та и вообще WinAPI не люблю. Читать сложно (для меня), а ещё сложней разбираться в своих шэдеврах годичной давности. Вечно у меня глюков и ошибок куча, которые потом сложно выловить... Эта тема была разделена из темы "Автоматическое обновление." |
Сообщ.
#2
,
|
|
|
Вот ещё примерчик (тоже постил уже, плохо искал):
uses {...,}IniFiles, UrlMon, type TForm1 = class(TForm) {...} private winsc: TiniFile; old: Integer; vernfo: TIniFile; end; implementation {$R *.dfm} function DownloadFile(Source, Dest: string): Boolean; { Function for Downloading the file found on the net } begin try Result := UrlDownloadToFile(nil, PChar(Source), PChar(Dest), 0, nil) = 0; except Result := False; end; end; function GetPathPath: string; { Retrive app path } begin Result := ExtractFilePath(Application.ExeName); end; procedure TForm1.DownLoadNewVersion1Click(Sender: TObject); var apath: string; new: Integer; begin // This is the exact code from my application apath := GetPathPath; Gauge1.Progress := 0; StatusBar1.SimplePanel := True; StatusBar1.SimpleText := 'Connecting to http://tsoft.home.ro'; Gauge1.Progress := 20; if DownloadFile('http://www.tsoft.home.ro/update.ini', PChar(apath) + '/update.ini') then begin Gauge1.Progress := 50; StatusBAr1.SimplePanel := True; StatusBar1.SimpleText := 'Checking for newer versions...'; vernfo := TiniFile.Create(GetPathPath + '/update.ini'); new := vernfo.ReadInteger('version', 'wsc', 7); vernfo.Free; if (old = new) then begin StatusBar1.SimplePanel := True; StatusBar1.SimpleText := 'No new version detected'; Gauge1.Progress := 100; end else if DownloadFile('http://www.tsoft.home.ro/winsafe.exe', PChar(apath) + '/winsafe.exe') then begin ShowMessage('Update succeseful'); Gauge1.Progress := 100; winsc := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini')); winsc.WriteInteger('wsc', 'vernfo', new); winsc.Free; end else MessageDlg('A new version has appeard but it requires a second install', mtInformation, [mbOK], 0); end else begin StatusBar1.SimplePanel := True; StatusBar1.SimpleText := 'Failed to connect probably a internet problem'; Gauge1.Progress := 0; end; end; procedure TForm1.FormCreate(Sender: TObject); begin //App version winsc := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini')); try old := winsc.ReadInteger('wsc', 'vernfo', 1); finally winsc.Free; end; end; end. |