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 subHors 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 subHors 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 subHors ligne
Pages: 1
- Sujet précédent - Créer en MapBasic, liste déroulante avec le titre de toutes les colonn - Sujet suivant


