1.Разместите на форме три компонента Метка (Label1, Label2, Label3).
2.Измените свойство первой метки Caption на "Адрес файла: ". Для второй метки свойство Caption измените на "Сохранить файл в: ". Для третьей метке очистите значение Caption, здесь будут выдаваться сообщения по ходу загрузки.
3.Добавьте два компонента Edit1 и Edit 2. Первый разместите напротив первой метки справа (это будет для ввода адреса), второй - напротив второй метки справа. У обоих сотрите текст в свойствах Text.
4.Разместите на форме две кнопки (Button1, Button2), для первой в свойстве Caption введите слово "Загрузить файл", для второй - "Закрыть".
5.Откройте закладку Internet (для Delphi 4) или FastNet (для Delphi 5) палитры компонентов. Поместите на форму компоненты NMFTP и NMHTTP.
6.Для кнопки Button2 в окне инспектора объектов для события OnClick напишите следующую процедуру:
procedure TForm1.Button2Click(Sender: TObject);
begin
NMFTP1.Disconnect; // разрыв связи по FTP, если она установлена
NMHTTP1.Disconnect; // разрыв связи по HTTP, если она установлена
Close; // Закрываем программу
end;
7. Для события OnChange компонента Edit1 для проверки заполнения всех полей напишите следующую процедуру:
|
|
procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit1.Tag:= 1; // присвоить тагу Edit1 значение 1
end;
Аналогичную операцию необходимо проделать и для Edit2.
8. Для кнопки Button2 создайте обработчик события OnClick:
procedure TForm1.Button1Click(Sender: TObject);
begin
Label3.Caption:= ''; // очиcтка метки для сообщений
if (Edit1.Tag = 1) and (Edit2.Tag = 1) and (Edit1.Text <> '')
and (Edit2.Text <> '') then // проверка данных
begin
// данные введены, выполнять действия
end
else Label3.Caption:= 'Введите все данные!' // введены не все данные
end;
9. Для проверки типа протокола необходимо из оригинального адреса определить начальные буквы адреса (FTP или HTTP):
procedure TForm1.Button1Click(Sender: TObject);
var
serv, addr, host, dir: String;
begin
Label3.Caption:= ''; // очищаем метку для сообщений
if (Edit1.Tag =1) and (Edit2.Tag =1) and (Edit1.Text <> '')
and (Edit2.Text <> '') then // проверка данных
begin // данные введены, выполнять действия
addr:= Edit1.Text; // сохраняем адрес в переменную
serv:= Copy(addr, 1, 6);//копируем 6 символов из
// адреса в переменную serv
if serv = 'ftp://' then // впереди ftp://
begin
// загрузка по FTP
end
else
if serv = 'http:/' then // впереди http:/
begin
// загрузка по HTTP
end
else Label3.Caption:= 'Неправильный адрес';
end else Label3.Caption:='Не все данные'//не все данные
end;
10. При получении данных по выбранному протоколу необходимо сначала соединиться с хостом (сервером), а уже потом записывать файл. Для этого нужно разбить адрес на хост и собственно адрес файла:
procedure TForm1.Button1Click(Sender: TObject);
begin
Label3.Caption:= ''; // очищаем метку для сообщений
if (Edit1.Tag = 1) and (Edit2.Tag =1) and (Edit1.Text <> '')
and (Edit2.Text <> '') then // проверка данных
begin // данные введены, выполнять действия
addr:= Edit1.Text; // сохраняем адрес в переменную
|
|
serv:= Copy(addr, 1, 6); // копируем 6 символов из
// адреса в переменную serv
if serv = 'ftp://' then // впереди ftp://
begin
Delete(addr, 1, 6); // удаляем первые 6 символов из
//адреса
host:= Copy (addr, 1, (Pos('/', addr) - 1));
// находим хост
Delete(addr, 1, (Pos('/', addr) - 1));
dir:= addr;
// находим путь к файлу
// загрузка по FTP
end
else
if serv = 'http:/' then // впереди http:/
begin
// загрузка по HTTP
…
11. Дополните процедуру для записи файла по FTP протоколу вместо строки
«// загрузка по FTP»:
Edit1.Enabled:= false; // выключение кнопки Edit1
Edit2.Enabled:= false; // выключение кнопки Edit2
Button1.Enabled:= false; // выключение кнопки Button1
NMFTP1.Host:= host;
NMFTP1.UserID:= 'anonymous';
NMFTP1.Password:= '';
Label3.Caption:= 'Подключаемся... ';
NMFTP1.Connect;
NMFTP1.Mode(MODE_IMAGE);
Label3.Caption:= 'Запись файла...';
NMFTP1.Download(dir, Edit2.Text);
Label3.Caption:= 'Запись произведена успешно';
Label3.Caption:= 'Отключение';
NMFTP1.Disconnect;
Button1.Enabled:= true; // включение кнопки Button1
Edit1.Enabled:= true;
Edit2.Enabled:= true; // включение Edit1, Edit2
Edit1.Clear;
Edit2.Clear;
12. Добавьте несколько комментариев:
Выделите компонент NMFTF1 у себя на форме, затем для события OnConnect введите:
procedure TForm1.NMFTP1Connect(Sender: TObject);
begin
Label3.Caption:= 'Подключено успешно!!!';
end;
Данная процедура в случае успешного соединения выдаст в метку сообщение.
Для события OnConnectionFailed:
Procedure TForm1.NMFTP1ConnectionFailed(Sender: TObject);
begin
Label3.Caption:= 'Ошибка!!! Не могу соединиться!';
end;
13. Для записи файлов по HTTP протоколу вместо строки «// загрузка по HTTP» введите следующий код:
Edit1.Enabled:= false;
Edit2.Enabled:= false;
Button1.Enabled:= false;
Label3.Caption:= 'Подключаемся... ';
Delete(addr, 1, 7);
NMHTTP1.InputFileMode:= true;
NMHTTP1.Body:= Edit2.Text;
NMHTTP1.Get(addr); // загрузка
Button1.Enabled:= true;
Edit1.Enabled:= true;
Edit2.Enabled:= true;
Edit1.Clear;
Edit2.Clear;
14. Процесс получения данных необходимо оснастить индикатором загрузки. Для этого разместите на форме компонент ProgressBar. Выделите компонент NMFTP1 и откройте в Object Inspector закладку Events. Для события OnPacketRcvd создайте обработчик:
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.
15. После завершения загрузки очистите ProgressBar - для этого в конце FTP и HTTP фрагментов допишите следующую строку:
ProgressBar1.Position:= 0; // очищаем прогресс-бар