Книга: Delphi. Учимся на примерах

Разработка программного кода

Разработка программного кода

Обработаем нажатия кнопок соединения и отключения от сервера. Обработчик события OnClick для кнопки Подключиться:

procedure TForm1.Button1Click(sender: TObject);
begin
 ftp.Host:= ftpserver.Text; //ftp-сервер
 ftp.UserID:= name.Text;//логин
 ftp.Password:= pass.Text;// пароль
 ftp.Port:= StrToInt(port.Text); //порт для подключения
 //соединяемся с сервером
 if not ftp.Connected then ftp.Connect;
end;

Здесь мы считываем все данные, которые необходимы для соединения с сервером. После этого мы пытаемся соединиться с сервером. Об успешности этой операции можно будет узнать в поле состояния.

Обработаем нажатие кнопки Отключиться:

procedure TForm1.Button2Click(Sender: TObject);
begin
 if ftp.Connected then//если соединен
  ftp.Disconnect;//отключиться от сервера
end;

Если при нажатии кнопки Отключиться установлено соединение с сервером, то мы разрываем его.

Теперь обработаем нажатие кнопок, которые служат для работы с сервером. Обработчик события OnClick для кнопки Удалить:

procedure TForm1.Button4Click(Sender : TObject);
begin
 ftp.Delete(del.text); //удалить файл
end;

Здесь мы удаляем файл, имя которого пользователь ввел в поле рядом с кнопкой.

Обработаем нажатие кнопки Изменить каталог:

procedure TForm1.Button5Click(Sender: TObject);
begin
 ftp.ChangeDir(cd.Text); //изменяем каталог
end;

Устанавливаем текущим тот каталог, который указан в поле cd.

Обработаем нажатие кнопки Выполнить команду:

procedure TForm1.Button6Click(Sender: TObject);
begin
 ftp.DoCommand(cmd.Text); //выполнение команды
end;

При работе с сервером мы предоставляем пользователю возможность работать не только с помощью команд, предусмотренных в интерфейсе, но и выполнять на сервере любые произвольные команды. Для этого у нас есть поле cmd, в котором пользователь вводит команду, и кнопка Выполнить команду, по нажатию которой введенная команда выполняется.

Обработаем нажатие кнопки Создать каталог:

procedure TForm1.Button7Click(Sender: TObject);
begin
 ftp.MakeDirectory(md.Text); //создать каталог
end;

Обработаем нажатие кнопки Удалить каталог:

procedure TForm1.Button8Click(Sender: TObject);
begin
 ftp.RemoveDir(rd.Text); //удалить каталог
end;

Обработаем нажатие кнопки Скачать файл:

procedure TForm1.Button9Click(Sender: TObject);
begin
 //открытие диалогового окна сохранения файла
 if Save1.Execute
 then //скачиваем указанный файл
  ftp.Download(download.Text, save1.FileName)
 else ShowMessage('File not saved!'); {если пользователь отказался сохранять файл}
end;

Сначала мы предлагаем пользователю указать имя и путь размещения полученного файла. Затем мы загружаем файл и размещаем его по указанному пути.

Наконец, обработаем нажатие кнопки Загрузить файл на сервер:

procedure TForm1.Button3Click(Sender: TObject);
var
 i: integer;
 FName, temp: string; //для получения имени файла
begin
 if not Open1.Execute then ShowMessage('Файл не выбран!')
 else begin
 //очищаем переменные, которые содержат имя файла
 temp:= '';
 FName:= '';
 //получаем имя файла
 for i: = Length(Open1.FileName) downto 1 do
 begin
  if Open1.FileName[i] = '' then break;
  temp:= temp+ Open1.FileName[i];
 end;
 for i:=length(temp) downto 1 do
  fname:= fname + temp[i];
  ftp.Upload(Open1.FileName, FName); //загружаем файл
 end;
end;

Здесь мы сначала просим пользователя выбрать файл, который он хочет передать на сервер. Затем узнаем имя выбранного файла и загружаем его на сервер с таким же именем.

В общем, наш ftp-клиент уже полностью работоспособен и выполняет все необходимые функции. Единственное, что осталось сделать, — реализовать извещение пользователя о протекании всех операций и обо всех ошибках. Для этого следует создать несколько обработчиков событий компонента ftp.

Событие в случае возникновения ошибки при проверке имени и пароля — OnAuthеntiсatiоnFailed:

procedure TForm1.ftpAuthenticationFailed(var Handled: Boolean);
begin
 status1.Lines.Add('Неверное имя или пароль');
end;

Событие при подключении — OnConnect:

procedure TForm1.ftpConnect(Sender:tobject);
begin
 status1.Lines.Add('Подключено');
 //локальный ip-адрес
 status1Lines.Add('IP клиента: ' + ftp.LocalIP);
 //удаленный ip-адрес
 status1Lines.Add('IPсервера: ' + ftp.RemoteIP);
end;

Событие в случае возникновения ошибки при подключении — OnConnectionFailed:

procedure TForm1.ftpConnectionFailed(Sender: TObject);
begin
 status1.Lines.Add('He удалось подключиться к серверу');
end;

Событие при отключении от сервера — OnDisconnect:

procedure TForm1.ftpDisconnect(Sender: TObject);
begin
 status1.Lines.Add('Отключено');
end;

Событие в случае возникновения некоторой ошибки — OnError:

procedure TForml.ftpError(Sender: TComponent; Errno: Word; Errmsg: String);
begin
 status1.Lines.Add('Ошибка: ' + errmsg);
end;

Событие в случае возникновения ошибки при подключении к серверу — OnInvaIidHost:

procedure TForm1.ftpInvalidHost(var Handled: Boolean);
begin
 status1.Lines.Add('Ошибка при подключении к серверу');
end;

Событие при изменении состояния — OnStatus:

procedure TForm1.ftpStatus(Sender: TComponent; Status: String);
begin
 status1.Lines.Add(Status);
end;

Событие при успешном выполнении операции — OnSuccess:

procedure TForm1.ftpSuccess(Trans_Type: TCmdType);
begin
 status1.Lines.Add('Успешно');
end;

Событие начала передачи данных — OnTransactionStart:

procedure TForm1.ftpTransactionStart(Sender: TObject);
begin
 status1.Lines.Add('Начало передачи данных');
end;

Событие завершения передачи данных — OnTransactionStop :

procedure TForm1.ftpTransactionStop(Sender: TObject);
begin
 statusl.Lines.Add('Конец передачи данных');
end;

Теперь программа полностью готова к использованию. Если у вас нет собственного Web-сайта, то для тестирования FTP-клиента можете зарегистрировать сайт на бесплатном хостинге.

Оглавление книги


Генерация: 0.030. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз