Pages: 1
- Sujet précédent - [MapBasic 5.5] que retourne la boite contôle des couches ? - Sujet suivant
#1 Thu 01 July 2010 13:10
- Just-Soft
- Participant actif
- Lieu: Chlef, Algérie
- Date d'inscription: 10 Jun 2009
- Messages: 76
[MapBasic 5.5] que retourne la boite contôle des couches ?
Re
je peux dire que j'avance bien même si c'est à petit pas et cela grâce à vous !
à l'heure actuelle, j'arrive bien à afficher la boite de dialogue contrôle des couche, je rends une couche modifiable et je clic sur 'Ok'. ce que je veux savoir est, existe-t-il un moyen pour savoir que mon utilisateur à cliquer sur 'Ok' ? en d'autres termes, est-ce que la boite de dialogue contrôle des couches rend-elle un résultat ? si oui commet faire pour l'avoir ?
MapBasic 5.5
MapInfo 6.0
Delphi 7.0
merci par avance.
Bon courage ou Bonne Chance (selon le contexte)
Hors ligne
#2 Thu 01 July 2010 14:55
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
Bonjour
Utilisez CommandInfo(attribut)... (avec l'attribut CMD_INFO_DLG_OK)
Hors ligne
#3 Thu 01 July 2010 18:26
- Just-Soft
- Participant actif
- Lieu: Chlef, Algérie
- Date d'inscription: 10 Jun 2009
- Messages: 76
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
je ne comprends pas la logique de cette fonction ? si je lui passe comme argument CMD_INFO_DLG_OK alors que dois-je récupérer ? ce que je veux c'est l'inverse, genre maVariable = CommandInfo() puis je teste si maVariable = CMD_INFO_DLG_OK.
une piste ou des éclaircissements svp !!
Bon courage ou Bonne Chance (selon le contexte)
Hors ligne
#4 Thu 01 July 2010 18:40
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
Salut,
CommandInfo(attribut)
Atribut --> CMD_INFO_DLG_OK
retourne une valeur logique soit (true) si l'utilisateur clic sur OK
(False) si clic sur cancel ou esc etc....
Cette commande n'est valide qu'au cours d'un dialogue.
A+
Joël
Hors ligne
#5 Thu 01 July 2010 18:51
- Just-Soft
- Participant actif
- Lieu: Chlef, Algérie
- Date d'inscription: 10 Jun 2009
- Messages: 76
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
Re, merci Spacejo, effectivement j'ai compris ça mais un peu en retard mais malgré tout j'ai une belle exception dont je ne comprends pas l'origine. je mets le bout de code en ligne :
Code:
procedure TfmVisionneuse.tbsControleCoucheClick(Sender: TObject); var MsgString : string; begin // appel de la fenêtre contrôle des couches OleMapInfo.do('Run Menu Command '+ IntToStr(M_MAP_LAYER_CONTROL)); // évaluation de la focntion commandinfo() MsgString := 'CommandInfo(CMD_INFO_DLG_OK)'; // le compilateur s'arrête sur la ligne suivante est indique le message d'erreur suivant : // impossible de convertir les données CommandInfo, le type de l'argument 1 et non valide. MsgString := OleMapInfo.Eval(MsgString); end;
Dernière modification par Just-Soft (Thu 01 July 2010 19:00)
Bon courage ou Bonne Chance (selon le contexte)
Hors ligne
#6 Thu 01 July 2010 19:00
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
Je voyais plutôt ça comme ceci:
if commandinfo(CMD_INFO_DLG_OK) then
blablabla
else
blablabla
Hors ligne
#7 Thu 01 July 2010 19:08
- Just-Soft
- Participant actif
- Lieu: Chlef, Algérie
- Date d'inscription: 10 Jun 2009
- Messages: 76
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
tu as entièrement raison mais si seulement j'étais sous MapBasic, là je dois d'abord évaluer l'expression, garder la trace de cette évaluation dans une variable, puis faire le teste. d'ailleurs voilà où j'en suis mais toujours même erreur.
Code:
procedure TfmVisionneuse.tbsControleCoucheClick(Sender: TObject); var MsgString, Res_DLG : string; begin // appel de la fenêtre contrôle des couches OleMapInfo.do('Run Menu Command '+ IntToStr(M_MAP_LAYER_CONTROL)); // évaluation de la focntion commandinfo() MsgString := 'CommandInfo(' + InttoStr(CMD_INFO_DLG_OK) + ')'; // le compilateur s'arrête sur la ligne suivante est indique le message d'erreur suivant : // impossible de convertir les données commandinfo, le type de l'argument 1 et non valide. Res_DLG := OleMapInfo.Eval(MsgString); // pour True MapBasic retourne T if Res_DLG = 'T' then // faire ceci else // faire cela end;
Bon courage ou Bonne Chance (selon le contexte)
Hors ligne
#8 Thu 01 July 2010 19:20
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
Quel est ton langage de prog --> delphi?
if Res_DLG = 'T' then ---> es tu sure de la syntaxe?
---> "T" (peut être)
As tu essayé:
Code:
if commandinfo(CMD_INFO_DLG_OK) then Res_DLG = "T"
Dernière modification par Spacejo (Thu 01 July 2010 19:21)
Hors ligne
#9 Sat 03 July 2010 07:39
- Just-Soft
- Participant actif
- Lieu: Chlef, Algérie
- Date d'inscription: 10 Jun 2009
- Messages: 76
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
bonjour
comme je l'ai déjà dis, j'ai une erreur lors de l'évaluation de l'expression suivante
Code:
// le compilateur s'arrête sur la ligne suivante est indique le message d'erreur suivant : // impossible de convertir les données commandinfo, le type de l'argument 1 et non valide. Res_DLG := OleMapInfo.Eval(MsgString);
pour ce qui est de 'T' y'a pas d'erreurs de syntaxe j'utilise la bonne manière d'ailleurs le compilateur à ce niveau ne me signale rien. T est de type chaine de caractères, les chaines de caractères, en delphi, sont entourées de simple '.
je continue à chercher....
Bon courage ou Bonne Chance (selon le contexte)
Hors ligne
#10 Sat 03 July 2010 08:45
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
Bonjour
CommandInfo(CMD_INFO_DLG_OK) renvoie une valeur logique vrai/faux (un booléen)
Suivant le langage et le paramétrage (par mapbasic.def en MB) on peut associer vrai au caractère "T" ou à l'entier 1, faux à "F" ou 0...
Hors ligne
#11 Sat 03 July 2010 11:28
- Just-Soft
- Participant actif
- Lieu: Chlef, Algérie
- Date d'inscription: 10 Jun 2009
- Messages: 76
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
Bonjour Maurice et merci
le problème n'est pas là mais bien avant sur la ligne suivante
Code:
MsgString := 'CommandInfo(' + InttoStr(CMD_INFO_DLG_OK) + ')'; // le compilateur s'arrête sur la ligne suivante est indique le message d'erreur suivant : // impossible de convertir les données commandinfo, le type de l'argument 1 et non valide. Res_DLG := OleMapInfo.Eval(MsgString);
le compilateur signale une erreur de type d'argument bien que l'argument passé est déclaré dans la partie constante comme étant égale à 1 !
Bon courage ou Bonne Chance (selon le contexte)
Hors ligne
#12 Sat 03 July 2010 17:34
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
Bonjour
On pourrait peut être sauter cette étape et définir MsgString en boolean puis passer directement à
MsgString := 'CommandInfo(' + InttoStr(CMD_INFO_DLG_OK) + ')';
If MsgString then (pour le cas "vrai")
...
ps: bien sur MsgString n'est plus alors un nom de variable bien adapté
Hors ligne
#13 Sat 03 July 2010 17:55
- Just-Soft
- Participant actif
- Lieu: Chlef, Algérie
- Date d'inscription: 10 Jun 2009
- Messages: 76
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
re
j'ai déjà essayé ça
MsgString := 'CommandInfo(1)';
mais rien !!!
Bon courage ou Bonne Chance (selon le contexte)
Hors ligne
#14 Wed 07 July 2010 10:52
- Just-Soft
- Participant actif
- Lieu: Chlef, Algérie
- Date d'inscription: 10 Jun 2009
- Messages: 76
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
je viens de tester ce bout de programme mais j'y arrive pas à faire appel à la procédure interne contrôle des couches, c'est quoi le problème au juste ?
Code:
Include "MapBasic.DEF" Declare Sub MyProc Create Menu "&Essai" As "&Controle des couches" Calling MyProc Alter Menu Bar Add "Essai" Sub MyProc // il me refuse cette ligne ? 817 est l'identifaint de la procedure controle des couches Calling 817 end sub if CommandInfo(CMD_INFO_DLG_OK) = "T" then note "oui" else note "non" end if
Dernière modification par Just-Soft (Wed 07 July 2010 10:52)
Bon courage ou Bonne Chance (selon le contexte)
Hors ligne
#15 Wed 07 July 2010 14:45
- Just-Soft
- Participant actif
- Lieu: Chlef, Algérie
- Date d'inscription: 10 Jun 2009
- Messages: 76
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
est-ce trop difficile ou trop débile ?
Bon courage ou Bonne Chance (selon le contexte)
Hors ligne
#16 Wed 07 July 2010 15:56
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
Dites donc, on n'est pas aux ordres !!
Surtout si vous ne prenez pas le temps de piocher plus la doc. avant de multiplier les tentatives et de nous en faire les arbitres..
Ce code marchera mieux mais vous obtiendrez toujours "oui" puisque CommandInfo(CMD_INFO_DLG_OK) n'est utilisable que lors de l'utilisation d'une boite de dialogue personnalisée et comprenant un OKbutton
Code:
Include "MapBasic.DEF" Declare Sub Main Declare Sub MyProc Sub Main Create Menu "&Essai" As "&Controle des couches" Calling MyProc Alter Menu Bar Add "Essai" end sub Sub MyProc Run Menu Command 801 if CommandInfo(CMD_INFO_DLG_OK)=1 then note "oui" else note "non" 'ne marchera pas... end if end sub
Hors ligne
#17 Wed 07 July 2010 18:14
- Just-Soft
- Participant actif
- Lieu: Chlef, Algérie
- Date d'inscription: 10 Jun 2009
- Messages: 76
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
Re Maurice et merci
les ordre mais non, jamais de mon coté, ce n'était qu'une tactique de ma part, hihihi
j'ai compilé le code mais ce n'est pas exactement ce que je veux, bon j'ai au moins compris que CommandInfo(CMD_INFO_DLG_OK) n'est utilisable que lorsqu'on crée une boite de dialogue personnalisable. A ce stade je vais reformuler ma demande, ce que je veux faire c'est savoir si l'utilisateur à oui ou non modifier une de ses couche pour proposer une sauvegarde en cas de fermeture de l'application ou de changement de document par exemple ?
Merci par avance
Bon courage ou Bonne Chance (selon le contexte)
Hors ligne
#18 Wed 07 July 2010 19:03
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
Bonjour,
Dans ce cas,
Code:
Include "MapBasic.DEF" Declare Sub Main Declare Sub MyProc Sub Main Create Menu "&Essai" As "&Controle des couches" Calling MyProc Alter Menu Bar Add "Essai" end sub Sub MyProc Run Menu Command 801 if CommandInfo(CMD_INFO_DLG_OK)=1 then if TableInfo(table_id, TAB_INFO_EDITED) = True then ' Fait ce que tu as a faire car ta table a des editions non sauvegarder else end if end if end sub
Hors ligne
#19 Wed 07 July 2010 19:18
- Just-Soft
- Participant actif
- Lieu: Chlef, Algérie
- Date d'inscription: 10 Jun 2009
- Messages: 76
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
merci jean94, je vais adapter le code et je re
Bon courage ou Bonne Chance (selon le contexte)
Hors ligne
#20 Wed 07 July 2010 19:23
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
@ jean94
- le if CommandInfo(CMD_INFO_DLG_OK)=1 ne sert pas car on n'est pas dans le cas d'une boite de dialogue personnalisée
- bien le TableInfo(table_id, TAB_INFO_EDITED)...mais quel table_id ?? On cherche à savoir si l'utilisateur à oui ou non modifié une de ses couche, n'importe laquelle...
Hors ligne
#21 Wed 07 July 2010 20:31
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
Bonjour
Est-il possible dans ce cas d'ajouter un boucle qui passer une a une les tables ouverte?
JF
Hors ligne
#22 Wed 07 July 2010 21:31
- Just-Soft
- Participant actif
- Lieu: Chlef, Algérie
- Date d'inscription: 10 Jun 2009
- Messages: 76
Re: [MapBasic 5.5] que retourne la boite contôle des couches ?
@ Maurice : donc ce que tu recommande c'est de créer une boite de dialogue personnalisée ? mais je crois que le plus simple serait de tester si on est dans le cas d'un changement de document à ce niveau comment dois-je procéder ? ou bien si on est dans le cas de la fermeture d'une couche ? ça me parait facile de voir si la couche en question a été modifiée ou non ?
@jean94 : oui oui, je pense que dans un cas général on peut songer à boucler, d'ailleurs je peux faire ça dans un timer (puisque je pilote MI par Delphi) mais en MB seul je ne sait pas si cela existe bien que Maurice dans un post m'a suggéré l'utilisation des eventhandlers que j'ai pas pu réaliser !!!
ce programme me tient à coeur, d'autres bénévoles pour une amélioration.
merci à vous tous.
Bon courage ou Bonne Chance (selon le contexte)
Hors ligne
Pages: 1
- Sujet précédent - [MapBasic 5.5] que retourne la boite contôle des couches ? - Sujet suivant