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

GEODATA DAYS 2024

#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 sad. Je vais manger et je revois ca apres.
Bon ap à tous les forumistes wink

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

Fabius a écrit:

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 smile]

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 big_smile

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

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 smile

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


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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

 

Pied de page des forums

Powered by FluxBB