Справочное руководство по Delphi

       

DDE-серверы


  • На рис.3 представлен пример DDE-сервера во время дизайна в среде Delphi.
  • Рис.3: DDE-сервер в среде Delphi.

    Для построении DDE-сервера в Delphi имеются два объекта, расположенные на странице System Палитры Компонент - TDdeServerConv и TDdeServerItem. Обычно в проекте используется один объект TDdeServerConv и один или более TDdeServerItem. Для получения доступа к сервису DDE-сервера, клиенту потребуется знать несколько параметров : имя сервиса (Service Name) - это имя приложения (обычно - имя выполняемого файла без расширения EXE, возможно с полным путем); Topic Name - в Delphi это имя компоненты TDdeServerConv; Item Name - в Delphi это имя нужной компоненты TDdeServerItem.

    Назначение объекта TDdeServerConv - общее управление DDE и обработка запросов от клиентов на выполнение макроса. Последнее выполняется в обработчике события OnExecuteMacro, например, как это сделано в нашем случае:

    procedure TDdeSrvrForm.doMacro(Sender: TObject;

    Msg: TStrings);

    var

    Text: string;

    begin

    Text := '';

    if Msg.Count > 0 then Text := Msg.Strings[0];

    MessageDlg ('Executing Macro - ' + Text, mtInformation,



    [mbOK], 0);

    end;

    Объект TDdeServerItem связывается с TDdeServerConv и определяет, что, собственно, будет пересылаться по DDE. Для этого у него есть свойства Text и Lines. (Text имеет то же значение, что и Lines[0].) При изменении значения этих свойств автоматически происходит пересылка обновленных данных во все приложения-клиенты, установившие связь с сервером. В нашем приложении изменение значения свойства Lines происходит в обработчике события OnChange компонента Edit1:

    procedure TDdeSrvrForm.doOnChange(Sender: TObject);

    begin

    if not FInPoke then

    DdeTestItem.Lines := Edit1.Lines;

    end;

    Этот же компонент отвечает за получение данных от клиента, в нашем примере это происходило при нажатии кнопки Poke Data, это выполняется в обработчике события OnPokeData:

    procedure TDdeSrvrForm.doOnPoke(Sender: TObject);

    begin

    FInPoke := True;

    Edit1.Lines := DdeTestItem.Lines;

    FInPoke := False;


    end;

    И последнее - установление связи через Clipboard. Для этого служит метод CopyToClipboard объекта TDdeServerItem. Необходимая информации помещается в Clipboard и может быть вызвана из приложения-клиента при установлении связи. Обычно, в DDE-серверах для этого есть специальный пункт меню Paste Special или Paste Link.

    Итак, мы рассмотрели пример полнофункционального DDE-сервера, построенного с помощью компонент Delphi. Очень часто существующие DDE-серверы не полностью реализуют возможности DDE и предоставляют только часть сервиса. Например, ReportSmith позволяет по DDE только выполнять команды (макросы).


    Содержание раздела