GetRight своими руками
Спецвыпуск Хакер, номер #004, стр. 004-080-5
procedure TForm1.NMFTP1ConnectionFailed(Sender: TObject);
begin
Label3.Caption := 'Ошибка!!! Не могу соединиться!' ;
end;
Ну и так и далее, там все прозрачно, пофантазируй немного.
Все, обработка фтп закончена.
Кодим скачку по http
После скачки по фтп это совсем легко, посему отдыхай. Код пиши вместо строки:
// качаем по хттп .
А код следующий:
Edit1.Enabled := false ;
Edit2.Enabled := false ; // вырубаем эдиты
Button1.Enabled := false ; // выключаем кнопку "Закачать"
Обрабатываем кнопки и эдиты, как и при скачке по фтп.
Label3.Caption := 'Подключаемся ... ' ;
Delete(addr, 1, 7) ;
В переменной addr у нас адрес, помнишь? Так вот, удаляем из него кусок http:// - это ОЧЕНЬ важно. Почему? Потом объясню. Теперь, собственно, скачка:
NMHTTP1.InputFileMode := true ;
NMHTTP1.Body := Edit2.Text ;
NMHTTP1.Get( addr ) ; // качаем
Опять обрабатываем кнопки:
Button1.Enabled := true ; // включаем кнопку "Закачать"
Edit1.Enabled := true ;
Edit2.Enabled := true ; // врубаем эдиты
Edit1.Clear ;
Edit2.Clear ; // очищаем эдиты
С кодом все, теперь осталось добавить несколько событий, как и при скачке по фтп. Кликай на компоненте NMHTTP1 на форме, и в Object Inspector'е выбирай закладку Events. А дальше фантазируй: напиши что-нибудь при OnConnect, OnConnectionFailed, OnDisconnect. А вообще, корректная обработка ошибок (типа OnConnectionFailed) - это гимор, поэтому особо не забивай себе голову.
Последние штрихи
Чего-то не хватает... Правильно! Не хватает прогресс-бара - этой синей полоски с процентами! Но это не проблема, сейчас сделаем. Открывай закладку Win32 палитры компонентов, хватай компонент ProgressBar и лепи его на форму (чтобы посмотреть, как его прилепил я, позырь на скриншот готовой проги). Теперь выделяй компонент NMFTP1 и открывай в Object Inspector'е закладку Events. Ищи OnPacketRcvd. Создавай обработчик (клик по OnPacketRecvd, два по пустому месту справа от него). Там пиши следующий код:
procedure TForm1.NMFTP1PacketRecvd(Sender: TObject);
begin
ProgressBar1.Position := Round(NMFTP1.BytesRecvd*100/NMFTP1.BytesTotal) ;
Label3.Caption := 'Получено ' + IntToStr(NMFTP1.BytesRecvd) + ' байт из ' + IntToStr (
NMFTP1.BytesTotal ) ;
end;
Строки разрывать не надо, просто они длинные и не помещаются.
Теперь, когда прога будет что-то качать, синяя строчка будет ползти, а в метке будет написано, сколько байт уже получено. Все эти действия необходимо повторить и для NMHTTP1, только NMFTP1 в коде замени на NMHTTP1. После завершения загрузки очистим ProgressBar - для этого в конце фтп и хттп фрагментов - там, где мы открывали эдиты и очищали их - допиши следующую строку:
ProgressBar1.Position := 0 ; // очищаем прогресс-бар
Теперь сохраняй все и компилируй (дави на F9) - получишь вполне работоспособную прогу-качалку, пользуйся.
Последнее слово
Так вот, чтобы написать эту прогу, мне пришлось основательно помучаться: я не знал, ни как закачать файло по фтп, ни как закачать его по хттп. Но если с фтп, перерыв борландовский хелп и примеры, я разобрался, то хттп постоянно глючил, выдавал битый файл. Я написал в десяток ньюсгрупп - как русских, так и забугорных, задавал вопросы на бордах крутых дельфовских сайтов, я писал программерам, я написал в службу поддержки разработчика компонента NMHTTP ... И что ты думаешь, кто-нибудь посоветовал что-нибудь путевое? Фиг!