Сергей Парижский - Delphi. Учимся на примерах
- Название:Delphi. Учимся на примерах
- Автор:
- Жанр:
- Издательство:МК-Пресс
- Год:2005
- Город:Киев
- ISBN:ISBN 966-8806-02-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Сергей Парижский - Delphi. Учимся на примерах краткое содержание
Данная книга — продолжение предыдущей книги автора, "Delphi. Только практика". Также как и в "Delphi. Только практика", в данном издании подробно рассмотрены программы для сетей, различные шуточные программы, простые игрушки, некоторые полезные приложения, разработка приложений в стиле Windows XP. В частности, здесь можно найти такие примеры как бесплатная отправка SMS, FTP-клиент, простое шифрование, CGI-сценарии и многое другое. Описаны методы работы с системным реестром Windows и INI-файлами, а также некоторые важные аспекты программирования на системном уровне с применением функций Windows API. Для облегчения понимания программ каждый пример содержит комментарии сложных строк кода.
Книга ориентирована как на тех, кто уже имеет опыт создания приложений в Delphi, так и на начинающих программистов. Для начинающих пользователей Delphi в конце книги добавлено приложение с описанием синтаксиса языка программирования Object Pascal.
Delphi. Учимся на примерах - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Разместите на форме самый важный компонент нашей программы — Client Socket категории Internet— и присвойте ему имя Client (свойство Name). Остальные свойства этого компоненты мы будем изменять в самой программе.
Полученная форма должна соответствовать рис. 16.1.
Рис. 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.
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);
Интервал:
Закладка: