|
Débuté par Philippe, 17 mai 2005 12:56 - 1 réponse |
| |
| | | |
|
| |
Posté le 17 mai 2005 - 12:56 |
Bonjour,
Je souhaiterai savoir comment faire pour lancer une application Windev mono instance à partir d'une application tierce mais en passant des paramètres de positionnement de fenêtre différents à chaque lancement. L'instance déjà active doit prendre en compte les nouveaux paramètres et repositionner la fenêtre.
Merci |
| |
| |
| | | |
|
| | |
| |
Posté le 17 mai 2005 - 16:54 |
>>Exe Principal : // L'exé qui lance l'exé mono-instance
Variable Globale au Projet : HandleExeMonoInstance est un entier // Ne pas modifier au cours du programme NumConnect est un entier // Ne pas modifier au cours du programme
PROCEDURE Globale au projet :
PROCEDURE ExeMonoInstance() SI SysHandleValide(HandleExeMonoInstance) ALORS // Une instance de l'exé mono-instance est active Res est un booleen Res = DDEEnvoie(NumConnect,"AppelDDE","FenX;FenY",1) // FenX et FenY correspondent à la nouvelle position de la fenetre SI Res ALORS la fenetre est repositionnée SINON Erreur(...) SysDonneFocus(HandleExeMonoInstance) // Focus sur l'exé mono-instance si tu veux SINON // Aucune instance de l'exé mono-instance NumConnect = 0 SI LanceAppli(fRepExe()+"\ExeMonoInstance.exe "FenX;FenY",exeActif,exeNonBloquant) ALORS Multitâche() i est un entier POUR i = 1 A 10 NumConnect = DDEConnecte("ExeMonoInstance","AppelDDE") SI NumConnect > 0 ALORS SORTIR Multitâche(-50) // Du temps pour la liaison DDE FIN HandleExeMonoInstance = SysFenHandle("TitreDeLaFenetreDeExeMonoInstance") // Correspond au titre de la fenetre principale de l'exé mono-instance SI HandleExeMonoInstance = Null OU NumConnect = 0 ALORS Erreur("Impossible d'établir la connexion DDE") // En cas d'erreur, vaut mieux fermer l'exé mono-instance et retenter un lancement
SINON Erreur("Impossible de lancer ExeMonoInstance") // Sauf erreur, un lien DDE est activé entre les 2 exé
FIN
Lorsque tu fais appel à l'exé mono-instance, il te suffit de lancer la procédure ExeMonoInstance() // Tu peux même passer FenX et FenY en paramètre, ce que je n'ai pas fait ici
Exe mono-instance ou la position de la fenetre doit changer : Déclaration Globale au Projet : DDEEvénement("AppelDDE",DDEARecevoir) // Lorsque le lien est activé, il est prêt a recevoir les instructions de l'exé principal // La procédure "AppelDDE" est dans l'instruction DDEEnvoie() de l'exé principal // (meme nom !)
PROCEDURE Globale au projet :
PROCEDURE AppelDDE() // La procédure à exécuter sur ordre de l'exé principal par DDEEnvoie _DDE.Cr = 1 // Renvoie OK à DDEEnvoie de l'exé principal // _DDE.Chaine correspond au 3ème paramètre de DDEEnvoie(), c-a-d FenX et FenY FenX est un entier = ExtraitChaine(_DDE.Chaine,1,";") FenY est un entier = ExtraitChaine(_DDE.Chaine,2,";")
LaFenetre..X = FenX // Tu repositionnes la fenetre LaFenetre..Y = FenY
1èreFenetreDuProjet : Déclaration globale :
// Ici, c'est lorsque tu lances l'exé mono-instance la première fois, tu récupères les coordonnées de la fenetre avec la ligne de commande // envoyée par LanceAppli() plus haut MaFenetre..X = Val(ExtraitChaine(LigneCommande(),1,";")) MaFenetre..Y = Val(ExtraitChaine(LigneCommande(),2,";"))
Condition pour que ca marche : les 2 exe doivent être dans le meme répertoire A tester ! |
| |
| |
| | | |
|
| | | | |
| | |
|