#1 Tue 20 December 2011 10:30
- Sébastien PIERRE
- Participant occasionnel
- Date d'inscription: 27 Aug 2011
- Messages: 16
[MAPBASIC 6.5] Selection multiple dans une Listbox
Bonjour à tous, ayant besoin d'un outil, je me relance dans le MapBasic. J'ai fait ce petit bout de code mais avant de continuer j'aurais deux petites questions.
1 - Comment peut-on utiliser la valeur du choix réalisé dans la listbox pour ensuite réaliser des sélections dessus.
Voilà le bout de code, le but étant de, à partir d'une table choisie dans le RadioGroup, pouvoir sélectionner 1 ou plusieurs Code_CLC et de s'en servir pour faire des sélections (puis d'autres opérations mais je n'ai pas encore automatisé le reste, commençons par le commencement
) :
Code:
INCLUDE "MAPBASIC.DEF"
INCLUDE "MENU.DEF"
DECLARE SUB Main
DECLARE SUB alter_popup_table
Dim chemin, cmd, liste_CLC() As STRING
Dim cpt, CLC_sel,var_table as integer
SUB Main
'Chemin = FileOpenDLG("","","TAB","Ouvrir table continuum")
'Open table chemin
Dialog
title "Choix du continuum"
Control radioGroup
title "&Continuum_aquatique;&Continuum_agricole;&Continuum_thermophile;&Continuum_boisé"
value 0
Position 10,10
into var_table
calling alter_popup_table
ID 1001
Control listbox
title "Code_CLC"
Value 0 Position 10,75 width 250
ID 1002
into CLC_sel
control OKBUTTON
control cancelbutton
note CLC_sel
'IF CommandInfo(CMD_INFO_DLG_OK) THEN
'
' IF var_table = 1 THEN
' cmd = "Select * from Cont_Mx_Aqua_Humide,CLC_sel WHERE CLC_sel.col1=Cont_Mx_Aqua_Humide.col3 INTO rq"
' RUN COMMAND cmd
'
' ELSEIF var_table = 2 THEN
' cmd = "Select * from Cont_Mx_Aqua_Humide,rq_tab WHERE CLC_sel.col1=Cont_Mx_Aqua_Humide.col3 INTO rq"
' RUN COMMAND cmd
'
' ELSEIF var_table = 3 THEN
' cmd = "Select * from Cont_Mx_Aqua_Humide,rq_tab WHERE CLC_sel.col1=Cont_Mx_Aqua_Humide.col3 INTO rq"
' RUN COMMAND cmd
'
' ELSEIF var_table = 4 THEN
' cmd = "Select * from Cont_Mx_Aqua_Humide,rq_tab WHERE CLC_sel.col1=Cont_Mx_Aqua_Humide.col3 INTO rq"
' RUN COMMAND cmd
'
' END IF
' ELSE
' EXIT SUB
' END IF
END SUB
SUB alter_popup_table
var_table = ReadControlValue(1001)
IF var_table = 1 THEN
cmd = "Select CODE_NIV3 from Cont_Mx_Aqua_Humide GROUP BY CODE_NIV3 INTO rq_tab"
RUN COMMAND cmd
ELSEIF var_table = 2 THEN
cmd = "Select CODE_NIV3 from Cont_Mx_Agri_extensifs INTO rq_tab"
RUN COMMAND cmd
ELSEIF var_table = 3 THEN
cmd = "Select CODE_NIV3 from Cont_Mx_Thermo_Secs INTO rq_tab"
RUN COMMAND cmd
ELSEIF var_table = 4 THEN
cmd = "Select CODE_NIV3 from Cont_Mx_Boises INTO rq_tab"
RUN COMMAND cmd
END IF
REDIM liste_CLC(TABLEINFO(rq_tab, TAB_INFO_NROWS))
FOR cpt = 1 TO TABLEINFO(rq_tab, TAB_INFO_NROWS)
FETCH REC cpt FROM rq_tab
liste_CLC(cpt) = rq_tab.col1
NEXT
'CLOSE TABLE rq_tab
ALTER CONTROL 1002
title from variable liste_CLC
END SUBMerci d'avance aux personnes qui m'aideront ![]()
PS : Je joint un bout d'une table si sa peut aider (c'est la table Cont_Mx_Aqua_Humide.TAB soit le premier choix dans le RadioGroup)
PS2 : la partie en commentaire ne fonctionne pas, je suis en train d'y plancher dessus mais fait quand même l'objet de ma question
Dernière modification par Sébastien PIERRE (Tue 20 December 2011 11:16)
Hors ligne
#2 Tue 20 December 2011 11:21
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [MAPBASIC 6.5] Selection multiple dans une Listbox
Salut et Bienvenue,
Est ce que ceci t'aide?
Voir page 146 "MultiLisbox" dans --> http://www.i-signum.com/download/MapBas … eGuide.pdf
A+
Joël
Dernière modification par Spacejo (Tue 20 December 2011 11:22)
Hors ligne
#3 Tue 20 December 2011 11:50
- Sébastien PIERRE
- Participant occasionnel
- Date d'inscription: 27 Aug 2011
- Messages: 16
Re: [MAPBASIC 6.5] Selection multiple dans une Listbox
Oui merci
J'ai posté un peu rapidement, du coup j'ai refait mon code avec une multilistbox qui fonctionne donc j'ai plus de soucis sur ce point ![]()
Par contre, lorsque que je fait un note de mes choix, il me renvoie la "place" de mon choix dans la liste. Est-il possible de récupérer la valeur correspondante et non le numéro de la "place" ?
Lorsqu'à la fin de de ma listbox (qui est devenue une multilistbox) je met un "INTO CLC_Sel", à quoi correspond il exactement ? Parce que je peut le "note" mais lorsque je veux m'en servir pour les sélections d'après, il m'indique que la table "CLC_Sel" n'est pas ouverte.
PS: je me sers aussi du pdf "dialog et controls" mais là je bloque un peu pour mes deux questions.
Hors ligne
#4 Tue 20 December 2011 12:15
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [MAPBASIC 6.5] Selection multiple dans une Listbox
As tu ouvert "NVIEWS.MB" avec le bloc-note pour voir un exemple.
Ce fichier doit être ici --> Sous C:\ProgramFiles\Mapinfo\Professional\MAPBASIC\SAMPLES
Hors ligne
#5 Wed 21 December 2011 09:29
- Sébastien PIERRE
- Participant occasionnel
- Date d'inscription: 27 Aug 2011
- Messages: 16
Re: [MAPBASIC 6.5] Selection multiple dans une Listbox
Merci Spacejo ![]()
Je pense avoir trouvé mon bonheur, je fait quelques tests puis je posterais le résultat.
Hors ligne
#6 Wed 21 December 2011 18:11
- Sébastien PIERRE
- Participant occasionnel
- Date d'inscription: 27 Aug 2011
- Messages: 16
Re: [MAPBASIC 6.5] Selection multiple dans une Listbox
Je me suis peut-être compliqué la tâche mais je poste quand même mon petit bout de code.
Code:
INCLUDE "MAPBASIC.DEF"
INCLUDE "MENU.DEF"
DECLARE SUB ajouteritem(t() as string, byval pitem as string)
DECLARE SUB Main
DECLARE SUB alter_multilistbox
DECLARE SUB recup
DECLARE SUB ajouteritemsansrepetition(t() as string, byval pitem as string)
DECLARE function existeitem(t() as string, pitem as STRING) as logical
Dim cmd, liste_CLC(), liste_recupCLC() As STRING
Dim cpt,var_table, ichoice, choix as integer
SUB Main
Dialog
title "Choix du continuum"
Control radioGroup
title "&Continuum_aquatique;&Continuum_agricole;&Continuum_thermophile;&Continuum_boisé"
value 0
Position 10,10
into var_table
calling alter_multilistbox
ID 1001
Control statictext position 10,70 title "Code Corine Land Cover :"
Control multilistbox
title from variable liste_CLC
Value 0 Position 10,85 width 250
ID 1002
control OKBUTTON calling recup
control cancelbutton
IF CommandInfo(CMD_INFO_DLG_OK) THEN
[b]IF var_table = 1 THEN
cmd = "Select * from Cont_Mx_Aqua_Humide WHERE Cont_Mx_Aqua_Humide.col3 = " & liste_recupCLC(1) & " INTO rq"
RUN COMMAND cmd[/b]
' ELSEIF var_table = 2 THEN
' cmd = "Select * from Cont_Mx_Aqua_Humide,rq_tab WHERE CLC_sel.col1=Cont_Mx_Aqua_Humide.col3 INTO rq"
' RUN COMMAND cmd
END IF
ELSE
EXIT SUB
END IF
END SUB
SUB alter_multilistbox
var_table = ReadControlValue(1001)
IF var_table = 1 THEN
cmd = "Select CODE_NIV3 from Cont_Mx_Aqua_Humide GROUP BY CODE_NIV3 ORDER BY CODE_NIV3 INTO rq_tab"
RUN COMMAND cmd
ELSEIF var_table = 2 THEN
cmd = "Select CODE_NIV3 from Cont_Mx_Agri_extensifs GROUP BY CODE_NIV3 ORDER BY CODE_NIV3 INTO rq_tab"
REDIM liste_CLC(TABLEINFO(rq_tab, TAB_INFO_NROWS))
FOR cpt = 1 TO TABLEINFO(rq_tab, TAB_INFO_NROWS)
FETCH REC cpt FROM rq_tab
liste_CLC(cpt) = rq_tab.CODE_NIV3
NEXT
ALTER CONTROL 1002
title from variable liste_CLC
END SUB
SUB recup
dim choix as integer
Do
choix = readcontrolvalue(1002)
If choix <> 0 then
CALL ajouteritemsansrepetition(liste_recupCLC, liste_CLC(choix))
ichoice = liste_CLC(choix)
ELSE
exit do
END IF
loop
dialog remove
END SUB
SUB ajouteritem(t() as string, byval pitem as string)
dim n as integer
n=ubound(t)+1
redim t(n)
t(n)=pitem
END SUB
SUB ajouteritemsansrepetition(t() as string, byval pitem as string)
if not existeitem(t,pitem)then
call ajouteritem(t,pitem)
end if
END SUB
function existeitem(t() as string, pitem as STRING) as logical
dim i as integer
existeitem=false
for i=1 to ubound(t)
if t(i) = pitem then
existeitem=true
End if
next
END FUNCTIONIl me reste quand même un soucis (la partie en gras) c'est que lorsque je veux faire ma sélection, il me la fait sur un seul choix et non tous les choix que j'aurais pu faire dans la multilistbox. Je vais prendre un petit exemple pour être plus clair.
Dans ma multilistbox, je sélectionne 3 CODE admettons, lorsque j'arrive dans la partie en gras (après le "
IF CommandInfo(CMD_INFO_DLG_OK)", il ne me fait la sélection que sur la première valeur (ou la deuxième ou la troisième selon le chiffre que je met à : "liste_recupCLC()"). Or je voudrais arriver à faire la sélection sur TOUS les choix en même temps.
Je sais pas si c'est possible mais si oui je suis preneur de pistes, conseils ou autre ![]()
Dernière modification par Sébastien PIERRE (Wed 21 December 2011 18:14)
Hors ligne


