banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GEODATA DAYS 2024

#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é smile

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 !! sad
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

 

Pied de page des forums

Powered by FluxBB