ЖУРНАЛ ХАКЕР

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 ... И что ты думаешь, кто-нибудь посоветовал что-нибудь путевое? Фиг!

Назад на стр. 004-080-4  Содержание  Вперед на стр. 004-080-6