Page 1 sur 1
Question avec RunPogram()
Publié : lun. 12/avr./2004 18:10
par Guimauve
Comment passer plusieurs paramètres à un programme avec RunProgram?
Je fais comme ça dans le programme appellant :
param$ = "500" +Chr(0149)+ "400" +Chr(0149)+ "No" +Chr(0149)+ "Français" + Chr(0149)+"1"
RunProgram(GetExeDirectory() +"Aide\Aide.exe",param$,"")
Et j'essai de récupèrer les paramètres comme ça dans le programme appelé :
Parametre$ = ProgramParameter()
; "400•300•YES•Français•1"
LargeurFenetre = Val(StringField(Parametre$, 1, Chr(0149)))
HauteurFenetre = Val(StringField(Parametre$, 2, Chr(0149)))
OptionAffichage$ = StringField(Parametre$, 3, Chr(0149))
Language$ = StringField(Parametre$, 4,Chr(0149))
No_rubrique_afficher = Val(StringField(Parametre$, 5, Chr(0149)))
Dans le Débogeur param$ à bien
500•400•No•Français•1 comme valeur dans le programme appelant. Et Le programme appelé est bien lancé mais avec les valeur par défaul et non celles qui proviennent du programme appelant.
Je comprends pas pourquoi ça marche pas. Si Paramètre est une chaine de caractère je peux bien passe une chaine aussi longue que nécessaire.

À l'aide
Merci à l'avance
A+
Guimauve
Publié : lun. 12/avr./2004 18:23
par cederavic
il faut appeller PogramParameter auttant de foi qu'il y a de parametre
LargeurFenetre = Val(ProgramParameter() )
HauteurFenetre = Val(ProgramParameter() )
OptionAffichage$ = ProgramParameter()
Language$ = ProgramParameter()
No_rubrique_afficher = Val(ProgramParameter() )
et param doi ressembler a ça :
param$ = "500 400 No Français 1" ; un espace permet de separer les different parametre
dit moi si sa marche, j'ai pas tester
Publié : lun. 12/avr./2004 18:29
par Le Soldat Inconnu
dès qu'il y a un espace on passe au paramètres suivant.
pour récupérer tous les paramètes, espace compris, tu peux utiliser ce code :
Code : Tout sélectionner
Txt.s = ProgramParameter()
Param.s = ""
If Txt
Repeat
Param = Param + " " + Txt
If Txt
Param = ProgramParameter()
EndIf
Until Txt = ""
EndIf
Publié : lun. 12/avr./2004 19:48
par Guimauve
C'est pas ça le problème. Au début de mon programme je dois faire un choix de démarrage entre un appel avec des paramètres et un démarrage avec un fichier .ini.
Et ça ne fonctionne pas le programme démarre avec les paramètres du fichier ini.
Je pense que la solution qui reste est d'aller réécrire le fichier ini du programme appellé avant de lancer.
A+
Guimauve
Publié : lun. 12/avr./2004 21:08
par Le Soldat Inconnu
pourquoi ?
d'abord, tu charges le fichier ini avec les param par défaut, ensuite, tu lis les paramètres de lancement et tu changes les variables d'après tes paramètres

Publié : mar. 13/avr./2004 1:57
par filperj
Guimauve,
j'ai fait un petit test en reprenant ton bout de code, et ça marche très bien!
Tu es sûr que le problème ne vient pas d'une autre partie de ton prog?
Peut-être que tu as oublié ou mal placé un test, et qu'il charge le "ini" même s'il a reçu des paramètres...

