#1 Tue 21 October 2014 11:02
- Alexandre A
- Participant occasionnel
- Date d'inscription: 21 Oct 2014
- Messages: 11
[MapBasic 9.5] Checkbox pour affichage de cartes
Bonjour à tous,
Je travaille sur MB à la création d'un petit outil qui permet d'afficher les parcelles d'un cadastre et en plus d'y superposer des cartes de risques naturels.
L'outil de recherche de parcelle est créé et fonctionnel, il fonctionne via des pop up menus.
A cela j'ai donc souhaité y rajouter quelques checkbox où mes collègues pourront choisir d'y superposer en plus une ou plusieurs cartes de risques naturels.
Mais, problème, mon code ne fonctionne pas, il n'y a apparemment pas d'erreur dans le code, mais si je coche les checkbox rien ne se passe, les tables ne s'ouvrent pas. A noter que je ne suis clairement pas un expert de MB, j'ai donc sûrement fait des erreurs "grossières"...
Voici une partie du code, relatif aux checbox (je ne mets que ça car le reste fonctionne) :
Code:
Declare Sub Select_risque Dim checker_k, checker_l, checker_m As Logical Control Checkbox Title "Mouvements de terrain" Position 48, 65 Value 0 into checker_k Control Checkbox Title "Inondation par débordement de cours d'eau et/ou ruissellement urbain" Position 48, 75 Value 0 into checker_l Control Checkbox Title "Submersion marine" Position 48, 85 Value 0 into checker_m Sub Select_risque Dim checker_k, checker_l, checker_m As Logical checker_k = readcontrolvalue(2) if checker_k Then Open Table "W:\GEOMATIQUE\......TAB" Interactive Add Map Auto Layer ......TAB End If checker_l = readcontrolvalue(2) if checker_l Then Open Table "W:\GEOMATIQUE\......TAB" Interactive Add Map Auto Layer ......TAB End If checker_m = readcontrolvalue(2) if checker_m Then Open Table "W:\GEOMATIQUE\......TAB" Interactive Add Map Auto Layer ......TAB End If End Sub
Merci beaucoup!!!
Hors ligne
#2 Tue 21 October 2014 16:49
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [MapBasic 9.5] Checkbox pour affichage de cartes
Salut et bienvenue,
Il me semble qu'il manque le "handler" (détection de ce que fait ton utilisateur).
Que doit faire ton programme -> dés que ton utilisateur coche la checkbox la carte s'affiche ou il coche les différentes cartes puis il dispose d'un bouton "exe" pour afficher toutes les cartes qu'il a choisies?
Pour plus d'infos voir page 166 dans --> http://www.google.fr/url?sa=t&rct=j … mp;cad=rja
Ou faire une recherche sur "[ Calling handler ] "
A+
Joël
Hors ligne
#3 Wed 22 October 2014 07:15
- Alexandre A
- Participant occasionnel
- Date d'inscription: 21 Oct 2014
- Messages: 11
Re: [MapBasic 9.5] Checkbox pour affichage de cartes
Super je ne connaissais pas la "bible" du Mapbasic
Mon programme doit permettre que l'utilisateur coche les cartes qu'il choisit, puis effectivement il y a un bouton exe qui lance la procédure pour l'affichage d'une ou plusieurs de ces cartes.
Je vais tester le calling handler
Hors ligne
#4 Wed 22 October 2014 07:22
- Alexandre A
- Participant occasionnel
- Date d'inscription: 21 Oct 2014
- Messages: 11
Re: [MapBasic 9.5] Checkbox pour affichage de cartes
Je viens de trouver le même manuel en français :
http://i-signum.com/download/Documentat … erence.pdf
ça peut aider....
Hors ligne
#5 Wed 22 October 2014 09:10
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [MapBasic 9.5] Checkbox pour affichage de cartes
Une doc qui peut t'être utile aussi:
--> http://georezo.net/jparis/MI_Enviro/Dia … ntrols.zip
Qui se trouve dans cette section du forum --> http://georezo.net/jparis/decharge_liste_doc.htm
A+
Joël
Hors ligne
#6 Wed 22 October 2014 09:28
- Alexandre A
- Participant occasionnel
- Date d'inscription: 21 Oct 2014
- Messages: 11
Re: [MapBasic 9.5] Checkbox pour affichage de cartes
J'avais déjà téléchargé ce doc qui est très bien fait.
J'ai en partie réussi! Quand on coche les cartes s'affichent. Mais petit problème qui subsiste : elles s'affichent dès qu'on coche la case, est-ce qu'il y a moyen de juste cocher, et ensuite les cartes s’affichent quand on appuie sur le exe?
Effectivement il manquait le calling handler, et le readcontrol value n'était pas dirigé vers le bon ID.
Je suis sur la bonne voie
Voici le nouveau code :
Code:
Declare Sub Select_risque_mvt Declare Sub Select_risque_ino Declare Sub Select_risque_sub Dim checker_k, checker_l, checker_m As Logical Control Checkbox Title "Mouvements de terrain" ID 4 Calling Select_risque_mvt Position 48, 65 Value 0 into checker_k Control Checkbox Title "Inondation par débordement de cours d'eau et/ou ruissellement urbain" ID 5 Calling Select_risque_ino Position 48, 75 Value 0 into checker_l Control Checkbox Title "Submersion marine" ID 6 Calling Select_risque_sub Position 48, 85 Value 0 into checker_m Sub Select_risque_mvt Dim checker_k As Logical checker_k = readcontrolvalue(4) if checker_k Then Open Table "W:\GEOMATIQUE\......TAB" Interactive Add Map Auto Layer ......TAB End If End Sub Sub Select_risque_ino Dim checker_l As Logical checker_l = readcontrolvalue(5) if checker_l Then Open Table "W:\GEOMATIQUE\......TAB" Interactive Add Map Auto Layer ......TAB End If End Sub Sub Select_risque_sub Dim checker_m As Logical checker_m = readcontrolvalue(6) if checker_m Then Open Table "W:\GEOMATIQUE\......TAB" Interactive Add Map Auto Layer ......TAB End If End Sub
Hors ligne
#7 Wed 22 October 2014 14:59
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [MapBasic 9.5] Checkbox pour affichage de cartes
peut être en suivant cette piste :
Je ne l'ai pas essayé mais celà te donne une direction à exploiter.
Code:
Declare Sub Ouverture_Tables Dim checker_k, checker_l, checker_m As Logical Control Checkbox Title "Mouvements de terrain" ID 4 Position 48, 65 Value 0 into checker_k Control Checkbox Title "Inondation par débordement de cours d'eau et/ou ruissellement urbain" ID 5 Position 48, 75 Value 0 into checker_l Control Checkbox Title "Submersion marine" ID 6 Position 48, 85 Value 0 into checker_m Control OKButton Title "OK" Position 48,105 width 60 Calling Ouverture_Tables Sub Ouverture_Tables checker_k = readcontrolvalue(4) checker_l = readcontrolvalue(5) checker_m = readcontrolvalue(6) if checker_k and checker_l and checker_m Then Open Table "W:\GEOMATIQUE\......TAB" Interactive Open Table "W:\GEOMATIQUE\......TAB" Interactive Open Table "W:\GEOMATIQUE\......TAB" Interactive Add Map Auto Layer ......TAB ElseIf checker_k and checker_l Then Open Table "W:\GEOMATIQUE\......TAB" Interactive Open Table "W:\GEOMATIQUE\......TAB" Interactive Add Map Auto Layer ......TAB ElseIf checker_k and checker_m Then Open Table "W:\GEOMATIQUE\......TAB" Interactive Open Table "W:\GEOMATIQUE\......TAB" Interactive Add Map Auto Layer ......TAB ElseIf checker_l and checker_m Then Open Table "W:\GEOMATIQUE\......TAB" Interactive Open Table "W:\GEOMATIQUE\......TAB" Interactive Add Map Auto Layer ......TAB ElseIf checker_k Then Open Table "W:\GEOMATIQUE\......TAB" Interactive Add Map Auto Layer ......TAB ElseIf checker_l Then Open Table "W:\GEOMATIQUE\......TAB" Interactive Add Map Auto Layer ......TAB ElseIf checker_m Then Open Table "W:\GEOMATIQUE\......TAB" Interactive Add Map Auto Layer ......TAB End If End Sub
Il y a certainement plus court et plus simple.
Celà demande à être optimiser
PS:Je ne sais pas si tu as vu qu'avec l'installation de MapBasic -> dans -> C:\Program Files\MapInfo\MapBasic\Samples\MAPBASIC
Il y a des exemples à décortiquer (.mb)
A+
Joël
Dernière modification par Spacejo (Wed 22 October 2014 15:06)
Hors ligne
#8 Wed 22 October 2014 16:09
- Alexandre A
- Participant occasionnel
- Date d'inscription: 21 Oct 2014
- Messages: 11
Re: [MapBasic 9.5] Checkbox pour affichage de cartes
J'ai réussi!
Merci Joël pour ton aide, ça m'a bien fait avancé
J'ai aussi regardé les samples de MapBasic mais ils sont supers corsés! C'est du haut niveau j'ai l'impression.
Bref, en fait il ne fallait pas mettre les calling dans chaque fonction Control Checkbox, mais tous les regrouper dans le Control Ok Button, comme ça il lance la procédure au moment de l'exe (en même temps, ça parait logique). Ton exemple était donc bon, et apparemment pas besoin de faire des "hypothèses" de checbox cochés, comme dans ton exemple, ça à l'air de marcher sans puisqu'il vérifie pour chaque checbox la value et ouvre la table en conséquence.
Donc un grand Merci!
Hors ligne