Guide Pascal et Delphi
Guide Pascal et Delphi
Date de publication : 10/04/2000 , Date de mise à jour : 01/04/2008
XVII. Liaison DDE
XVII-A. Présentation
XVII-A-1. Introduction
XVII-A-2. Composants
XVII-A-3. Utilisation
XVII-B. Partie Serveur
XVII-C. Partie Client
XVII-D. Cas particulier : Serveur Non-Delphi
XVII-D-1. Serveur Non-Delphi
XVII-D-2. Client Non-Delphi
XVII-E. Conclusion
XVII. Liaison DDE
Le DDE (Dynamic Data Exchange soit en Français échange de donnée dynamique) permet à
deux applications (voir plus) de communiquer entre elle. Notez qu'il ne faut pas le
confondre avec OLE qui est une autre façon de procéder mais cela est une autre histoire.
Mon but ici, n'est pas de vous montrer quelle utilisation vous pouvez en faire mais de
vous apprendre à la mettre en oeuvre et d'apprendre quelques termes. Ce qui est relativement
facile avec delphi.
XVII-A. Présentation
XVII-A-1. Introduction
Le DDE permet à deux applications de communiquer entre elles. Les applications
doivent être lancées. L'une des applications est alors serveur tandis que les autres
sont clients. Le serveur peut aussi être le client d'autres applications. La façon
dont communiquent les applications peut être de deux types. Soit les clients
appellent le serveur à chaque fois qu'ils ont besoin d'une information, soit le
serveur informe le client des nouvelles informations disponibles.
Liaison DDE - Vue d'ensemble des liaisons possibles.
XVII-A-2. Composants
Dans Delphi, vous trouverez les composants dans l'onglet Système. Ils sont au
nombre de quatre et permettent de réaliser des applications utilisant le DDE.
Dans l'ordre, on trouve : DdeServerConv, DdeServerItem, DdeClientConv et DdeClientItem.
XVII-A-3. Utilisation
Le DdeServerConv et le DDeClientConv permet d'établir la conversation entre un client
et son serveur. Mais il faut en plus ajouter les DdeServerItem et DdeClientItem pour
permettre l'échange de donnée. En fonction du nombre de donnée à échanger, on ajoute
autant de DdeServerItem que de DdeCLientItem.
Les deux composants DdeServerItem et DdeClientItem proposent les propriétés suivantes : Lines de type TStrings et Text de type TString.
L'une ou l'autre des propriétés est à utiliser en fonction de la taille de la donnée à échanger (la propriété Text de type TString est limitée à 255 caractères).
Les deux composants DdeServerItem et DdeClientItem proposent les propriétés suivantes : Lines de type TStrings et Text de type TString.
L'une ou l'autre des propriétés est à utiliser en fonction de la taille de la donnée à échanger (la propriété Text de type TString est limitée à 255 caractères).
XVII-B. Partie Serveur
Nous allons commencer par la partie Serveur pour deux choses. La première, une fois
le serveur réalisé, nous saurons quelle type de donnée, nous voulons échanger. La
deuxième lors de l'exécution ou du débogage du client, le serveur peut être chargé
automatiquement.
Dans votre projet, ajouter un composant DdeServerConv et autant de DdeServerItem que de donnée à échanger.
Dans votre projet, ajouter un composant DdeServerConv et autant de DdeServerItem que de donnée à échanger.
Vous n'êtes pas obligé d'ajouter de Composant DdeServerConv, dans ce cas c'est la
fiche contenant les DdeServerItem qui sert de serveur. Le problème est que c'est le
titre de la fiche qui est utilisé pour identifier le serveur. Si par malheur vous
changer le titre de la fiche, vous rompez la communication. Ce genre de gag, peut
vous faire passer des nuits blanches à chercher l'origine du problème. Donc à moins
que vous ne vouliez tenter le diable, utilisez toujours un DdeServerConv pour
identifier le serveur.
|
Pour mettre les nouvelles données dans les DdeServerItem, une simple affectation suffit.
|
Il ne reste plus qu'à changer les propriétés des DdeServerItem et la partie serveur
sera terminée. Donc ne perdons pas un instant et modifions la propriété ServerConv,
en indiquant soit le nom du composant DdeServerConv, soit le nom du projet sans
l'extension.
XVII-C. Partie Client
Passons maintenant à la partie client. Ajoutez un composant DdeClientConv (obligatoire
cette fois-ci) et autant de composant DdeClientItem que de DdeServerItem dont vous
voulez récupérer la valeur.
Modifiez ensuite les propriétés du DdeClientConv.
Modifiez ensuite les propriétés du DdeClientConv.
-
Modifiez ensuite les propriétés du DdeClientConv.
- Positionnez la propriété ConnectMode à DdeManual.
-
Double cliquez sur DdeService.
- Dans la partie Service indiquer le nom de l'application serveur sans l'extension.
- Dans la partie Rubrique indiquer le nom du composant DdeServerConv (ou le titre de la fiche si vous n'avez pas suivit mon conseil).
- Dans la rubrique Service application, indiquez de nouveau le nom de l'application serveur sans l'extension. Vous pouvez indiquer le chemin complet si elle n'est pas dans le même répertoire que l'application cliente
-
Modifier ensuite les propriétés de Chaque DdeClientItem.
- Dans DdeConv indiquez le DdeServerConv ou le nom de la fiche serveur.
- Dans DdeItem indiquez le nom du composant DdeServerItem.
- RePositionner la propriété ConnectMode à DdeAutomatic du DdeClientConv.
Si vous avez correctement fait les choses, l'application serveur doit se charger.
|
Lancez votre application cliente. Normalement l'application serveur est déjà chargée, si
ce n'est pas le cas vérifier les propriétés du DdeClientConv.
Arrangez-vous pour voir les deux applications en même temps. Modifiez le texte dans l'application serveur, vous pouvez voir que les modifications sont répercutées dans l'application cliente.
Arrangez-vous pour voir les deux applications en même temps. Modifiez le texte dans l'application serveur, vous pouvez voir que les modifications sont répercutées dans l'application cliente.
XVII-D. Cas particulier : Serveur Non-Delphi
Vous me direz c'est bien gentil mais que faire si le serveur n'est pas une application
Delphi. Dans ce cas, il reste une solution à condition de 'Bien' connaître
l'application serveur. En effet, pour pourvoir communiquer avec le serveur, vous devez :
- Connaître le nom du serveur. C'est la partie facile car il s'agit du nom de l'application sans l'extension.
- Connaître le nom du service. C'est là qu'il faut connaître l'application serveur.
- Connaître le sujet ou topic. Correspond aux données que vous voulez récupérer.
XVII-D-1. Serveur Non-Delphi
Exemple d'une application Cliente en Delphi communicant avec le gestionnaire de
programme donc un programme Windows.
Dans votre application cliente, ajouter un DdeClientConv, DdeClientItem, une ListBox.
Initialiser les propriétés de DdeClientConv,
Dans votre application cliente, ajouter un DdeClientConv, DdeClientItem, une ListBox.
Initialiser les propriétés de DdeClientConv,
- à ddeManuel (permet de dire à Delphi d'attendre la fin des changements).
- Double cliquez sur DdeService et indiquez : Progman dans service et sujet.
- Dans service application entrez Progman
- Modifier aussi le composant DdeClientItem,
- Dans DdeConv, indiquez le nom du DdeClientConv,
- Dans DdeItem, indiquez Groups
- Remettez ConnectMode à DdeAutomatic (On a finit les modifications et Delphi peut appliquer les changements).
Dans l'événement OnChange du DdeClientItem, faire une boucle parcourant touts les
éléments de DdeCLientItem.Lines et les ajouter dans la ListBox.
|
XVII-D-2. Client Non-Delphi
L'exemple suivant, utilise HTBasic. Je doute que beaucoup de monde l'utilise mais
ainsi vous verrez que vos applications peuvent communiquer avec une application
conçue dans n'importe quel autre langage de programmation du moment qu'il gère
les liaisons DDE. Et puis il n'y a pas que Delphi et Visual C/C++ dans la vie.
|
XVII-E. Conclusion
Pour réaliser une connexion Manuel, c'est à dire qui demande les informations. Il
suffit de placer ConnectMode à DdeManual pour le DdeClientConv. Ensuite, lors que
l'on veut récupérer les données, on invoque l'instruction RequestData. Notez qu'il
n'est plus nécessaire d'avoir des DdeClientItems dans ce cas.
Avec peu d'effort, vous pouvez rendre vos applications communicantes que se soit des serveurs ou des clients d'autre application et ce quels que soient leurs langages.
Avec peu d'effort, vous pouvez rendre vos applications communicantes que se soit des serveurs ou des clients d'autre application et ce quels que soient leurs langages.