Динамический обмен данными (dde)
С помощью технологии DDE два приложения могут динамически взаимодействовать и обмениваться текстовыми данными во время их выполнения. При этом программа, запрашивающая данные, становится клиентом, а программа, служащая источником данных, является сервером.
Организация динамического обмена данными включает в себя два этапа:
-
установление связи между клиентом и сервером, ее можно устанавливать при разработке и при выполнении приложения.
-
собственно передача текстовых данных:
-
получение данных от сервера
-
передача данных на сервер
-
посылка серверу команд
-
Для совместной отладки двух приложений сначала создаем сервер, а затем – клиент, или запуск двух копий приложений, в которых отлаживаются сервер и клиент.
Для организации приложения сервера должны быть размещены две компоненты DdeServerConv (сеанс обмена данными) и DdeServerItem (передаваемые данные), находящиеся в палитре компонентов на странице System. Так же нам понадобиться два редактора Edit1и Edit2 для передачи и приема текстовой информации и кнопка Button1 для реализации копирования параметров связи.
Компонент DdeServerItem через свойство ServerConv связан с компонентой DdeServerConv и непосредственно определяет текстовые данные, пересылаемые в процессе обмена. Устанавливаем связь между компонентами DdeServerConv и DdeServerItem:
procedure TForm1.FormCreate(Sender: TObject);
begin
DdeServerItem1.ServerConv := DdeServerConv1 ;
end;
Эти данные должны быть занесены в свойство Text или Lines. Например, при передаче текста из редактора Edit1 обновление свойства Text может быть выполнено в обработчике события OnChange редактора Edit1 с помощью следующего оператора:
procedure TForm1.Edit1Change(Sender: TObject);
begin
DdeServerItem1.Text:=Edit1.Text;
end;
При подключении к серверу клиента последнему нужна информация о параметрах сервера. Эти параметры могут быть помещены в буфер обмена с помощью метода CopyToClipboard компоненты DdeServerItem. Затем эти параметры можно извлечь и использовать в приложении клиента при подключении к серверу.
procedure TForm1.Button1Click(Sender: TObject);
begin
DdeServerItem1.CopyToClipboard ;
end;
Если сервер может принимать данные от клиента, в программе должен быть подготовлен обработчик события OnPokeData компоненты DdeServerItem. При отображении получаемых данных в редакторе Edit2 оператор обработчика может иметь вид:
procedure TForm1.DdeServerItem1PokeData(Sender: TObject);
begin
Edit2.Text:= DdeServerItem1.Text;
end;
Если сервер может обрабатывать макросы, то соответствующие действия кодируются в обработчике события OnExecuteMacro типа TMacroEvent компоненты DdeServerConv. Тип события описан следующим образом:
Type TMacroEvent=procedure (Sender: TObject; Msg: TStrings) of Object;
Для организации приложения клиента должны быть размещены две компоненты DdeClientConv (сеанс обмена данными) и DdeClientItem (передаваемые данные), находящиеся в палитре компонентов на странице System. Компонент DdeClientConv обеспечивает установление сеанса связи с сервером и управление процессом обмена данными, используя параметры сервера в следующих свойствах:
-
DDEService- название сервера, имя приложения сервера без расширения
-
DDETopic- предмет обмена, например, DdeSeverConv
-
ServiceAplication- полное имя исполняемого файла приложения сервера без расширения, если приложение сервер находится не в текущем каталоге.
Эти параметры можно установить через “Инспектор объектов” в свойстве DdeService, если предварительно скопировать параметры связи в приложении сервера и вставить их в окне DDE Info по кнопке Paste Link:
Такие изменения можно внести в обработчик события OnCreate формы:
DdeClientConv1.DdeService := 'Server';
DdeClientConv1.DdeTopic := 'DdeServerConv1';
Так же нам понадобиться два редактора Edit1и Edit2 для передачи и приема текстовой информации и кнопка Button1 для реализации передачи данных на сервер.
Свойство ConnectMode компоненты DdeClientConv управляет режимом подключения клиента к серверу и принимает значение ddeAutomatic (автоматическое соединение) или ddeManual (ручное соединение). Если при запуске приложения клиента приложение сервера еще не было запущено, то оно автоматически запускается при значении ddeAutomatic. Если значение установлено в ddeManual, то приложение сервера будет запускаться по вызову метода OpenLink компоненты DdeClientConv. Для отключения от сервера используют метод CloseLink.
Компонент ddeClientItem отвечает за получаемые от сервера данные, которые заносятся в те же свойства, что и у компоненты ddeServerItem. При изменении данных компонента ddeClientItem генерирует событие OnChange, обработчик которого используется для приема этих данных.
procedure TForm1.DdeClientItem1Change(Sender: TObject);
begin
edit1.Text :=DdeClientItem1.Text ;
end;
Клиент может принимать данные от сервера и посылать ему данные и команды для выполнения (макросы). Для этого используют метод PokeData или PokeDataLines (для нескольких строк):
procedure TForm1.Button1Click(Sender: TObject);
var pc:PChar;
begin
DdeClientConv1.PokeData(ddeclientitem1.DdeItem,
StrPCopy(pc, edit2.Text));
end;
На сервере должен быть подготовлен обработчик события OnPokeData компоненты DdeServerItem Для посылки макросов используют метод ExecuteMacro или ExecuteMacroLines. На сервере выполнение макросов кодируется в обработчике события OnExecuteMacro компоненты DdeServerConv.
Компонент DdeClientItem связывается с компонентом ddeClientConv через свойство DdeConv, а через свойство ddeItem указывается компонент DdeServerItem, с которым выполняется обмен данными:
DdeClientItem1.DdeConv :=DdeClientConv1 ;
DdeClientItem1.DdeItem := 'DdeServerItem1';
Теперь при запуске обоих приложений можно передавать данные между ними.
- Новые технологии.
- Создание новых компонент
- Добавление свойств
- Добавление методов
- Добавление событий
- Разработка ресурсов для компоненты
- Установка компоненты
- Испытание компоненты
- Редактирование компоненты
- Создание справочной службы помощи
- Динамически подключаемые библиотеки (dll)
- Работа с буфером обмена
- Динамический обмен данными (dde)
- Связывание и внедрение объектов (ole)
- Упражнения: