DDE Client
Version 1.3
composant Delphi

 

Vincent LESAUVAGE
26, allée Darius Milhaud - 75019 PARIS - FRANCE
vincent@lesauvage.com
http://www.lesauvage.com

 

Voici le composant que Borland n'est pas arrivé à faire correctement depuis Delphi 2.0, et qui est enfin disponible aujourd'hui: un composant DDE qui permet de se connecter à une source de données comme Excel ou Reuter afin de récupérer en temps réel des informations.

L'unité DDE implémente dans 2 composants (TDDEManager et TDDEClient) le protocole d'échange dynamique de données (Dynamic Data Exchange) pour la partie client. Elle peut s'utiliser avec toutes les versions de Delphi en 16 et 32 bits.

En effet lorsque 2 applications communiquent entre elles en utilisant le protocole DDE, celle qui fournit les données est appelée serveur, et celle qui reçoit les données est appelée client. Le processus d'échange entre les 2 applications s'appelle une conversation. C'est l'application cliente qui engage la conversation.

Les données sont répérées par des adresses (comme les personnes). Une adresse est structurée en 3 catégories (Service, Topic, Item): Service désigne la source de données, en général le nom du programme; Topic désigne un groupe de données qui ont les mêmes propriétés; Item désigne une donnée parmi ce groupe. Ainsi quand une application cliente désire recevoir des données d'une application serveur, elle envoie une requête <Service, Topic> au serveur qui accepte ou refuse la conversation. Puis le client demande une donnée particulière avec une requête <Item>. Le client peut aussi demander au serveur de l'avertir lorsqu'une donnée change de valeur.

Une application cliente peut avoir plusieurs conversations simultanées avec plusieurs serveurs.
 

 

TDDEManager

TDDEManager = class(TComponent)
    Clients: TList;

    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    function PasteLink(var Service, Topic, Item: string): Boolean;
    function PasteLinkEx(cfFormat: Integer; var Service, Topic, Item: string): Boolean;
  end;

TClient = class
    DDEClient: TDDEClient;

    constructor Create(DDEC: TDDEClient);
  end;

Le composant TDDEManager initialise le protocole DDE pour l'application cliente. Une application qui désire utiliser le DDE doit avoir un et un seul composant TDDEManager. Une erreur EDDEError est générée en cas de problème.

 

TDDEClient

TDDEClient = class(TComponent)
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    function OpenConversation: Boolean;
    function CloseConversation: Boolean;
    function IsOpen: Boolean;

    function RequestData(Item: string; var DataSize: Integer): PChar;
    function AdviseData(Item: string): Boolean;
    function UnadviseData(Item: string): Boolean;
    function Execute(Item: string; Command: string): Boolean;
    function Poke(Item: string; pData: Pointer; DataLength: Integer): Boolean;
    function PokeEx(cfFormat: Integer; Item: string; pData: Pointer; DataLength: Integer): Boolean;

    property Service: string;
    property Topic: string;
    property Format: Integer;
    property TimeOut: Integer;
    property OnDataChange: TOnDataChange;
  end;

TOnDataChange = procedure(DDEClient: TDDEClient; Item: string; const Value: PChar; ValueSize: Integer) of object;

Le composant TDDEClient représente la conversation entre l'application cliente et le serveur.

Une fois la conversation établie, la récupération des données peut commencer en renseignant au préalable les champs Format et TimeOut.