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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

ebiseau a écrit:

...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

 

Pied de page des forums

Powered by FluxBB