ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Exemple d'utilisation du service DDE   



L'auteur

Francis Faure
France France
Membre Actif (personne physique)
# 0000000001
enregistré le 11/10/2004

http://www.wanagain.net
56 ans
Faure Francis
de la société Design Or Decline
Fiche personnelle


Note des membres
pas de note

Contributions > 05 - API et appels systèmes

Exemple d'utilisation du service DDE
# 0000000355
ajouté le 10/10/2006 19:08:40 et modifié le 11/10/2006
consulté 8591 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0
VFP 5.0
VFP 3.0
FPW 2.6

Description

Suite à un post de Laurent dans le newsgroup, demandant de pouvoir gérer en "DDE" :
- savoir si son application est déjà lancée
- déclencher un traitement dans l'application déjà lancée

Nous utilisions cette technique en FPW2.6 pour imposer qu'une seule instance de notre application sur un poste,

Cordialement
Francis FAURE

Code source :
*
* illustration de l'utilisation des services DDE
* - Tester si l'application est déjà lancée
* - Si oui : elle est déjà lancée : envoyer un message demandant un traitment dans l'autre application et sortir de cette nouvelle instance
* - Si non : installer un serveur DDE
*

#define MON_SERVICE "NomDeMonAppli"

* tester si l'appli est déjà démarrée...
=DDEsetOption("SAFETY",.F.)
v_Canal = DDEInitiate(MON_SERVICE, "system")
v_Retour = DDElastError()
=DDEsetOption("SAFETY",.T.)
if v_Retour = 0
  * Service déjà lancé ...
  =ddeterminate(v_Canal)

  * demander à l'autre instance de l'application de zoommer (exemple)
  v_Canal = DDEInitiate(MON_SERVICE, "ACTIONS")
  =DDEEXECUTE(v_Canal, "ZOOM")
  =ddeterminate(v_Canal)

  * sortir
  return
else
  * démarrage d'un serveur DDE
  =ddesetservice(MON_SERVICE,'DEFINE')
  =ddesetservice(MON_SERVICE,'EXECUTE'.T.)
  =ddesetTopic(MON_SERVICE, "ACTIONS""ProcActions")
endif

WAIT windows "Wait windows pour simuler une application en cours d'utilisation"

* arret du service DDE
=ddesetservice(MON_SERVICE, "RELEASE")
return

* Procedure pour le serveur DDE
Procedure ProcActions(Channel, Action, Item, Data, Format, Advise)
  IF Action="EXECUTE"
    DO case
      CASE DATA="ZOOM"
        * exemple
        _screen.WindowState = 1
        _screen.WindowState = 2
    endcase
  endif
return

Commentaires
le 11/10/2006, laurent.dellacherie a écrit :
Un grand merci pour cette exemple

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3