Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие по СПр.doc
Скачиваний:
7
Добавлен:
16.12.2018
Размер:
690.69 Кб
Скачать

Компонент tddeClientItem

Этот компонент представляет элемент данных на клиентской стороне. После установления контакта с сервером нужно присвоить свойству:

property DDEConv: TDDEClientConv;

указатель на объект, соответствующий появившемуся контакту, а свойству:

property DDEItem: String;

имя элемента данных сервера. В этом случае все изменения будут отслеживаться.

Организация данных клиентского приложения сходна с той, которая принята на сервере:

property Text: String;

property Lines: TStrings;

Свойство Text является подмножеством Lines и содержит первую строку этого набора.

Изменения данных на сервере отражаются в компоненте TDDEClientItem. В этот момент происходит событие

property OnChange: TNotifyEvent;

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

В рассмотренном ниже примере приложение-клиент вступает в контакт с сервером InfoServer на тему TimeTopic. При нажатии КНОПКИ TimeButton связь устанавливается, при отпускании — разрывается. Метод TimeConvOpen, служащий обработчиком события OnOpen, присваивает значения именам темы и элемента данных:

const

InfoServer = 'infoserv';

TimeConversation = 'TimeTopic';

ServerTimeItem = 'TimeItem';

SCannotStart = 'Cannot start conversation';

procedure TForm1.TimeButtonClick(Sender: TObject);

begin

if TimeButton.Down then

begin

if not TimeConv.SetLink(InfoServer,

TimeConversation) or not TimeConv.OpenLink then begin

MessageDlg(SCannotStart, mtError, [mbOk], 0); TimeButton.Down := False;

end

end

else TimeConv.CloseLink;

end;

procedure TForml.TimeConvOpen(Sender: TObject);

begin

ClientTimeItem.DDEConv := TimeConv;

ClientTimeItem.DDEItem := ServerTimeItem;

end;

К недостаткам DDE нужно отнести сложность и относительно высокие накладные расходы со стороны системы. К тому же фирма Microsoft предупредила, что может отказаться от поддержки DDE следующих версиях своих операционных систем. Но на современном этапе это — проверенный способ взаимодействия как между двумя вашими задачами, так и со сторонними продуктами.

1.2.2. Ход выполнения работы

  1. Ознакомиться с краткими теоретическими сведениями, текстом учебного проекта и материалами к данной лабораторной работе.

  2. Разработать серверное приложение, в котором осуществляется вызов изученных в соответствии с индивидуальным заданием к первой лабораторной работе функций, обработка и представление в понятном для пользователя виде возвращаемых ними результатов или достигаемых с их помощью эффектов (изменений режимов работы объектов операционной системы или пользовательского интерфейса).

  3. Разработать клиентское приложение, в котором будет осуществляться прием и отображение данных, получаемых по запросу от сервера.

  4. Организовать обмен данными, возвращаемыми Вашими функциями Windows API (см. индивидуальное задание к лабораторной работе №1), между серверным и клиентским приложениями с использованием компонентов TDDEClientConv и TDDEClientItem (для клиента) и TDDEServerConv и TDDEServerItem (для сервера).

  5. (Факультативное задание) Разработать серверное и клиентское приложения, реализующие ту же задачу путем посылки и обработки сообщений вида WM_DDE_XXX.