Publié : mar. 13/avr./2004 6:45
par Guimauve
Bref ça ressemblait à ça. Si ProgramParameter() est non null on ajuste le programme avec les paramètres si non on charge le fichier ini. Si le fichier ini n'existe pas, créer le fichier ini, redémarrer le programme puis fermer le programme qui à créer le fichier ini. Si le fichier existe l'ouvrir et ajuster les valeurs.
Code : Tout sélectionner
If ProgramParameter() <> ""
LargeurFenetre = Val(ProgramParameter())
HauteurFenetre = Val(ProgramParameter())
OptionAffichage$ = ProgramParameter()
Language$ = ProgramParameter()
No_rubrique_afficher = Val(ProgramParameter())
Else
If OpenPreferences("Aide.ini") = 0
; Le fichier n'existe pas, on créer celui par défaut
If CreatePreferences("Aide.ini")
WritePreferenceLong("Window Width", 400)
WritePreferenceLong("Window Height", 300)
WritePreferenceString("Always on top", "Yes")
WritePreferenceString("Language", "Français")
WritePreferenceLong("Default Help Topic", 1)
ClosePreferences()
EndIf
; Le fichier Aide.ini est créé. On relance le programme.
RunProgram(GetFilePart(GetExeName()))
; Puis on ferme le programme qui à généré le fichier Aide.ini
; afin de ne pas avoir 2 programmes qui tournent en même temps.
End
Else
LargeurFenetre = ReadPreferenceLong("Window Width", 400)
HauteurFenetre = ReadPreferenceLong("Window Height", 300)
OptionAffichage$ = ReadPreferenceString("Always on top", "Yes")
Language$ = ReadPreferenceString("Language", "Français")
No_rubrique_afficher = ReadPreferenceLong("Default Help Topic", 1)
ClosePreferences()
EndIf
EndIf
Est-ce qu'il y a quelqu'un qui voit l'erreur ?
A+
Guimauve
Publié : mar. 13/avr./2004 19:22
par filperj
Tu as complètement changé de synthaxe depuis le 1er post
Comment est-ce que tu construit la ligne de commande dans le prog appelant, maintenant ?
If ProgramParameter() <> ""
avec ça, le 1er paramètre est perdu, tu en a bien tenu compte?
Publié : mar. 13/avr./2004 20:16
par Guimauve
Tu as complètement changé de synthaxe depuis le 1er post
Pas vraiment, j'avais juste copier la partie de code où je croyais à problème.
Et non, j'ai pas pensé que j'allais perdre le premier paramètre en faisant comme ça.
Je vais être obliger de faire autrement.
Je vous donne des nouvelles.
A+
Guimauve
Publié : jeu. 15/avr./2004 7:35
par Guimauve
Je l'ai eu ... j'ai joué du coude un peu mais bon ça marche.
Dans le programme appelant :
Code : Tout sélectionner
Case #Aide
Mastername$ = ReplaceString(GetExeName(), Chr(32), Chr(0149))
param$ = "Slave " + Mastername$ + " 500 400 No " + langue$ + " 1"
RunProgram(GetExeDirectory() + "Aide\Aide.exe",param$,"")
Et dans le programme appelé :
Code : Tout sélectionner
If ProgramParameter() = "Slave"
Master$ = ReplaceString(ProgramParameter(), Chr(0149), Chr(32))
LargeurFenetre = Val(ProgramParameter())
HauteurFenetre = Val(ProgramParameter())
OptionAffichage$ = ProgramParameter()
Language$ = ProgramParameter()
No_rubrique_afficher = Val(ProgramParameter())
Else
If OpenPreferences("Aide.ini") = 0
; Le fichier n'existe pas, on créer celui par défaut
If CreatePreferences("Aide.ini")
WritePreferenceLong("Window Width", 400)
WritePreferenceLong("Window Height", 300)
WritePreferenceString("Always on top", "Yes")
WritePreferenceString("Language", "Français")
WritePreferenceLong("Default Help Topic", 1)
ClosePreferences()
EndIf
; Le fichier Aide.ini est créé. On relance le programme.
RunProgram(GetFilePart(GetExeName()))
; Puis on ferme le programme qui à généré le fichier Aide.ini
; afin de ne pas avoir 2 programmes qui tournent en même temps.
End
Else
LargeurFenetre = ReadPreferenceLong("Window Width", 400)
HauteurFenetre = ReadPreferenceLong("Window Height", 300)
OptionAffichage$ = ReadPreferenceString("Always on top", "Yes")
Language$ = ReadPreferenceString("Language", "Français")
No_rubrique_afficher = ReadPreferenceLong("Default Help Topic", 1)
ClosePreferences()
EndIf
EndIf
Maintemant que ça marche, je dois trouver comment surveiller si le programme appelant tourne ou non pour que la fermeture des programmes soit synchronisé.
A+
Guimauve
Publié : jeu. 15/avr./2004 10:12
par Le Soldat Inconnu
bon, autre chose au sujet du fichier .ini
il est inutile de relancer le programe si le fichier .ini n'existe pas.
c'est tout simple, pour le chargement, il faut absolument pas mettre de test pour vérifier la présence du fichier.
donc il faut écrire un truc du genre :
Code : Tout sélectionner
openpreferences("truc.ini")
X = readpreferencelong("X", 128)
closepreferences()
et si le fichier n'a pas pu être ouvert car il n'existe pas ou si l'entrée "X" n'existe pas dans le fichier, x prendra la valeur par défaut qui est ici 128.
il ne faut pas se préocuper de savoir si le fichier existe ou pas pour la lecture des preferences, il me semble d'ailleur que ce point est indiquée dans l'aide

tu fais compliqué pour rien
sinon, pour le programparameter(), il faut l'enregistrer dans un string et faire le test après sur ce string, voir mon exemple plus haut.
Publié : jeu. 15/avr./2004 15:05
par Guimauve
Oui je sais comment ça marche les préférences.
Sauf qu'avec la méthode que j'utilise j'ai pas besoin d'avoir un programme d'installation qui va créer le fichier ini pour donner la chance à tout le monde d'ajuster les paramètres. Le programme le fait lui même. Et même si le fichier existe mais qu'il est vide par exemple et bien ça va fonctionner quand même.
Si non je vais être obliger d'aller modifier les paramètres par défaut dans l'exe et j'aime vraiment pas ça. Je préfère le faire à partir de l'externe à l'aide d'un fichier texte.
Une autre raison pour laquelle le fichier ini est créer, c'est qu'à la fin du programme je mets le fichier ini à jour. Si le programme est lancer avec un raccourci et il va s'exécuter avec les derniers paramètres qu'on lui a donné. Ce qui me semble logique.
C'est mon caprice à moi.
A+
Guimauve