#1 Wed 16 April 2008 10:05
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Boite de dialogues successives
MAP BASIC 7.0 / MAP INFO 7.5
Bonjour dans le cadre d'un projet que je dois réaliser.
J'ai décider de fonctionner en boite de dialogues successives afin de faciliter la clarté dans la saisie d'nformations. Cependant je n'ai encore jamais procéder de la sorte et j'aurais besoins de conseils ou d'avis sur ce mode de fonctionnement. La premiere question est comment organiser les boites de dialogue à travers les différentes procédures ? Comment ne pas faire que celles ci soient contradictoires ? Comment intéragir entres elles ?
Cette derniere interrogation souleve le probleme que j'ai actuellement de naviguer entre ma premiere et ma deuxieme boite de dialogue. En effet en validant la premiere je déclenche la deuxieme mais malheureusement je n'arrive pas a faire un bouton précédent qui permettrait en cas d'erreur de revenir a la fenetre précédente. J'ai bien pensé à une étape go to mais celle ci est assez mal expliqué dans la doc (enfin je trouve). De plus l'interet de cette étape serait de revenir à la premiere fenetre avec les checkbox cochés comme précédemment (quand je dis checkbox, c'est aussi un editext et une listbox). Es ce possible et si oui vers quoi dois je m'orienter ?
Merci et bonne journée à tous
Dernière modification par Fabius (Wed 16 April 2008 13:46)
Hors ligne
#2 Wed 16 April 2008 12:05
- Cartosig
- Participant assidu
- Date d'inscription: 16 Oct 2006
- Messages: 222
Re: Boite de dialogues successives
Faites une recherche sur "Dialog Preserve", dans l'aide MB ou sur Google.
Cela vous permet de revenir à la boite précédente lorsque l'utilisateur clique sur un OKButton ou un CancelButton.
Hors ligne
#3 Wed 16 April 2008 13:45
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Boite de dialogues successives
Merci je regarde cela de suite. Aucun commentaires sur ma facon de fonctionner de cette manière ?
Hors ligne
#4 Thu 17 April 2008 09:15
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Boite de dialogues successives
J'ai essayer avec un dialog preserve mais soit je n'ai pas su l'utiliser convenablement soit celui ci ne convient pas. J'entend par la que pour moi il n'est qu'un garde fou permettant de confimer la fermeture d'une boite de dialogue. Mon but est de revenir a la boite de dialogue précédente, je pense que mon intuition sur le Goto peut etre pas mal mais pour "avancer" dans le programme cela peut fonctionner mais moi je veux "reculer". Une idée ?
Par ailleurs j'ai également la question de la gestion de mes dialog box dans mes procédures a clarifier. Dois je faire une procédure par boite de dialogue ou au contraire une globale ?
Hors ligne
#5 Thu 17 April 2008 11:24
- jasper
- Participant occasionnel
- Lieu: Paris
- Date d'inscription: 7 Mar 2007
- Messages: 44
Re: Boite de dialogues successives
Bonjour.
Vous pouvez trouver un exemple MB, composé de 3 boites de dialogue avec btn "Suivant" et btn "Précédent".
Pas trop de commentaires (Désolé !), mais les instructions note"" devraient être utiles...
[Edit : la solution est dans le TriggerControl() qui vous dit de quelle boite de dialog vous venez....]
Cordialement,
Jasper
____________________
Include "MapBasic.Def"
Dim NumEtape As Integer
Declare Sub Main
Declare Sub Dlg1
Declare Sub Dlg2
Declare Sub Dlg3
Declare Sub ValidationDlg
Declare Sub Btn
Sub Main
NumEtape = 0
Call Dlg1
While NumEtape <> 100
Do Case NumEtape
Case 103
Call dlg2
Case 203
Call dlg3
Case 201
Call dlg1
Case 301
Call dlg2
Case 303
Call ValidationDlg
End case
Wend
End Sub
'--Validation de l'etape 3
Sub ValidationDlg
NumEtape = 100
Note "Dialog validé"
End Sub
'************ Dialog Etape 1 ************
Sub Dlg1
NumEtape = 100
Dialog
Title "Etape 1/3"
Control Button
Title "Annuler"
Calling Btn
ID 100
Control Button
Title "Suivant >>"
Calling Btn
Id 103
End Sub
'************ Dialog Etape 2 ************
Sub Dlg2
NumEtape = 100
Dialog
Title "Etape 2/3"
Control Button
Title "<< Précédent"
Calling Btn
Id 201
Control Button
Title "Annuler"
Calling Btn
Id 100
Control Button
Title "Suivant >>"
Calling Btn
Id 203
End Sub
'************ Dialog Etape 3 ************
Sub Dlg3
NumEtape = 100
Dialog
Title "Etape 3/3"
Control Button
Title "<< Précédent"
Calling Btn
Id 301
Control Button
Title "Annuler"
Calling Btn
Id 100
Control Button
Title "Terminer"
Calling Btn
Id 303
End Sub
'************ Dialog Generiques
Sub Btn
Dim DlgOk as Logical
NumEtape = TriggerControl()
'Récupérer le contenu des Control
If NumEtape <> 100 Then
Do Case NumEtape
'--Saisies Etape 1
'>>
Case 103
Note "Btn suivant 1"
'--Saisies Etape 2
'>>
Case 203
Note "Btn Suivant 2"
'<<
Case 201
Note "Btn Précédent 2"
'--Saisies Etape 3
'Validation
Case 303
Note "Btn Terminé"
'<<
Case 301
Note "Btn Précédent 3"
End Case
End If
Dialog Remove
End Sub
Dernière modification par jasper (Thu 17 April 2008 11:27)
Hors ligne
#6 Thu 17 April 2008 12:44
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Boite de dialogues successives
Merci pour le code, je pense que l'on touche au but. Je n'ai pas réussi a l'adapter totalement a mon programme. En fait je comprend pas trop parceque j'ai adapaté "logiquement" tout ca mais des la premiere boite le click sur suivant arrete tout . Je vais manger et je revois ca apres.
Bon ap à tous les forumistes
Hors ligne
#7 Thu 17 April 2008 13:08
- Séraphin
- Participant occasionnel
- Date d'inscription: 17 Apr 2008
- Messages: 19
Re: Boite de dialogues successives
Bonjour Fabius,
Je gère aussi une utilisation par étape d'une interface sur MI.
J'ai opté pour une solution simple qui utilise des Alter Control [ID] Hide
En gros même boite de Dialog avec un bouton pour passer à l'étape suivante qui permet de cacher les control de l'étape et d'afficher les control de la boite suivante.
Bon courage
Séraphin
Hors ligne
#8 Thu 17 April 2008 14:13
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Boite de dialogues successives
Merci beaucoup pour votre réponse. Néanmoins celle ci ne solutionne pour le moment pas mon probleme. En effet lorsque je vlique sur suivant lors de ma premiere boite de dialogue tout se ferme au lieu de passer a la suivante. J'ai pourtant "suivi" votre code mais le résultat lui n'a pas suivi.
PS: Merci encore de votre aide et du temps que vous me consacrez
Hors ligne
#9 Thu 17 April 2008 14:18
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Boite de dialogues successives
Merci beaucoup pour votre réponse. Néanmoins celle ci ne solutionne pour le moment pas mon probleme. En effet lorsque je vlique sur suivant lors de ma premiere boite de dialogue tout se ferme au lieu de passer a la suivante. J'ai pourtant "suivi" votre code mais le résultat lui n'a pas suivi.
PS: Merci encore de votre aide et du temps que vous me consacrez
edit : cela venait du fait que j'avais des cancelbutton et des okbutton. Ahlalala l'inatention me perdra ]
edit 2 :Tout d'abord, désolé pour le post en doublon mais en ce qui concerne mes controls c'est un peu flou. En cliquant sur précédent on revient effectivement à la boite précédente, dans mon cas la 1ere (Pour l'instant je n'en ai que deux). Cependant les informations saisies (un numéro dans un editext, une cache de coché dans un radiogroup et un choix dans une listbox) n'apparaissent plus comme précédemment saisi par l'utilisateur. Es ce normal ? Je sais que ca ne revet pas une importance extreme que le programme permettent de voir ce qui avait été fais mais c'est un objectif a atteindre dans mon projet.
Dernière modification par Fabius (Thu 17 April 2008 14:44)
Hors ligne
#10 Thu 17 April 2008 16:52
- jasper
- Participant occasionnel
- Lieu: Paris
- Date d'inscription: 7 Mar 2007
- Messages: 44
Re: Boite de dialogues successives
Me revoilà ! ;-)
L'inconvénient du code que j'ai indiqué est que, les boites n'étant jamais validées par un Control OkButton, MapBasic n'affecte pas les valeurs de control aux variables associées : il est nécessaire de faire les affectations des variables avec la fonction ReadControlValue() dès lors que l'utilisateur clique sur le bouton "suivant"...
Le même code avec un CheckBox "mémorisé" dans l'étape 2...
Cordialement,
Jasper
________________________
Include "MapBasic.Def"
Dim NumEtape As Integer
Declare Sub Main
Declare Sub Dlg1
Declare Sub Dlg2
Declare Sub Dlg3
Declare Sub ValidationDlg
Declare Sub Btn
Dim Bchk As Logical
Sub Main
NumEtape = 0
Bchk = 0
Call Dlg1
While NumEtape <> 100
Do Case NumEtape
Case 103
Call dlg2
Case 203
Call dlg3
Case 201
Call dlg1
Case 301
Call dlg2
Case 303
Call ValidationDlg
End case
Wend
End Sub
'--Validation de l'etape 3
Sub ValidationDlg
NumEtape = 100
Note "Dialog validé"
End Sub
'************ Dialog Etape 1 ************
Sub Dlg1
NumEtape = 100
Dialog
Title "Etape 1/3"
Control Button
Title "Annuler"
Calling Btn
ID 100
Control Button
Title "Suivant >>"
Calling Btn
Id 103
End Sub
'************ Dialog Etape 2 ************
Sub Dlg2
NumEtape = 100
Dialog
Title "Etape 2/3"
Control Button
Title "<< Précédent"
Calling Btn
Id 201
Control CheckBox
Value Bchk
Id 1000
Control Button
Title "Annuler"
Calling Btn
Id 100
Control Button
Title "Suivant >>"
Calling Btn
Id 203
End Sub
'************ Dialog Etape 3 ************
Sub Dlg3
NumEtape = 100
Dialog
Title "Etape 3/3"
Control Button
Title "<< Précédent"
Calling Btn
Id 301
Control Button
Title "Annuler"
Calling Btn
Id 100
Control Button
Title "Terminer"
Calling Btn
Id 303
End Sub
'************ Dialog Generiques
Sub Btn
Dim DlgOk as Logical
NumEtape = TriggerControl()
'Récupérer le contenu des Control
If NumEtape <> 100 Then
Do Case NumEtape
'--Saisies Etape 1
'>>
Case 103
Note "Btn suivant 1"
'--Saisies Etape 2
'>>
Case 203
Bchk = ReadControlValue(1000)
Note "Btn Suivant 2"
'<<
Case 201
Note "Btn Précédent 2"
'--Saisies Etape 3
'Validation
Case 303
Note "Btn Terminé"
'<<
Case 301
Note "Btn Précédent 3"
End Case
End If
Dialog Remove
End Sub
Hors ligne
#11 Thu 17 April 2008 17:13
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Boite de dialogues successives
Merci pour votre réponse mais quand je veux l'adpater a autre chose qu'a un checkbox cela ne fonctionne pas. Autant avec un check box le truc est resté quand je mets précédent autant avec ma listbox mon edittext et mon radiogroup il reste avec leur valeur initiale.
En fait quand je regarde les valeurs (avec un note) celles ci sont conservés mais n'apparaissent pas comme visible pour l'utilisateur.
Voici mon code pour la premiere boite de dialogue, le probleme ne viendrait t'il pas des into pour remplir ces variables ?
Code:
Sub Dlg1 compteur =100 Dialog Title "Choix du type de cartes (1/3)" width 200 Height 150 Control Statictext Position 25,12 Title "Type de cartes :" Control listbox position 90,13 width 90 Height 60 value 1 Title "Cartes Simple;Cartes zones Iso;Cartes 2 ;Cartes 3 ;" into typecarte id 1 Control Statictext title "Dep" position 25,100 Control Edittext position 55,98 id 2 width 20 value 14 into version Control symbolpicker position 25,25 width 54 height 45 value makecustomsymbol("GLOB1-32.BMP",1,48,0)disable Control Groupbox title "Format" Position 110,80 Control RadioGroup Title "&Taille A3;&Taille A4" Position 120,90 ID 3 Into taille Control Button Position 80, 130 Title "Annuler" width 50 calling btn id 100 Control Button Position 140, 130 Title "Suivant >>" width 50 calling btn id 103 Control Button Position 20, 130 Title "Help" width 50
PS: je sais que je suis chiant
Dernière modification par Fabius (Thu 17 April 2008 17:20)
Hors ligne
#12 Thu 17 April 2008 17:29
- jasper
- Participant occasionnel
- Lieu: Paris
- Date d'inscription: 7 Mar 2007
- Messages: 44
Re: Boite de dialogues successives
Je confirme que le programme peut aussi fonctionner avec des ListBox ou des edit text (et tout autre control)! ;-)
Tout d'abord, sur le control, le "into [variable]" est inutile, car non affecté (jamais la boite n'est validée par un OkButton) : il faut affecter la variable avec un readcontrolValue().
En clair, dans votre control :
Control Edittext position 55,98 id 2 width 20 value 14 into version
Il faut plutôt mettre la valeur de la variable:
Control Edittext position 55,98 id 2 width 20 value Version
et affecter la variable Version (sur le clic du bouton suivant) avec :
Version = ReadControlValue(2)
En espèrant faire avancer le projet...
Cordialement,
Jasper.
Hors ligne
#13 Thu 17 April 2008 17:42
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Boite de dialogues successives
Merci de votre réponse.
Le value 14 into version marche parfaitement (deja utiliser dans un programme plus simple) il met par défault la valeur la plus commune puisque quasiment tout le temps utilisée)
Comme je l'ai dit plus haut , en utilisant des notes je vois que mes valeurs restent en l'etat lorsque "j'avance" et/ou "recule" entre les boites de dialogues mais en revenant sur la précédente (la 1ere dans mon cas) les valeurs de mes différents control apparaissent comme étant initiaux. Vous venez peut etre de me répondre dans votre message en m'indiquant comment procéder avec readcontrolvalue() si c'est le cas je reverrais ca demain a tete reposé parceque là le code mapbasic je commence à saturer pour aujourdhui
Bonne fin de journée
Fabius
Hors ligne
#14 Thu 17 April 2008 17:48
- jasper
- Participant occasionnel
- Lieu: Paris
- Date d'inscription: 7 Mar 2007
- Messages: 44
Re: Boite de dialogues successives
On approche de la fin (du problème) !
Si votre variable est bien affectée, c'est donc l'affectation de la variable au control qui coince !
Dans mon exemple sur votre control de version, c'est le même principe : si vous mettez "value 14", lorsque vous revenez sur la dlg, celle-ci affiche toujours "14" (même si la valeur a été modifiée par l'utilisateur); si par contre vous mettez "Value Version", lorsque vous revenez vous verrez la valeur saisie... et rien n'interdit d'initialiser la variable Version à 14 avant l'affichage du dialog...
Bonne soirée,
Jasper.
Hors ligne
#15 Fri 18 April 2008 16:17
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Boite de dialogues successives
Merci de votre réponse et désolé pour le retard mais ca fonctionne parfaitement comme ca. Avec le recul, apres une bonne journée de travail, c'est vrai que c'était assez logique de fonctionner comme ca . Ce point est résolu mais il est possible que j'ai besoin de remonter ce sujet prochainement en avancant dans mon programme
Petite question d'ailleur : Avant cet enchainement de boites de dialogues mes actions se lancait avec un if cmd_dlg_ok mais quelle est la commande,si elle existe, qui permet d'executer a partir d'un bouton simple ?
Personnelement j'ai fonctionné avec le numetape en fonction de la valeur qu'il prenait mais si jamais on fait un retour en arriere celui ci va réouvrir pour la deuxieme fois la table ou le .wor ?
Cordialement
Fabien
Dernière modification par Fabius (Fri 18 April 2008 16:56)
Hors ligne
#16 Mon 21 April 2008 13:51
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Boite de dialogues successives
Bonjour à tous,
J'ai résolue mon dernier probleme mais je réïtere cependant ma question précédente quand au déclanchement des actions. Comment m'organisé dorénavant sans bouton ok proprement dit. Je ne suis pas encore décidé si je lance tout une fois que les boites de dialogues sont toutes vaidées ou si je lance a chaque controle. La question reste tout de meme de savoir comment faire.
Cordialement
Fabius
Hors ligne
#17 Mon 21 April 2008 22:41
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Boite de dialogues successives
Bonjour
Je reprends le collier ...et je vous suggère la lecture attentive de cette somme, comme toujours tirée le la "mine" de J. Paris...
Hors ligne
#18 Tue 22 April 2008 09:33
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Boite de dialogues successives
Merci j'avais déja cette doc je vais donc me replonger dedans.
Bonne journée à vous tous
Hors ligne
#19 Wed 01 September 2010 15:44
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: Boite de dialogues successives
Bonjour Fabius,
Je sais que je suis tard mais j'ai trouver comment résoudre ton problème. Si nécéssaire fait moi signe
JF
Hors ligne
#20 Wed 08 September 2010 16:47
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Boite de dialogues successives
Bonjour,
Je suis toujours preneur si tu as une astuce, il faut juste que je prenne un peu de temps pour me replonger dans ce programme qui en l'état fonctionne très bien depuis plus de deux ans dailleurs
A+
Fab
Hors ligne
#21 Thu 09 September 2010 16:17
- jean94
- Participant assidu
- Date d'inscription: 13 Aug 2009
- Messages: 436
Re: Boite de dialogues successives
Bonjour Fabius,
Voici le code que j'ai fait, il est commenté et il est prêt à être compilé...désolé pour certain nom de variable mais c'est pas si difficile une fois que tu comprend la boucle principale et d'un dialog.
un des avantages est qu'il stock les infos dans une variable array en mémoire et donc le formulaire garde la valeur même si on avance ou recule dans la succession j'ai ajouter une boucle à la fin pour vider la variable si nécéssaire, il est très très facile d'ajouter plusieurs autre boite de dialogue +- 2min par boite en temps de programmation.
Voici un exemple avec 4 boites essaie d'entrer des valeur/recule/avance/annule/recommence et complete le tu verra très convivial
P.S désolé pour l'ergonomie mais ces un exemple
JF
Hors ligne
#22 Tue 14 September 2010 10:27
- Fabius
- Participant actif
- Date d'inscription: 19 Mar 2008
- Messages: 130
Re: Boite de dialogues successives
Bonjour JF,
Je viens de tester ton code et de le comparer a celui fait "à l'époque" et j'avais utilisé la même methodo (également pour quatre boites de dialogues ). Je trouve que dans le cas de gros programme cette méthode est des plus appréciable pour l'utilisateur.
Ce qui serait sympa dailleurs, ce serait de disposer sur GeoRezo de bout de code spécifique comme celui ci que des utilisateurs néophytes puissent récupérer...
Merci pour le suivi en tout cas.
Hors ligne