Сергей Парижский - Delphi. Учимся на примерах

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.
Описание книги "Delphi. Учимся на примерах"
Описание и краткое содержание "Delphi. Учимся на примерах" читать бесплатно онлайн.
Данная книга — продолжение предыдущей книги автора, "Delphi. Только практика". Также как и в "Delphi. Только практика", в данном издании подробно рассмотрены программы для сетей, различные шуточные программы, простые игрушки, некоторые полезные приложения, разработка приложений в стиле Windows XP. В частности, здесь можно найти такие примеры как бесплатная отправка SMS, FTP-клиент, простое шифрование, CGI-сценарии и многое другое. Описаны методы работы с системным реестром Windows и INI-файлами, а также некоторые важные аспекты программирования на системном уровне с применением функций Windows API. Для облегчения понимания программ каждый пример содержит комментарии сложных строк кода.
Книга ориентирована как на тех, кто уже имеет опыт создания приложений в Delphi, так и на начинающих программистов. Для начинающих пользователей Delphi в конце книги добавлено приложение с описанием синтаксиса языка программирования Object Pascal.
Рис. 16.1. Форма клиентской программы для удаленного управления указателем
Разработка программного кода
По нажатию кнопки Connect должны считываться все настройки и выполняться соединение с сервером:
procedure TForm1.Button1Click(Sender: TObject);
begin
Client.Port:= StrToInt(port.Text); //считываем порт
Сlient.Address:= ip.text; //считываем ip-адрес сервера
Client.Active:= True; //соединяемся
Timer1.Enabled:= True; //включаем таймер
end;
Сначала мы считываем все необходимые настройки, а затем предпринимаем попытку соединиться с сервером. Если все нормально, то включаем таймер, по которому будут передаваться координаты указателя мыши.
Обработаем нажатие кнопки Disconnect:
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:= False;//выключаем таймер
Client.Close; //закрываем соединение
Client.Active:=False; //отключаемся от сервера
end;
При нажатии кнопки Disconnect мы перестаем передавать координаты указателя на сервер и отсоединяемся от него.
Для того чтобы на сервере не возникало ошибок при аварийном выключении клиента, создайте обработчик события формы OnDestroy и добавьте в него следующий код:
procedure TForm1.FormDestroy(Sender: TObject);
begin
Client.Close; //закрываем соединение
Client.Active:=False; //отключаемся от сервера
end;
При аварийном завершении программы закрывается соединение и выполняется отключение от сервера.
Для уведомления пользователя об успешном соединении с сервером создайте обработчик события client.OnConnect:
procedure TForm1.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
ShowMessage('Connected!'); //показать сообщение
end;
Для реализации аналогичного действия при отсоединении от сервера, следует создать обработчик события OnDisconnect:
procedure TForml.ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
ShowMessage('Disconnected!'); //сообщение при отсоединении
end;
Теперь обработаем событие OnTimer для компонента Timer:
procedure TForm1.Timer1Timer(Sender: TObject);
var
cur:TPoint; //хранит координаты указателя мыши
begin
GetCursorPos(cur); //узнаем координаты указателя мыши
//отправляем данные на сервер
Client.Socket.SendText(IntToStr(cur.X) +'_' + IntToStr(cur.Y));
end;
Каждые полсекунды мы будем получать координаты указателя мыши и отправлять их на сервер. Программа-клиент полностью готова. Теперь разработаем программу-сервер.
Разработка серверной программы
Создайте новый проект Delphi. Разместите на форме главный компонент программы — ServerSocket категории Internet и измените значение его свойства Port на 2801.
Первым делом, обеспечим нашей форме невидимость. Создайте обработчик события формы OnPaint и добавьте в него следующий код:
procedure TForm1.FormPaint(Sender: TObject);
begin
Form1.Hide;
end;
Для того чтобы активизировать сервер при запуске программы, необходимо обработать событие формы OnCreate:
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Active:= True; //активизировать сервер
end;
Для того чтобы при выходе из программы сервер отключался, необходимо обработать событие формы OnDestroy:
procedure TForm1.FormDestroy(Sender: TObject);
begin
ServerSocket1.Active:= False; //отключаем сервер
end;
Теперь осталось только обработать событие OnClientRead компонента ServerSocket. Это событие будет происходить каждый раз, когда будет поступать команда от клиента. Код обработчика этого события имеет следующий вид:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
str, x, y: string; //полученный текст и координаты
//указателя по X и по Y
i, j: integer; //счетчики циклов
begin
//обнуляем координаты курсора
х := ' ';
у := ' ';
str:= Socket.ReceiveText; //полученный от клиента текст
for i:=1 to Length(str) do begin
if str[i] <> '_' then x:= x + str[i]; //координаты по х
if str[i] = '_' then Break; //разделитель между
//координатами указателя
end;
for j:= i+1 to Length(str) do у:= y+str[j]; //координаты по у
//устанавливаем новые координаты указателя
SetCursorPos(StrToInt(x), StrToInt(у));
end;
При получении текста мы считываем в отдельные переменные значение координат указателя по X и по Y. Затем изменяем координаты на те, которые только что получили от клиента.
Теперь программа полностью готова, и для того чтобы протестировать ее, необходимо иметь хотя бы два компьютера, объединенные в локальную сеть или подключенные к Internet.
Полный исходный код модулей
Полный код модуля серверной программы представлен в листинге 16.1.
Листинг 16.1. Модуль серверной программыunit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp;
type TForm1 = class(TForm)
ServerSocket1: TServerSocket;
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ServerSocketlClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormDestroy(Sender: TObject);
begin
ServerSocket1.Active:= False; //отключаем сервер
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Active:= True; //активизировать сервер
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
str, x, y: string; //полученный текст и координаты
//указателя по X и по Y
i, j: integer; //счетчики циклов
begin
//обнуляем координаты курсора
х := ' ';
у := ' ';
str:= Socket.ReceiveText; //полученный от клиента текст
for i:=1 to Length(str) do begin
if str[i] <> '_' then x:= x + str[i]; //координаты по х
if str[i] = '_' then Break; //разделитель между
//координатами указателя
end;
for j:= i+1 to Length(str) do у:= y+str[j]; //координаты по у
//устанавливаем новые координаты указателя
SetCursorPos(StrToInt(x), StrToInt(у));
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Form1.Hide;
end;
end.
Полный код модуля клиентской программы представлен в листинге 16.2.
Листинг 16.2. Модуль клиентской программыunit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls, ExtCtrls;
type TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Client: TClientSocket;
Timer1: TTimer;
port: TEdit;
ip: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:= False;//выключаем таймер
Client.Close; //закрываем соединение
Client.Active:= False; //отключаемся от сервера
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Client.Close; //закрываем соединение
Client.Active:=False; //отключаемся от сервера
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Client.Port:= StrToInt(port.Text); //считываем порт
Сlient.Address:= ip.text; //считываем ip-адрес сервера
Client.Active:= True; //соединяемся
Timer1.Enabled:= True; //включаем таймер
end;
procedure TForm1.Timer1Timer(Sender: TObject);
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!
Похожие книги на "Delphi. Учимся на примерах"
Книги похожие на "Delphi. Учимся на примерах" читать онлайн или скачать бесплатно полные версии.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Отзывы о "Сергей Парижский - Delphi. Учимся на примерах"
Отзывы читателей о книге "Delphi. Учимся на примерах", комментарии и мнения людей о произведении.