Pages: 1
- Sujet précédent - Créer en MapBasic, liste déroulante avec le titre de toutes les colonn - Sujet suivant
#1 Mon 27 September 2010 15:40
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Créer en MapBasic, liste déroulante avec le titre de toutes les colonn
Bonjour,
j'ai écrit tant bien que mal le programme qui va suivre. Mon but afficher 2 listes déroulantes avec le titre de chaque colonne de ma table "pts2".
La compilation s'avère bonne mais quand j'exécute mon mbx je me retrouve avec deux colonnes blanches, pas d'affichage du titre de mes colonnes.
Savez vous ce que je n'ai pas ou mal écrit ?
Cordialement :-)
Code:
Include "mapbasic.def" Declare sub main Declare sub proc_remplir_liste dim tablo () as string dim i as integer Sub main 'création d'un formulaire avec 2 listes déroulantes et 1 bouton quitter Dialog Title "Comparaison de 2 semaines au choix" Width 300 Height 200 Position 150,150 'liste deroulante 1 control listbox position 20,50 width 60 height 100 'avoir la liste de toutes les colonnes de ma table pts 2 id 1 calling proc_remplir_liste title from variable tablo () value i 'liste deroulante 2 control listbox position 100,50 width 60 height 100 'avoir la liste de toutes les colonnes de ma table pts 2 id 2 calling proc_remplir_liste title from variable tablo () value i 'bouton quitter control cancelbutton title"Quitter" position 110, 180 width 50 id 5 end sub 'procedure permettant de remplir les listes déroulantes avec le titre de chaque colonne de ma tables pts2 sub proc_remplir_liste dim i as integer dim tablo () as string redim tablo (tableinfo(pts2,TAB_INFO_NCOLS)) I=0 For i=1 to tableinfo(pts2,TAB_INFO_NCOLS) tablo(i) = columninfo(pts2,"col"&I,col_info_name) Next End sub
Hors ligne
#2 Mon 27 September 2010 16:01
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: Créer en MapBasic, liste déroulante avec le titre de toutes les colonn
Bonjour,
Il faut te créer un boucle supplémentaire dans proc_remplir_liste
dim ListTitre as string
For i=1 to tableinfo(pts2,TAB_INFO_NCOLS)
ListTitre = ListTitre + ";" + tablo(i)
Next
ListTitre = right$(ListTitre, len(ListTitre) - 1)
Alter control 1 Title ListTitre
Alter control 2 Title ListTitre
de plus "calling proc_remplir_liste" devrait être sous dialog et ne devrait pas être dans les listbox et devrait donc s'exécuter à l'apparition de la boite de dialog
de plus, ton "i" est déclarer dans t'est décalration global et dans une sub proceedure...cela ne devrait pas être le cas...change dans un des deux cas le "i" pour une autre variable. Et si tu veux que t'est listbox ait une valeur il faut lui dire e.g. I = 1
JF
Dernière modification par jean94 (Mon 27 September 2010 18:00)
Hors ligne
#3 Mon 27 September 2010 16:05
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: Créer en MapBasic, liste déroulante avec le titre de toutes les colonn
ok merci
Hors ligne
#4 Mon 27 September 2010 16:08
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: Créer en MapBasic, liste déroulante avec le titre de toutes les colonn
Voir note supplémetaire pour la variable "i"...elle s'applique aussi à la variable tablo () ..si elles sont déclarées avant ta sub main..pas besoin de les redéfinir
JF
Hors ligne
#5 Mon 27 September 2010 16:14
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: Créer en MapBasic, liste déroulante avec le titre de toutes les colonn
Pourrais tu juste m'expliquer rapidement ce que tu as écrit ?
1) pourquoi le ";" ?
2) qu'est ce que la fonction Right$ ?
3)Pourquoi Alter control 1
4) qu'est ce que la fonction len(ListTitre) ?
5) dans ma partie 'liste déroulante, dois je toujours appeler tablo(i) ou bien ListeTitre ?
Merci vraiment si tu as le temps de m'éclairer
Hors ligne
#6 Mon 27 September 2010 17:47
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: Créer en MapBasic, liste déroulante avec le titre de toutes les colonn
Bonjour...avec plaisir
1. Le ; est utilisé pour diviser le nom de chaque colonne de dans une variable string...il est possible de le faire avec une variable 2D mais je ne sais pas comment. Voir le document Dialog et controle de Jaques Paris
2. Right$ extrait les caratères d'une chaîne de caratères en partant de la droite... Elle est nécéssaire car dans la boucle le premier caratère est un ";" et nous voulons l'enlevé pour que la première ligne de ton listbox ne soit pas vide.
3. Alter control 1 Title ListTitre vient remplacer ton ancien titre défini dans ta sub main par la nouvelle chaine de caratères crée dans la sub proc_remplir_liste
4. La fonction len() renvoi le nombre de caractères dans une variable de type string...right$(len() - 1) renvoit la chaine de caratère sans le premier caratère e.g. le ";" du point 2
5. Tu ne peux pas mettre ListeTitre car la variable est déclarée dans ta sub et non en global...tu peux déclarer une variable bidon pour mettre dans le titre sachant très bien qu'elle sera remplacée aussitôt par ListeTitre...mais je ne crois pas qu'il s'agisse d'une bonne pratique en programmation mais elle me sert très bien
Je ne sais pas s'il est obligatoire d'ajouter un titre à un list box... à vérifier
si obligatoire je te conseil de mettre dans ta sub main just avant ton dialog
dim ListBoxTxt as string
ListBoxTxt = ""
Et ajoute ListBoxTxt comme titre de t'es 2 listbox...ils vont être remplacés aussitôt au chargement.
...Ou bien simplement mettre title ""....bien plus simple
JF
Dernière modification par jean94 (Mon 27 September 2010 17:54)
Hors ligne
#7 Mon 27 September 2010 19:35
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Créer en MapBasic, liste déroulante avec le titre de toutes les colonn
Bonjour
Rappel général: utilisez les balises code SVP...
Sinon:
- autant remplir la variable liste (choix de ebiseau, auquel j'adhère) ou la variable chaine de caractères (choix de jean94) dès la première procédure "main" puis ouvrir les dialogues dans une seconde procédure
- les calling...au sein des contrôles tels control ListBox sont là pour faire un traitement du choix fait par l'utilisateur au sein de la ListBox. Sans choix au sein de la liste...il ne se passe rien, surtout qu'il n'y a pas de bouton "OK" fermant le dialogue et passant à la suite. Le programme ci-après ne contient aucun de ces "calling", il se contente donc d'afficher la liste dans deux ListBox...
Code:
Include "mapbasic.def" Declare sub main Declare sub dialog1 dim tablo () as string dim i as integer Sub main Open Table "chemin_de_table\nom_de_table.tab" As pts2 redim tablo (tableinfo(pts2,TAB_INFO_NCOLS)) i=0 For i=1 to tableinfo(pts2,TAB_INFO_NCOLS) tablo(i) = columninfo(pts2,"col"&i,col_info_name) Next Call dialog1 End sub sub dialog1 Dialog Title "Comparaison de 2 semaines au choix" Width 300 Height 200 Position 150,150 control listbox position 20,50 width 60 height 100 title from variable tablo () value i id 1 control listbox position 100,50 width 60 height 100 title from variable tablo () value i id 2 control cancelbutton title"Quitter" position 110, 180 width 50 id 5 end sub
Hors ligne
#8 Tue 28 September 2010 08:43
- ebiseau
- Participant actif
- Date d'inscription: 6 Sep 2010
- Messages: 98
Re: Créer en MapBasic, liste déroulante avec le titre de toutes les colonn
Merci à vous deux :-)
Maurice, le programme que tu me donnes fonctionne mais j'aimerai mieux le comprendre. Il est comme le mien sauf que tu appelles dialogue dans la procédure de remplir la liste et moi j'appelle la procédure remplir la liste dans le dialogue.
Pourrais tu m'expliquer pourquoi ce que j'ai fait ne fonctionne pas, où est le hic ?
Merci :-)
Hors ligne
#9 Tue 28 September 2010 14:20
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Créer en MapBasic, liste déroulante avec le titre de toutes les colonn
...Pourrais tu m'expliquer pourquoi ce que j'ai fait ne fonctionne pas, où est le hic ?...
Ça fonctionne...à condition de cliquer sur un item des listes (qui ne doivent pas être vides sinon on ne peut cliquer sur rien et donc rien déclencher) pour déclencher les calling...
Il faut aussi que la sub proc_remplir-liste inclue les Alter Control évoqués par jean94
Ci-après un code "à ta façon" qui marche mais nécessite un clic dans une liste
Code:
Include "mapbasic.def" Declare sub main Declare sub proc_remplir_liste dim tablo () as string dim i as integer Sub main Open Table "chemin_de_table\nom_de_table.tab" As pts2 redim tablo(1) Tablo(1)="cliquer" Dialog Title "Comparaison de 2 semaines au choix" Width 300 Height 200 Position 150,150 control listbox position 20,50 width 60 height 100 title from variable tablo () calling proc_remplir_liste id 1 control listbox position 100,50 width 60 height 100 title from variable tablo () calling proc_remplir_liste id 2 control cancelbutton title"Quitter" position 110, 180 width 50 id 5 End sub sub proc_remplir_liste redim tablo (tableinfo(pts2,TAB_INFO_NCOLS)) For i=1 to tableinfo(pts2,TAB_INFO_NCOLS) tablo(i) = columninfo(pts2,"col"&i,col_info_name) Next Alter control 1 Title from variable tablo () Alter control 2 Title from variable tablo () end sub
Hors ligne
Pages: 1
- Sujet précédent - Créer en MapBasic, liste déroulante avec le titre de toutes les colonn - Sujet suivant