Bonjour;
je travaille sur deux applications et je veux qu'au clic d'un bouton de la première application ouvrir le projet de la duxième application mais sans avoir recourt au composant OpenDialog.
merci d'avance.
Bonjour;
je travaille sur deux applications et je veux qu'au clic d'un bouton de la première application ouvrir le projet de la duxième application mais sans avoir recourt au composant OpenDialog.
merci d'avance.
Bref tu veux qu'une de tes applications ordonnes à une deuxième d'ouvrir un fichier donné ?
oui, exact.
Salut !
Dans ta première aplication :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void __fastcall TForm1::Button1Click(TObject *Sender) { ShellExecute(NULL,"Open", "Chemin de ta 2eme application", "Chemin du fichier à ouvrir par la 2eme application", NULL,1); }
dans ta 2eme application qui v recevoire comme paramètre :le chemin complet du fichier à ouvrir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void __fastcall TForm1::FormShow(TObject *Sender) { if (ParamCount()>0) { AnsiString FichierAOuvrir=ParamStr(1); //Ouverture d fichier } }
++
merci, je vais essayer
re
C'est l'évenement OnShow de la form de la 2eme application qui va ouvrir les fichier.
++
j'ai compris, il faut ajouter un évenemt et non un composant
la suite a trés bien marché, merci à tous![]()
pardon, un petit problème est survenu.
lors de l'execution, avant que la 2ième application ouvre le fichier demandé, un message " session en débogage...." s'affiche. je sais que c'est normale puisque la 1ière application était en état d'execution, mais est ce qu'on peut éviter ce message?
Peut être compiler ta deuxième application en version Finale et non débug...même si je n'ai jamais eu ce problème en faisant des choses similaires.
pardon, je n'ai pas compris.
résumé du problème: dans la forme de la 1ière application un click sur un bouton permet d'ouvrir la 2ième application (càd .bpr). avant qu'elle s'ouvre le message (session en débogage voulez vous arrêtez) apparaît. en choisissant arrêter l'execution de la 1ière application s'achève et le .bpr de la 2ième application s'ouvre et c'est bien ce que je veut mais si possible sans le message de débogage.
Salut !
C'est pas dutout ce que j'ai compris !
et je ne voi pas dutout l'interête![]()
Y a sûrement une autre solution pour ton problème![]()
++
je sais que ce n'ai pas ce que vous avez compris mais comme ça ma pratiquement résolu le problème , j'ai continuer sur votre piste.
concernant l'interet, il faut vous expliquer le contexte de mon travail:
ils nous est été demander de réaliser une partie d'un analyseur syntaxique (partie d'un compilateur). cet analyseur va permettre de génerer le code c d'une grammaire donnée (il faut avoir des notion de compilation pour comprendre).donc la 1ière application génère ce code dans une deuxième application ceci a été fait en écrivant le code c dans le .h de la 2 ième app et pour compiler ce dernier j'ai voulu fair le lien dont je parlais.
pardon d'être trop lente. ce n'est pas grave si vous m'avez pas comprise. j'ai juste voulu vous expliquer.
re
Pourquoi ne pas executer ton code source généré en langage C sous commande DOS (avec ShellExecute par example);comme ça t'aura pas la peinne de fermer et ouvrir les deux application à chaque fois,puisque t'aura le resultat sous DOS![]()
En ce qui concerne les notions du compilateur :
Les phase d'analyse d'un compilateur ne génèrent pas un code source ,au contraire,c'est à partir du code source que commence leur travail (enlever les blancs inutiles,vérifier les erreurs syntaxiques,sémantiques ou lexicals...tel "int 1x;"...) en utilisant les méthodes ascendantes et ou décsendantes (LLK,SLR,LALR,SLAR,procedure récursive...)![]()
Bonne continuation...
il ne faut pas rire avant de comprendre![]()
voici le travail à réaliser en claire:
développer un générateur d'analyseur syntaxique utilisant la méthode d'analyse de précédence simple ou faible selon le choix.à partir d'une grammaire G en entrée par un utilisateur du générateur vérifier s'il est possible d'effectuer une analyse de précédence simple/faible. si oui générer le programme d'analyse syntaxique relatif à la méthode choisit qui une fois compilé permettra d'analyser syntaxiquement les mots du langage L(G).
donc:
- le code que je génère est le code d'analyse PS/PF.
-puisque l'algorithme d'analyse est générale à tout les mots de n'importe quelle grammaire, j'ai implémenter son programme dans la 2ième app.
et ce qui est généré par la 1ière app n'est qu'une procédure d'initialisation qui passe à la 2 app la grammaire entrée par l'utilisateur et la table de relation construite par l'app1 relative à la méthode choisit.
j'espère que vous avez compris.
Salut !
donc:
- le code que je génère est le code d'analyse PS/PF.
-puisque l'algorithme d'analyse est générale à tout les mots de n'importe quelle grammaire, j'ai implémenter son programme dans la 2ième app.
et ce qui est généré par la 1ière app n'est qu'une procédure d'initialisation qui passe à la 2 app la grammaire entrée par l'utilisateur et la table de relation construite par l'app1 relative à la méthode choisit.
En gros,la 1ere application fait un traitement,et la deuxieme fais un autre traitement basé sur le résultat de la 1ere,si c'est le cas,je ne comprend pas pourquoi tu veux lancer le fichier projet (.bpr) de la deuxème appication![]()
a+
c'est pour compiler puis executer l'analyseur de précedence simple ou faible avec la forme de l'app qui contient un edit text qui reçoit la chaine à analyser. en résumé je compile tout le projet.en fait je veut le lancer à partir de la 1 app pour montrer que c'est la première app qui génère le code de la 2'ième app car on a insister sur ça dans le travail demandé
Alors,pour quoi ne pas faire comme je t'ai dis en haut ?
lancer l'application2(l'executable qui est déja programmé et compilé !!) en lui donnant comme paramètre la chaîne à analyser (elle doit être courte):
Et la deuxième application,au démarrage,reçois cette chaine,et sera traité comme tu l'as prévu...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void __fastcall TForm1::Button1Click(TObject *Sender) { ShellExecute(NULL,"Open", "Chemin de ta 2eme application", "Chaine à analyser", NULL,1); } }
sinon,pour faire plus simple,gestionner l'accée à un fichier text,genre Application1 fait son traitement1 ,et sauvegarde le résultat dans ce fichier puis lance la deuxième application qui elle à son tours,li les résultat écrite dans ce fichier,et fait le traitement 2...
++
je vous rappelle que le problème de communication entre les deux applications est résolut, les paramètres sont passé de la app1 à app2 via un fichier texte qui est le .h de l'app2. et ça marche bien (compilation et execution ). je vous rappelle que le pb est message de session en débogage qui la cause l'utilisation de shellexecute ...qui interrompe l'exe de l'app1 pour executer l'app2. en résumé: mon travail marche trés bien je veux seulement éviter ce message.je ne pense pas que c'est possible tel que j'ai procédé.je peut laisser le travail tel qu'il est en explicant à l'utilisateur de choisir arreter la session en débogage lors de l'apparition du message et tout est réglé.
merci beaucoup d'avoir s'interessé
le problème de l'apparition du message session en débogage est du au fait d'interropre l'execution du projet1 de l'application1 pour executer l'application 2.
mais le problème ne se pose pas si on lançait l'execution de l'application1 à partir de l'executable (car aucun projet n'est ouvert) et ceci nous convient bien puisque l'utilisateur de l'application ne possède que l'executable.
encore une fois, merci à tous![]()
Partager