Forum Liberty Basic France

Le 09/02/2015 à 13h08

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 612
Bonjour,

J'ai appris par l'expérience qu'il fallait définir à l'avance les combobox dont nous pourrions avoir besoin.

Or mon programme ne connaît pas à l'avance le nombre de combobox qu'il aura à traiter, puisqu'il lit dans un fichier le texte dans lequel il y aura un nombre quelconque de listes à afficher dans des combobox, et que je comptais sur l'ordi pour les afficher "à la volée".

J'ai donc pour le moment créé en dur la quantité de combobox (et statictext) utilisé par mon fichier exemple, mais comment faire pour plus tard, avec des quantités aléatoires de comboboxes ?

l'exemple :
Code VB :
'afficher un fichier en texte contenant combobox et statictext

'simulation de fichier texte, lu en ligne par ligne
    '(les préfixes et suffixes de 2 lettres sont des balises perso)
    'préfixe : TI, TE, CB, catégorie de ligne pour traitement séparé
    'suffixe : CL, changement de ligne volontaire à l'affichage.
    'à la lecture, une ligne dépourvue de CL se voit ajouter la ligne de fichier suivante

    nomfichier$="le Corbeau et le Renard.txt"   '(titre de la fenêtre)

    [fichier]
    data "TILe Corbeau et le RenardCL"
    data "TEMaître"
    data "CBCorbeau:Loup,Renard,Corbeau,Souriceau,Lion"
    data "TE, sur un arbre"
    data "CBperché:en fleur,déraciné,perché,feuillu,magnifique" '"réponse juste:choix1,choix2,...")
    data "TE, tenait en son bec un fromage.CL"
    data "TEMaître Renard, à l'odeur"
    data "CBalléchée:rouge vif,bleue,alléchée,puissante,sereine,assurée"
    data "TE, lui tint à peu près ce langage.CL"
    data "TEHé ! bonjour, Monsieur du"
    data "CBCorbeau:Courneau,Corbeau,Bigorneau,Cours d'EauCL"
    data "TEQue vous êtes joli ! que vous me semblez beau !CL"
 
    'mise en tableau des lignes
    NbrLignesFichier=12
    dim fichier$(NbrLignesFichier)
 
    restore [fichier]
    for a=0 to NbrLignesFichier-1
        read a$
        fichier$(a)= a$
        print fichier$(a)
    next
 
 
 
 
'recherche hauteur et largeur occupée par l'affichage du fichier à l'écran
'définition du contenu,positions et dimensions des statictext et combobox

    'centrages
    centrageTitre = 1   'centrage du titre, 1=centré, 0=aligné à gauche
    centrageTexte = 1   'pas fonctionnel !!! centrage du texte, 1=centré, 0=aligné à gauche

    'dimensions des caractères à taille fixe (comment fait-on pour des dimensions qui varient d'un caractère à l'autre ?)
    LargeurCarTI=15     :HauteurCarTI=30  :interligneTI=int(HauteurCarTI*0.2)  'titre
    LargeurCarTE=9     :HauteurCarTE=15  :interligneTE=int(HauteurCarTE*2.5)  'texte du statictext
    correcVerticalCB = int(HauteurCarTE/4)
    interligneReponse = int(HauteurCarTE*1.6)' - correcVerticalCB

    'pour dimensionnement des statictext
    font$="lucida_console"
    fontetit$="!font " + font$ + " " + str$(LargeurCarTI) + " " + str$(HauteurCarTI)
    fontetex$="!font " + font$ + " " + str$(LargeurCarTE) + " " + str$(HauteurCarTE)
    fontecbx$="font " + font$ + " " + str$(LargeurCarTE) + " " + str$(HauteurCarTE)
    fonteexp$="!font " + font$ + " bold italic " + str$(LargeurCarTE) + " " + str$(HauteurCarTE)
 
    'nombre de caractères par lignes, dimensions d'affichage en découlant
    'marges de la fenêtre, exprimées en % de la future fenêtre
    margeGauche = 5
    margeHaut = 20
    margeDroite = 5
    margeBas = 10
 
    'position initiale de l'affichage des statictext et combobox
    posx = 0
    posy = 0
 
    'index pour le nombre de statictext et combobox rencontrés dans la lecture du fichier
    stxtext = 0 'statictext
    cmbbox = 0  'combobox

    'tableaux contenant les variables des statictexts
    NbStatMax = 50 'nombre maxi de statictexts dans la fiche
    dim staticChaine$(NbStatMax)
    dim staticX(NbStatMax)
    dim staticY(NbStatMax)
    dim staticLargeur(NbStatMax)
    dim staticHauteur(NbStatMax)
 
    NbCmbMax = 50 'nombre maxi de comboboxs dans la fiche

    dim comboX(NbCmbMax)
    dim comboY(NbCmbMax)
    dim comboLargeur(NbCmbMax)
    dim comboHauteur(NbCmbMax)
    '(faut-il prévoir un pré-remplissage utile à la seule déclaration des combobox ?)

 
 
 
'Lecture du fichier, dimensionnement provisoire et définition des combobox et statictext
    for a=0 to NbrLignesFichier-1
 
        print
        'analyse de la ligne
        ligne$ = fichier$(a)
 
        prefixe$ = left$(ligne$,2)
        suffixe$ = right$(ligne$,2)
 
        if suffixe$ = "CL" then aRetirer = 4 else aRetirer = 2
        texte$ = mid$(ligne$,3,len(ligne$)-aRetirer)
        longueurTexte = len(texte$)
        'print "préfixe : ";prefixe$;", suffixe : ";suffixe$;",  texte : ";texte$

 
        'définir et positionner les statictext et combobox
        select case prefixe$
 
 
            case "TI"
                print "titre : ";texte$
 
                LargeurObjet = longueurTexte * LargeurCarTI
                HauteurObjet = HauteurCarTI
                interligne = interligneTI
 
                staticChaine$(stxtext) = texte$
                staticX(stxtext) = posx
                staticY(stxtext) = posy
                staticLargeur(stxtext) = LargeurObjet
                staticHauteur(stxtext) = HauteurObjet
 
                interligne = interligneTI
 
                print "objet Titre : ";posx;" ";posy;" ";LargeurObjet;" ";HauteurObjet
                gosub [statictexts]
                stxtext = stxtext + 1
 
 
            case "TE"
                print "texte : ";texte$
 
                LargeurObjet = (longueurTexte + 1) * LargeurCarTE
                HauteurObjet = HauteurCarTE
                interligne = interligneTE
 
                staticChaine$(stxtext) = texte$
                staticX(stxtext) = posx
                staticY(stxtext) = posy
                staticLargeur(stxtext) = LargeurObjet
                staticHauteur(stxtext) = HauteurCarTE
 
                print "objet Texte : ";posx;" ";posy;" ";LargeurObjet;" ";HauteurObjet
                gosub [statictexts]
                stxtext = stxtext + 1
 
 
            case "CB"
                print "liste de choix : ";texte$
                'la longueur texte à afficher n'est pas la ligne
                'mais seulement le mot le plus long de la liste.

                'avant le ":" c'est le mot juste, après c'est la liste de mots proposée
                debutListe = instr(texte$,":") + 1
                motJuste$ = left$(texte$,debutListe-2)
                print "début liste : ";debutListe
                print "mot juste = ";motJuste$
 
                'analyse de la liste : mot le plus long, mise en tableau de la liste
                if debutListe=0 then
                    print "deux-points non trouvé, cette liste de choix sera ignorée"
                else
                    'nombre de données dans la liste
                    nbrDonnee = 1' on part du principe qu'il y a au moins une donnée. concevoir le cas où il n'y en aurait pas

                    for b = debutListe to longueurTexte
                        car$ = mid$(texte$,b,1)
                        if car$ = "," then nbrDonnee = nbrDonnee + 1
                    next
 
                    'dimensionnement du tableau pour combobox
                    print "nombre de données :";nbrDonnee
                    dim liste$(nbrDonnee)
 
                    'recherche du plus grand mot de la liste, dont la longueur servira à l'affichage du combobox
                    'et remplissage du tableau avec la liste

                    mot$ = ""           'le mot de la liste actuellement traité
                    longueurMot = 0     'longueur du mot actuel
                    numeroMot = 0       'numéro du mot actuel
                    maxiMot = 0         'longueur du mot le plus long rencontré dans la liste

                    for b = debutListe to longueurTexte
 
                        car$ = mid$(texte$,b,1)
 
                        if car$ = "," or b = longueurTexte then
                            if b = longueurTexte then mot$ = mot$ + car$
                            longueurMot = len(mot$)
                            if maxiMot < longueurMot then maxiMot = longueurMot ' on garde le nbre de caractères du mot le plus grand
                            liste$(numeroMot) = mot$            ' on met le mot en tableau

                            numeroMot = numeroMot + 1
                            print "maxiMot : ";maxiMot;",  longueur mot$ = ";longueurMot;",  mot$ = ";mot$
                            mot$=""                            ' et on prépare le travail sur le mot suivant
                        else
                            mot$ = mot$ + car$
                        end if
 
                    next
 
 
                end if
                LargeurObjet = maxiMot * LargeurCarTE + 25
                HauteurObjet = HauteurCarTE
                interligne = interligneTE
 
 
                print "objet Combobox : ";posx;" ";posy;" ";LargeurObjet;" ";HauteurObjet
 
                comboX(cmbbox) = posx
                comboY(cmbbox) = posy - correcVerticalCB 'essayer de le faire proportionnel à la hauteur de ligne
                comboLargeur(cmbbox) = LargeurObjet
                comboHauteur(cmbbox) = HauteurObjet
 
                gosub [comboboxes]
 
                cmbbox = cmbbox + 1 'on prépare pour le combobox suivant

 
            end select
 
        'si le changement de ligne est demandé
        if suffixe$="CL" then
 
            'on officialise la longueur de la ligne actuelle (en fait, la largeur en pixels qu'elle occupe à l'écran)
            if LargeurAffMax < posx + LargeurObjet then LargeurAffMax = posx + LargeurObjet
 
            'on prépare la coordonnée verticale de la ligne suivante
            posx = 0
            posy = posy + HauteurObjet + interligne
 
            print
            print "CL = fin de ligne, posx = ";posx;" et posy = ";posy
 
        else
            'on ajoute à la longueur la longeur de l'objet venant d'^tre traité
            print
            print "ligne en cours"
            posx = posx + LargeurObjet
            print "ligne en cours, posx = ";posx;", Largeur de l'objet = ";LargeurObjet
 
        end if
 
 
        print "largeur affichage : ";LargeurAffMax;" pixels"
        print "position verticale affichage ligne suivante : ";posy;" pixels"
 
    next
 
 
 
 
'préparation à l'affichage de la fenêtre
    'détermination des marges
    print:print "détermination des marges"
    MargeGauchePx = int((LargeurAffMax*margeGauche)/100)
    MargeDroitePx = int((LargeurAffMax*margeDroite)/100)
    MargeHautPx = int((posy*margeHaut)/100)
    MargeBasPx = int((posy*margeBas)/100)
 
    print "gauche : ";MargeGauchePx;", droite : ";MargeDroitePx;", haut : ";MargeHautPx;", bas : ";MargeBasPx
 
    'application des marges
    print:print "application des marges"
    LargeurFenetre = MargeGauchePx + LargeurAffMax + MargeDroitePx
    HauteurFenetre = MargeHautPx + posy + MargeBasPx
    print "largeur fenêtre : ";LargeurFenetre;", hauteur fenêtre : ";HauteurFenetre;" pixels"
 
    'ajout de la rangée de boutons "corriger, refaire, quitter,"
    LargeurCarBTN=8     :HauteurCarBTN=20   :interligneBTN=int(HauteurCarBTN/2)  'fonte des boutons
    fontebtn$="!font courrier_new"+" "+str$(LargeurCarBTN)+" "+str$(HauteurCarBTN)
 
    nbrboutons = 3
    intervalle = LargeurFenetre / (nbrboutons * 2 + 1)
    largeurbouton = intervalle
 
    posy = posy + HauteurObjet + interligne
    xbouton = intervalle * 1 : button #fiche.corriger, "Corriger ?", [corriger], UL, xbouton, posy, largeurbouton, HauteurCarBTN+interligneBTN
    xbouton = intervalle * 3 : button #fiche.refaire, "Refaire", [refaire], UL, xbouton, posy, largeurbouton, HauteurCarBTN+interligneBTN
    xbouton = intervalle * 5 : button #fiche.quitter, "Quitter", [quit], UL, xbouton, posy, largeurbouton, HauteurCarBTN+interligneBTN
 
    HauteurFenetre = HauteurFenetre + HauteurCarBTN + MargeBasPx + 30
    print:print "application des boutons"
    print "largeur fenêtre, avec marges : ";LargeurFenetre;" pixels"
    print "hauteur fenêtre, avec marges : ";HauteurFenetre;" pixels"
 
    'centrage et positionnement des statictexts et combobox
    Milieu = int(LargeurFenetre)/2
 
    'centrage du titre
    if centrageTitre = 1 then staticX(0)=int(LargeurFenetre)/2 - int((staticLargeur(0)/2))
    staticY(0) = staticY(0) + margeHaut
    'positionnement correct des statictexts
    for boucle = 1 to stxtext
        staticX(boucle) = staticX(boucle) + MargeGauchePx
        staticY(boucle) = staticY(boucle) + MargeHautPx
    next
 
    'positionnement correct des comboboxs
    for boucle = 0 to cmbbox
        comboX(boucle) = comboX(boucle) + MargeGauchePx
        comboY(boucle) = comboY(boucle) + MargeHautPx
    next
 
 
 
 
'end

 
 
 
'dimensions et position de la fenêtre

    'milieu de la fenêtre au milieu de l'écran
    'dimensions de l'écran
    LargeurEcran = DisplayWidth
    HauteurEcran = DisplayHeight
    'si les dimensions de la fenêtre sont supérieures aux dimensions de l'écran, la fenêtre sera de la dimension de l'écran
    'il me semble bien que des ascenseurs sont affichés pour parcourir l'intégralité de la fenêtre.
    'il ne devrait donc pas être nécessaire de se préoccuper de cette situation. A confirmer.

    'point haut gauche de la fenêtre dans l'écran

    'centre de l'écran
    CentreEcranX = int(LargeurEcran / 2)
    CentreEcranY = int(HauteurEcran / 2)
 
    'centre de la fenêtre
    CentreFenetreX = int(LargeurFenetre / 2)
    CentreFenetreY = int(HauteurFenetre / 2)
 
    'positionner la fenêtre
    UpperLeftX = CentreEcranX - CentreFenetreX
    UpperLeftY = CentreEcranY - CentreFenetreY
 
    'dimensionner la fenêtre
    WindowWidth = LargeurFenetre
    WindowHeight = HauteurFenetre
 
    'a faire : prévoir le cas où LargeurAffMax ou posy seraient plus grands que les dimensions de l'écran
    'WindowHeight = HauteurTotaleAffichage

    print:print "juste avant ouverture de fenêtre :"
    print "largeur fenêtre = ";WindowWidth
    print "hauteur fenêtre = ";WindowHeight
    print
 
 
'remplissage et affichage de la fenêtre
    open nomfichier$ for window as #fiche
 
        print #fiche.corriger, fontebtn$
        print #fiche.refaire, fontebtn$
        print #fiche.quitter, fontebtn$
 
        for fonte = 0 to stxtext
            select case fonte
                case 0 : #fiche.tit, fontetit$
                case 1 : #fiche.text1, fontetex$
                case 2 : #fiche.text2, fontetex$
                case 3 : #fiche.text3, fontetex$
                case 4 : #fiche.text4, fontetex$
                case 5 : #fiche.text5, fontetex$
                case 6 : #fiche.text6, fontetex$
                case 7 : #fiche.text7, fontetex$ 
            end select
        next
 
 
        for fonte = 0 to cmbbox
            select case fonte
                case 0 : #fiche.cb0,fontecbx0$'
                case 1 : #fiche.cb1,fontecbx1$
                case 2 : #fiche.cb2,fontecbx2$
                case 3 : #fiche.cb3,fontecbx3$
            end select
        next
 
    print #fiche, "trapclose [quit]"
 
    wait
 
'fin du programme, au cas où...
end
 
 
'******** zone des sous-programmes ********

[quit]
    print : print "[quit]"
    print fontebtn$
    close #fiche
    end
 
 
[corriger]
    print : print "[corriger]"
 
    #fiche.cb0,fontecbx0$
    #fiche.cb1,fontecbx1$ 
    #fiche.cb2,fontecbx2$ 
    #fiche.cb3,fontecbx3$ 
    '#fiche.cb4,fontecbx4$

    print #fiche.stcb0, corrige0$
    print #fiche.stcb1, corrige1$ 
    print #fiche.stcb2, corrige2$ 
    print #fiche.stcb3, corrige3$ 
 
    print #fiche.corriger, "!disable" 'une fois la correction effectuée, il faut redémarrer
    'l'exercice pour pouvoir le corriger à nouveau
    print fontebtn$
 
wait
 
 
[refaire]
    print "[refaire]"
    #fiche.cb0, fontecbx$ : print #fiche.cb0, "! "
    #fiche.cb1, fontecbx$ : print #fiche.cb1, "! "
    #fiche.cb2, fontecbx$ : print #fiche.cb2, "! "
    #fiche.cb3, fontecbx$ : print #fiche.cb3, "! "
    '#fiche.cb4, fontecbx$ : print #fiche.cb4, "! "

    print #fiche.stcb0, ""
    print #fiche.stcb1, ""
    print #fiche.stcb2, ""
    print #fiche.stcb3, ""
 
    print #fiche.corriger, "!enable" 'rendre opérationnel le bouton "corriger"
    print fontebtn$
 
wait
 
[statictexts]
    select case stxtext
 
        case 0 : statictext #fiche.tit, staticChaine$(0), staticX(0),  staticY(0), staticLargeur(0), staticHauteur(0)
        case 1 : statictext #fiche.text1, staticChaine$(1), staticX(1),  staticY(1), staticLargeur(1), staticHauteur(1)
        case 2 : statictext #fiche.text2, staticChaine$(2), staticX(2),  staticY(2), staticLargeur(2), staticHauteur(2)
        case 3 : statictext #fiche.text3, staticChaine$(3), staticX(3),  staticY(3), staticLargeur(3), staticHauteur(3)
        case 4 : statictext #fiche.text4, staticChaine$(4), staticX(4),  staticY(4), staticLargeur(4), staticHauteur(4)
        case 5 : statictext #fiche.text5, staticChaine$(5), staticX(5),  staticY(5), staticLargeur(5), staticHauteur(5)
        case 6 : statictext #fiche.text6, staticChaine$(6), staticX(6),  staticY(6), staticLargeur(6), staticHauteur(6)
        case 7 : statictext #fiche.text7, staticChaine$(7), staticX(7),  staticY(7), staticLargeur(7), staticHauteur(7)
     end select
 
return
 
 
[comboboxes]
 
    select case cmbbox
 
        case 0
            for cbx = 0 to nbrDonnee - 1 : comboliste0$(cbx) = liste$(cbx) : next
            combobox #fiche.cb0, comboliste0$(), [cb0], comboX(0), comboY(0), comboLargeur(0), comboHauteur(0)
            'statictext #fiche.stcb0
            'statictext #fiche.stcb0, comboliste0$(0), comboX(0), comboY(0) + interligneEX, comboLargeur(0), comboHauteur(0)
            statictext #fiche.stcb0, "", comboX(0), comboY(0) + interligneReponse, comboLargeur(0), comboHauteur(0)
 
            motJuste0$=motJuste$
            fontecbx0$=fontecbx$
 
        case 1
            for cbx = 0 to nbrDonnee - 1 : comboliste1$(cbx) = liste$(cbx) : next
            combobox #fiche.cb1, comboliste1$(), [cb1], comboX(1), comboY(1), comboLargeur(1), comboHauteur(1)
            statictext #fiche.stcb1, "", comboX(1), comboY(1) + interligneReponse, comboLargeur(1), comboHauteur(1)
 
            motJuste1$=motJuste$
            fontecbx1$=fontecbx$
 
        case 2
            for cbx = 0 to nbrDonnee - 1 : comboliste2$(cbx) = liste$(cbx) : next
            combobox #fiche.cb2, comboliste2$(), [cb2], comboX(2), comboY(2), comboLargeur(2), comboHauteur(2)
            statictext #fiche.stcb2, "", comboX(2), comboY(2) + interligneReponse, comboLargeur(2), comboHauteur(2)
 
            motJuste2$=motJuste$
            fontecbx2$=fontecbx$
 
        case 3
            for cbx = 0 to nbrDonnee - 1 : comboliste3$(cbx) = liste$(cbx) : next
            combobox #fiche.cb3, comboliste3$(), [cb3], comboX(3), comboY(3), comboLargeur(3), comboHauteur(3)
            statictext #fiche.stcb3, "", comboX(3), comboY(3) + interligneReponse, comboLargeur(3), comboHauteur(3)
 
            motJuste3$=motJuste$
            fontecbx3$=fontecbx$
 
    end select
 
return
 
 
[cb0]
    print : print "[cb0]"
    print "ce qui se passe quand on a choisi le mot dans CB0"
    'on vérifie le choix de l'utilisateur

    'on extrait le choix de l'utilisateur
    print #fiche.cb0, "contents? choix$"
    print "choix de l'utilisateur : ";choix$
    print "         bonne réponse = ";motJuste0$
 
    'on compare le choix au réel
    if choix$ = motJuste0$ then
        print "bonne réponse"
        'résultat juste, fonte normale
        cb0Resultat = 1
        fontecbx0$ = fontecbx$
        corrige0$ = ""
    else
        'résultat faux, fonte barrée
        'motJuste0$
        print #fiche.stcb0,fonteexp$
 
        print "réponse erronnée"
        cb0Resultat = 0
        fontecbx0$=fontecbx$+" strikeout"
        corrige0$ = motJuste0$
    end if
    print "en [cb0] on a : ";fontecbx0$
 
    wait
 
 
[cb1]
    print : print "[cb1]"
    print "ce qui se passe quand on a choisi le mot dans CB1"
    'on vérifie le choix de l'utilisateur

    'on extrait le choix de l'utilisateur
    print #fiche.cb1, "contents? choix$"
    print "choix de l'utilisateur : ";choix$
    print "         bonne réponse = ";motJuste1$
 
    'on compare le choix au réel
    if choix$ = motJuste1$ then
        print "bonne réponse"
        'résultat juste, fonte normale
        cb1Resultat = 1
        fontecbx1$=fontecbx$
        corrige1$ = ""
    else
        'résultat faux, fonte barrée
        print "réponse erronnée"
        print #fiche.stcb1,fonteexp$
        cb1Resultat = 0
        fontecbx1$=fontecbx$+" strikeout"
        corrige1$ = motJuste1$
    end if
    print "en [cb1] on a : ";fontecbx1$
    wait
 
 
[cb2]
    print : print "[cb2]"
    print "ce qui se passe quand on a choisi le mot dans CB2"
    'on vérifie le choix de l'utilisateur

    'on extrait le choix de l'utilisateur
    print #fiche.cb2, "contents? choix$"
    print "choix de l'utilisateur : ";choix$
    print "         bonne réponse = ";motJuste2$
 
    'on compare le choix au réel
    if choix$ = motJuste2$ then
        print "bonne réponse"
        'résultat juste, fonte normale
        cb2Resultat = 1
        fontecbx2$=fontecbx$
        corrige2$ = ""
    else
        'résultat faux, fonte barrée
        print "réponse erronnée"
        print #fiche.stcb2,fonteexp$
        cb2Resultat = 0
        fontecbx2$=fontecbx$+" strikeout"
        corrige2$ = motJuste2$
    end if
    print "en [cb2] on a : ";fontecbx2$
    wait
 
 
[cb3]
    print : print "[cb3]"
    print "ce qui se passe quand on a choisi le mot dans CB3"
    'on vérifie le choix de l'utilisateur

    'on extrait le choix de l'utilisateur
    print #fiche.cb3, "contents? choix$"
    print "choix de l'utilisateur : ";choix$
    print "         bonne réponse = ";motJuste3$
 
    'on compare le choix au réel
    if choix$ = motJuste3$ then
        print "bonne réponse"
        'résultat juste, fonte normale
        cb3Resultat = 1
        fontecbx3$=fontecbx$
        corrige3$ = ""
    else
        'résultat faux, fonte barrée
        print "réponse erronnée"
        print #fiche.stcb3,fonteexp$
        cb3Resultat = 0
        fontecbx3$=fontecbx$+" strikeout"
        corrige3$ = motJuste3$
    end if
    print "en [cb3] on a : ";fontecbx3$
    wait
 
 
 
 
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 09/02/2015 à 16h36

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2252
Salut,
Ce que tu veux faire ne paraît pas possible, car si les données chargées peuvent générer du code.
Il faudrait que le prog s'auto-recompile pour que les modifs de code soient prises en compte.

La solution, c'est de prendre un récipient plus grand que la quantité à contenir.
Dans ton cas: Mettre un nombre de combos supérieur au max nécessaire.

Il y a certainement une autre façon de faire qu'avec des combobox (il y a toujours plusieurs façons de faire)
____________________
Roro

   
Le 10/02/2015 à 01h12

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2252
Comme je te conseille dans l'autre post de mettre ton texte dans un fichier
Et que la procédure de chargement de fichiers n'est pas évidente, je t'en mets une ici.
Pour la tester, il faut mettre le:".bas" dans un dossier avec un fichier: ".txt"

Tu remarquera que le texte va directement dans ton tableau dès le chargement
Pour définir la taille du tableau, il faut ouvrir le fichier , en faire une lecture "à blanc" pour récupérer le nombre de lignes
Le fermer (close #...)
Dimensionner le tableau
Et le réouvrir pour charger.

Code VB :
 
 
      dim info$(10,10) ' A mettre en début de code(infos fichiers pour la fonction)
      dim fichier$(50) ' nombre de lignes

       filedialog "Open Les textes", "*.txt", file$
       n=1 ' Note: Les tableaux commencent à O
       if file$ <> "" and fileExist(DefaultDir$, file$) then
          open file$ for input as #ga
          [loopouv]
          if eof(#ga) <> 0 then [sortouv] ' détection fin de fichier
          line input #ga, item$ ' une ligne du texte
          fichier$(n)=item$ ' stocke directement dans le tableau
          n=n+1 ' le nombre de lignes (ça peut servir)
          goto [loopouv]
          [sortouv]
          close #ga
        charged$ = left$(info$(1,0),len(info$(1,0))-3) ' contient le nom du fichier(pour affichage)
        else
        notice "fichier manquant"
        end if
 
    for a=0 to n
        print fichier$(a)
    next
    '-------------- fonction qui teste la présence du fichier
    function fileExist(path$, filename$)
        files path$, filename$, info$()
        fileExist = val(info$(0, 0))
    end function
 
 

Note; Si tu mets des nombres (positions des combobox) dans ton texte,
Il faudra les extraire en passant par:
Code VB :
 
   line input #ga, item$ 
 valeurnumérique=val(item$)
 
____________________
Roro

   
Le 10/02/2015 à 18h23

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 612
Merci du coup de main,

Je vais en effet rester sur l'idée d'un récipient plus grand que ce qu'il aura à contenir.

C'est pour les essais que les données sont en datas : on les a sous les yeux dans le corps du programme, y'a pas besoin de courir après le fichier si on veut les modifier, et on s'évite les éventuels bugs de la lecture de fichier. Autrement, à terme, les données seront en effet sur fichier, un fichier par thème avec plusieurs questions dedans, à la suite les unes des autres.

Pour l'instant, que du texte dans le fichier, le problème des symboles graphiques et des équations n'est pas d'actualité, et promet déjà son lot d'aspirine.

Je comptais créer en quelques heures (c'est raté depuis longtemps^^) un petit programme pour m'aider à apprendre certains détails que notre esprit refuse obstinément de mémoriser, en comptant sur la répétition du même texte à trous à compléter avec les mêmes termes. C'est vite lassant, et on finit par choisir par cœur les bonnes réponse en fonction de leur position dans la combobox, et pas en fonction de leur signification, donc on apprend rien.

Donc là je travaille pour que la liste présentée par un combobox ne soit pas dans le même ordre à l'essai suivant, c'est là que je sens qu'il faut que je réécrive mon code, parce qu'en l'état il n'est pas du tout fait pour : j'arrive bien à mélanger les listes, mais pas à en communiquer le résultat aux combobox de manière simple.

Au fait, quel autre composant pour fournir une liste de choix, en dehors de l'écrire soi-même ?
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 10/02/2015 à 19h00

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2252
Citation:
on finit par choisir par cœur les bonnes réponse en fonction de leur position

Dans "Zanimaux", je remélange l'ordre des propositions; mais comme je mélange l'ensemble de la liste, j'ai dû réintégrer de force le bon nom. (il y a un coment..)
Ce que tu appelle bug de chargement, j'appelle ça: procédure pas toujours évidente.
Comme composant de choix, il y les listbox. (pas trop adapté à ton prog. Sauf à présenter une longue liste fixe façon "panneau latéral".
N'oublie pas de mettre des versions à l'abri, parce que pris par l'enthousiasme, on a vite fait de faire des counneries.
____________________
Roro

   
Le 12/02/2015 à 20h02

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2252
Une idée:
Si tu veux te débarrasser des combobox, tu fais dans une graphicbox et tu fais défiler les noms avec un bouton.
J'ai un faible pour les boutons. :p
____________________
Roro

   
Le 21/02/2015 à 13h04

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 612
Je vais en rester aux combobox, j'ai enfin réussi au bout de trois heures à recharger la liste proposée par les combobox, il suffisait de faire un print #nom_de_fenetre.nom_combobox, reload (mettre le reload entre guillemets)

Tout ça pour ça...

et je ne me souvenais même plus que je l'avais lu dans l'aide. Bon enfin ça marche, je suis content.

Je n'ai pas trop eu le temps de me pencher sur mon prog depuis ma dernière intervention sur le forum, je devrais pouvoir être un peu plus disponible ce week-end.

Bonne journée
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 08/03/2015 à 14h20

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 612
Salut salut !

J'avance doucement. Je peux maintenant définir un nombre de combobox supérieur au nombre de combobox réellement utilisées, ce qui me premettra d'affirmer par la suite qu'une question peut contenir de 0 à X combobox, c'est plus universel que d'avoir X et seulement X combobox, même si ce n'est pas la souplesse d'une génération "à la demande".

Par contre il semble que le programme ait un fonctionnement un peu erratique.

Lorsque je le lance pour la première fois, les choix de l’utilisateur sont bien pris en compte, et cliquer sur le bouton "corriger" corrige bien les erreurs de l'utilisateur. Recommencer l'exercice ne pose pas de problèmes.

Depuis j'ai ajouté une routine de mélange des listes de chaque combobox, pour que la liste ne s'affiche pas dans le même ordre à chaque tentative de l'utilisateur. Jusqu'à présent, cette routine semble fonctionner correctement.

Après le cycle "correction" - "mélange", on arrive au tour suivant, l'utilisateur peut recommencer l'exercice.

Les combobox s'affichent bien et attendent le choix de l'utilisateur, comme pour le tour d'avant, MAIS, il arrive que les choix de l'utilisateur ne sont pas pris en compte par le programme, alors qu'ils s'affichent correctement dans la combobox. Dès fois tous les combobox fonctionnent, dès fois seulement une ou deux combobox, et ce ne sont jamais les mêmes d'un essai sur l'autre

Qu'est-ce qui pourrait provoquer ce fonctionnement "erratique" ?
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 09/03/2015 à 14h42

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2252
Salut négociant en combobox,
Si tu veux qu'on se penche sur ce fonctionnement erratique, il faut que tu poste ta dernière version.
Perso, j'ai eu des fonctionnement erratiques avec des transferts de handles (hand$="#...ecaetera)
Je les ai imputés à l'OS (un bon bouc émissaire l'OS).
____________________
Roro

   
Le 10/03/2015 à 15h55

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 612
A moëlle, l'OS^^

Je n'osais pas surcharger le forum. Voici le code. Il faudra un jour que j'en fasse le plan (la carte, l'organigramme, le gps, enfin la chose qui permet de s'y retrouver). Dans la mainwin s'affiche le passage dans les divers sous-programmes, ce qui permet de voir instantanément quel combobox a été pris en compte, ou pas :

Code VB :
 
'afficher un fichier en texte contenant combobox et statictext

'A VOIR :
'parfois une réponse juste est considérée comme fausse
'après un clic sur le bouton "refaire", la réponse à un combobox ne semble pas prise en compte
'bien que la combobox affiche le choix de l'utilisateur

 
'simulation de fichier texte, lu en ligne par ligne
    '(les préfixes et suffixes de 2 lettres sont des balises perso)
    'préfixe : TI, TE, CB, catégorie de ligne pour traitement séparé
    'suffixe : CL, changement de ligne volontaire à l'affichage.
    'à la lecture, une ligne dépourvue de CL se voit ajouter la ligne de fichier suivante

    nomfichier$="le Corbeau et le Renard.txt"   '(titre de la fenêtre)

    [fichier]
    data "TILe Corbeau et le RenardCL"
    data "TEMaître"
    data "CBCorbeau:Loup,Renard,Corbeau,Souriceau,Lion"
    data "TE, sur un arbre"
    data "CBperché:en fleur,déraciné,perché,feuillu,magnifique" '"réponse juste:choix1,choix2,...")
    data "TE, tenait en son bec un fromage.CL"
    data "TEMaître Renard, à l'odeur"
    data "CBalléchée:rouge vif,bleue,alléchée,puissante,sereine,assurée"
    data "TE, lui tint à peu près ce langage.CL"
    data "TEHé ! bonjour, Monsieur du"
    data "CBCorbeau:Courneau,Corbeau,Bigorneau,Cours d'EauCL"
    data "TEQue vous êtes joli ! que vous me semblez beau !CL"
 
    'mise en tableau des lignes
    NbrLignesFichier=12
    dim fichier$(NbrLignesFichier)
 
    restore [fichier]
    print:print "contenu du fichier :"
    for a=0 to NbrLignesFichier-1
        read a$
        fichier$(a)= a$
        print fichier$(a)
    next
 
 
 
 
'recherche hauteur et largeur occupée par l'affichage du fichier à l'écran
'définition du contenu,positions et dimensions des statictext et combobox

    'centrages
    centrageTitre = 1   'centrage du titre, 1=centré, 0=aligné à gauche
    centrageTexte = 1   'pas fonctionnel !!! centrage du texte, 1=centré, 0=aligné à gauche

    'dimensions des caractères à taille fixe (comment fait-on pour des dimensions qui varient d'un caractère à l'autre ?)
    LargeurCarTI=15     :HauteurCarTI=30  :interligneTI=int(HauteurCarTI*0.2)  'titre
    LargeurCarTE=9     :HauteurCarTE=15  :interligneTE=int(HauteurCarTE*2.2)  'texte du statictext
    correcVerticalCB = int(HauteurCarTE/4)
    interligneReponse = int(HauteurCarTE*1.6)' - correcVerticalCB

    'pour dimensionnement des statictext
    font$="lucida_console"
    fontetit$="!font " + font$ + " " + str$(LargeurCarTI) + " " + str$(HauteurCarTI)
    fontetex$="!font " + font$ + " " + str$(LargeurCarTE) + " " + str$(HauteurCarTE)
    fontecbx$="font " + font$ + " " + str$(LargeurCarTE) + " " + str$(HauteurCarTE)
    fonteexp$="!font " + font$ + " bold italic " + str$(LargeurCarTE) + " " + str$(HauteurCarTE)
 
    'nombre de caractères par lignes, dimensions d'affichage en découlant
    'marges de la fenêtre, exprimées en % de la future fenêtre
    margeGauche = 5
    margeHaut = 20
    margeDroite = 5
    margeBas = 10
 
    'position initiale de l'affichage des statictext et combobox
    posx = 0
    posy = 0
 
    'index pour le nombre de statictext et combobox rencontrés dans la lecture du fichier
    stxtext = 0 'statictext
    cmbbox = 0  'combobox

    'tableaux contenant les variables des statictexts
    NbStatMax = 50 'nombre maxi de statictexts dans la fiche
    dim staticChaine$(NbStatMax)
    dim staticX(NbStatMax)
    dim staticY(NbStatMax)
    dim staticLargeur(NbStatMax)
    dim staticHauteur(NbStatMax)
 
    NbCmbMax = 50 'nombre maxi de comboboxs dans la fiche

    dim comboX(NbCmbMax)
    dim comboY(NbCmbMax)
    dim comboLargeur(NbCmbMax)
    dim comboHauteur(NbCmbMax)
    dim comboNbDonnees(NbCmbMax)
    dim comboMotJuste$(NbCmbMax)
    '(faut-il prévoir un pré-remplissage utile à la seule déclaration des combobox ?)

 
 
 
'Lecture du fichier, dimensionnement provisoire et définition des combobox et statictext

    for a=0 to NbrLignesFichier-1
 
        print
        'analyse de la ligne
        ligne$ = fichier$(a)
 
        prefixe$ = left$(ligne$,2)
        suffixe$ = right$(ligne$,2)
 
        if suffixe$ = "CL" then aRetirer = 4 else aRetirer = 2
        texte$ = mid$(ligne$,3,len(ligne$)-aRetirer)
        longueurTexte = len(texte$)
        'print "préfixe : ";prefixe$;", suffixe : ";suffixe$;",  texte : ";texte$

 
        'définir et positionner les statictext et combobox
        select case prefixe$
 
 
            case "TI"
                print "case TI - titre : ";texte$
 
                LargeurObjet = longueurTexte * LargeurCarTI
                HauteurObjet = HauteurCarTI
                interligne = interligneTI
 
                staticChaine$(stxtext) = texte$
                staticX(stxtext) = posx
                staticY(stxtext) = posy
                staticLargeur(stxtext) = LargeurObjet
                staticHauteur(stxtext) = HauteurObjet
 
                interligne = interligneTI
 
                print "case TI - objet Titre : ";posx;" ";posy;" ";LargeurObjet;" ";HauteurObjet
                gosub [statictexts]
                stxtext = stxtext + 1
 
 
            case "TE"
                print "case TE - texte : ";texte$
 
                LargeurObjet = (longueurTexte + 1) * LargeurCarTE
                HauteurObjet = HauteurCarTE
                interligne = interligneTE
 
                staticChaine$(stxtext) = texte$
                staticX(stxtext) = posx
                staticY(stxtext) = posy
                staticLargeur(stxtext) = LargeurObjet
                staticHauteur(stxtext) = HauteurCarTE
 
                print "case TE - objet Texte : ";posx;" ";posy;" ";LargeurObjet;" ";HauteurObjet
                gosub [statictexts]
                stxtext = stxtext + 1
 
 
            case "CB"
                print "case CB - liste de choix : ";texte$
                'la longueur texte à afficher n'est pas la ligne
                'mais seulement le mot le plus long de la liste.

                'avant le ":" c'est le mot juste, après c'est la liste de mots proposée
                debutListe = instr(texte$,":") + 1
                motJuste$ = left$(texte$,debutListe-2)
 
                print "case CB - début liste : ";debutListe
                print "case CB - mot juste = ";motJuste$
 
                'analyse de la liste : mot le plus long, mise en tableau de la liste
                if debutListe=0 then
                    print "case CB - deux-points non trouvé, cette liste de choix sera ignorée"
                else
                    'nombre de données dans la liste
                    nbrDonnee = 1' on part du principe qu'il y a au moins une donnée. concevoir le cas où il n'y en aurait pas

                    for b = debutListe to longueurTexte
                        car$ = mid$(texte$,b,1)
                        if car$ = "," then nbrDonnee = nbrDonnee + 1
                    next
 
                    'dimensionnement du tableau pour combobox
                    print "case CB - nombre de données :";nbrDonnee
                    dim liste$(nbrDonnee), listeIntermediaire$(nbrDonnee), tir(nbrDonnee)
 
                    'recherche du plus grand mot de la liste, dont la longueur servira à l'affichage du combobox
                    'et remplissage du tableau avec la liste

                    mot$ = ""           'le mot de la liste actuellement traité
                    longueurMot = 0     'longueur du mot actuel
                    numeroMot = 0       'numéro du mot actuel
                    maxiMot = 0         'longueur du mot le plus long rencontré dans la liste

                    'remplissage du tableau contenant les entrées de la liste
                    for b = debutListe to longueurTexte
 
                        car$ = mid$(texte$,b,1)
 
                        if car$ = "," or b = longueurTexte then
                            if b = longueurTexte then mot$ = mot$ + car$
                            longueurMot = len(mot$)
                            if maxiMot < longueurMot then maxiMot = longueurMot ' on garde le nbre de caractères
                                'du mot le plus grand

 
                            'mettre le mot en tableau
                            liste$(numeroMot) = mot$            ' on met le mot en tableau

                            numeroMot = numeroMot + 1
                            print "case CB - maxiMot : ";maxiMot;",  longueur mot$ = ";longueurMot;",  mot$ = ";mot$
                            mot$=""                            ' et on prépare le travail sur le mot suivant
                        else
                            mot$ = mot$ + car$
                        end if
 
                    next
 
                    comboMotJuste$(cmbbox) = motJuste$
                    comboNbDonnees(cmbbox) = numeroMot
 
                end if
 
                LargeurObjet = maxiMot * LargeurCarTE + 25
                HauteurObjet = HauteurCarTE
                interligne = interligneTE
 
 
                print "case CB - objet Combobox : ";posx;" ";posy;" ";LargeurObjet;" ";HauteurObjet
 
                comboX(cmbbox) = posx
                comboY(cmbbox) = posy - correcVerticalCB 'essayer de le faire proportionnel à la hauteur de ligne
                comboLargeur(cmbbox) = LargeurObjet
                comboHauteur(cmbbox) = HauteurObjet
 
                gosub [comboboxes]
 
                cmbbox = cmbbox + 1 'on prépare pour le combobox suivant

 
            end select
 
        'si le changement de ligne est demandé
        if suffixe$="CL" then
            print  "case CL - Changement de ligne"
            'on officialise la longueur de la ligne actuelle (en fait, la largeur en pixels qu'elle occupe à l'écran)
            if LargeurAffMax < posx + LargeurObjet then LargeurAffMax = posx + LargeurObjet
 
            'on prépare la coordonnée verticale de la ligne suivante
            posx = 0
            posy = posy + HauteurObjet + interligne
 
            print
            print "case CL - CL = fin de ligne, posx = ";posx;" et posy = ";posy
 
        else
            'on ajoute à la longueur la longeur de l'objet venant d'^tre traité
            print
            print "case CL - ligne en cours"
            posx = posx + LargeurObjet
            print "case CL - ligne en cours, posx = ";posx;", Largeur de l'objet = ";LargeurObjet
 
        end if
 
 
        print "case CL - largeur affichage : ";LargeurAffMax;" pixels"
        print "case CL - position verticale affichage ligne suivante : ";posy;" pixels"
 
    next
 
 
 
 
'préparation à l'affichage de la fenêtre
    'détermination des marges
    print:print "Prépa fenêtre - détermination des marges"
    MargeGauchePx = int((LargeurAffMax*margeGauche)/100)
    MargeDroitePx = int((LargeurAffMax*margeDroite)/100)
    MargeHautPx = int((posy*margeHaut)/100)
    MargeBasPx = int((posy*margeBas)/100)
 
    print "Prépa fenêtre - marge gauche Px : ";MargeGauchePx;", droite : ";MargeDroitePx;", haut : ";MargeHautPx;", bas : ";MargeBasPx
 
    'application des marges
    print:print "Prépa fenêtre - application des marges"
    LargeurFenetre = MargeGauchePx + LargeurAffMax + MargeDroitePx
    HauteurFenetre = MargeHautPx + posy + MargeBasPx
    print "Prépa fenêtre - largeur fenêtre : ";LargeurFenetre;", hauteur fenêtre : ";HauteurFenetre;" pixels"
 
    'ajout de la rangée de boutons "corriger, refaire, quitter,"
    LargeurCarBTN=8     :HauteurCarBTN=20   :interligneBTN=int(HauteurCarBTN/2)  'fonte des boutons
    fontebtn$="!font courrier_new"+" "+str$(LargeurCarBTN)+" "+str$(HauteurCarBTN)
 
    nbrboutons = 3
    intervalle = LargeurFenetre / (nbrboutons * 2 + 1)
    largeurbouton = intervalle
 
    posy = posy + HauteurObjet + interligne
    xbouton = intervalle * 1 : button #fiche.corriger, "Corriger ?", [corriger], UL, xbouton, posy, largeurbouton, HauteurCarBTN+interligneBTN
    xbouton = intervalle * 3 : button #fiche.refaire, "Refaire", [refaire], UL, xbouton, posy, largeurbouton, HauteurCarBTN+interligneBTN
    xbouton = intervalle * 5 : button #fiche.quitter, "Quitter", [quit], UL, xbouton, posy, largeurbouton, HauteurCarBTN+interligneBTN
 
    HauteurFenetre = HauteurFenetre + HauteurCarBTN + MargeBasPx + 30
    print:print "Prépa fenêtre - application des boutons"
    print "Prépa fenêtre - largeur fenêtre, avec marges : ";LargeurFenetre;" pixels"
    print "Prépa fenêtre - hauteur fenêtre, avec marges : ";HauteurFenetre;" pixels"
 
    'centrage et positionnement des statictexts et combobox
    Milieu = int(LargeurFenetre)/2
 
    'centrage du titre
    if centrageTitre = 1 then staticX(0)=int(LargeurFenetre)/2 - int((staticLargeur(0)/2))
    staticY(0) = staticY(0) + margeHaut
    'positionnement correct des statictexts
    for boucle = 1 to stxtext
        staticX(boucle) = staticX(boucle) + MargeGauchePx
        staticY(boucle) = staticY(boucle) + MargeHautPx
    next
 
    'positionnement correct des comboboxs
    for boucle = 0 to cmbbox
        comboX(boucle) = comboX(boucle) + MargeGauchePx
        comboY(boucle) = comboY(boucle) + MargeHautPx
    next
 
 
 
 
'end

 
 
 
'dimensions et position de la fenêtre

    'milieu de la fenêtre au milieu de l'écran
    'dimensions de l'écran
    LargeurEcran = DisplayWidth
    HauteurEcran = DisplayHeight
    'si les dimensions de la fenêtre sont supérieures aux dimensions de l'écran, la fenêtre sera de la dimension de l'écran
    'il me semble bien que des ascenseurs sont affichés pour parcourir l'intégralité de la fenêtre.
    'il ne devrait donc pas être nécessaire de se préoccuper de cette situation. A confirmer.

    'point haut gauche de la fenêtre dans l'écran

    'centre de l'écran
    CentreEcranX = int(LargeurEcran / 2)
    CentreEcranY = int(HauteurEcran / 2)
 
    'centre de la fenêtre
    CentreFenetreX = int(LargeurFenetre / 2)
    CentreFenetreY = int(HauteurFenetre / 2)
 
    'positionner la fenêtre
    UpperLeftX = CentreEcranX - CentreFenetreX
    UpperLeftY = CentreEcranY - CentreFenetreY
 
    'dimensionner la fenêtre
    WindowWidth = LargeurFenetre
    WindowHeight = HauteurFenetre
 
    'a faire : prévoir le cas où LargeurAffMax ou posy seraient plus grands que les dimensions de l'écran
    'WindowHeight = HauteurTotaleAffichage

    print:print "Prépa fenêtre - juste avant ouverture de fenêtre :"
    print "Prépa fenêtre - largeur fenêtre = ";WindowWidth
    print "Prépa fenêtre - hauteur fenêtre = ";WindowHeight
    print
 
 
'remplissage et affichage de la fenêtre
    open nomfichier$ for window as #fiche
 
        print "affichage fenêtre"
 
        print #fiche.corriger, fontebtn$
        print #fiche.refaire, fontebtn$
        print #fiche.quitter, fontebtn$
 
        for fonte = 0 to stxtext
            select case fonte
                case 0 : #fiche.tit, fontetit$
                case 1 : #fiche.text1, fontetex$
                case 2 : #fiche.text2, fontetex$
                case 3 : #fiche.text3, fontetex$
                case 4 : #fiche.text4, fontetex$
                case 5 : #fiche.text5, fontetex$
                case 6 : #fiche.text6, fontetex$
                case 7 : #fiche.text7, fontetex$ 
            end select
        next
 
 
        for fonte = 0 to cmbbox - 1
            select case fonte
                case 0 : print "combobox n° ";fonte : #fiche.cb0,fontecbx0$'
                case 1 : print "combobox n° ";fonte : #fiche.cb1,fontecbx1$
                case 2 : print "combobox n° ";fonte : #fiche.cb2,fontecbx2$
                case 3 : print "combobox n° ";fonte : #fiche.cb3,fontecbx3$
                case 4 : print "combobox n° ";fonte : #fiche.cb4,fontecbx4$
            end select
            'print "cmbbox = ";cmbbox;", combobox n° ";fonte;" affichée"
        next
 
    print #fiche, "trapclose [quit]"
 
    wait
 
'fin du programme, au cas où...
end
 
 
'******** zone des sous-programmes ********

[quit]
    print : print "[quit]"
    print fontebtn$
    close #fiche
    end
 
 
[corriger]
    print : print "[corriger]"
    for fonte = 0 to cmbbox - 1
        select case fonte
            case 0 : print "cb0" : #fiche.cb0,fontecbx0$ : print #fiche.stcb0, corrige0$
            case 1 : print "cb1" : #fiche.cb1,fontecbx1$ : print #fiche.stcb1, corrige1$ 
            case 2 : print "cb2" : #fiche.cb2,fontecbx2$ : print #fiche.stcb2, corrige2$ 
            case 3 : print "cb3" : #fiche.cb3,fontecbx3$ : print #fiche.stcb3, corrige3$ 
            case 4 : print "cb4" : #fiche.cb4,fontecbx3$ : print #fiche.stcb4, corrige4$
        end select
    next
 
    print #fiche.corriger, "!disable" 'une fois la correction effectuée, il faut redémarrer
    'l'exercice pour pouvoir le corriger à nouveau
    print fontebtn$
 
wait
 
 
[refaire]
    print : print "[refaire]"
 
    cmbboxmax = cmbbox 'cmbboxmax est le nombre maxi de combobox
    cmbbox = 0 'cmbbox est le combobox courant

    'refaire tous les combobox pour en changer le contenu

    'pour chaque combobox

    print "[refaire] - début boucle cmbbox, traitant successivement tous les combobox"
    for cmbbox = 0 to cmbboxmax - 1
 
        print "[refaire] - combobox en cours = ";cmbbox
        nbDonnees = comboNbDonnees(cmbbox)
 
        print "[refaire] - nombre de données dans la combobox = ";nbDonnees
        dim liste$(nbDonnees)
 
        print:print "[refaire] - récupération de la liste du combobox n° ";cmbbox
        for ad=0 to nbDonnees-1
        select case cmbbox
            case 0 : print "[refaire] - case 0, ";comboliste0$(ad) : liste$(ad) = comboliste0$(ad)
            case 1 : print "[refaire] - case 1, ";comboliste1$(ad) : liste$(ad) = comboliste1$(ad)
            case 2 : print "[refaire] - case 2, ";comboliste2$(ad) : liste$(ad) = comboliste2$(ad)
            case 3 : print "[refaire] - case 3, ";comboliste3$(ad) : liste$(ad) = comboliste3$(ad)
            case 4 : print "[refaire] - case 4, ";comboliste4$(ad) : liste$(ad) = comboliste4$(ad)
        end select
        next
 
        print:print "[refaire] - gosub [melangeliste]"
        gosub [melangeliste]
 
        print "[refaire] - Réattribution de la liste modifiée"
        select case cmbbox
                case 0 : print "[refaire] - case 0, réattribution de la liste modifiée, combobox n° = ";cmbbox
                         for abc=0 to nbDonnees-1:comboliste0$(abc) = liste$(abc):print "[refaire] - ";comboliste0$(abc):next
                         print #fiche.cb0,"reload"
                         #fiche.cb0, fontecbx$ : print #fiche.cb0, "! " : print #fiche.stcb0, ""
 
                case 1 : print "[refaire] - case 1, réattribution de la liste modifiée, combobox n° = ";cmbbox
                         for abc=0 to nbDonnees-1:comboliste1$(abc) = liste$(abc):print "[refaire] - ";comboliste1$(abc):next
                         print #fiche.cb1,"reload"
                         #fiche.cb1, fontecbx$ : print #fiche.cb1, "! " : print #fiche.stcb1, ""
 
                case 2 : print "[refaire] - case 2, réattribution de la liste modifiée, combobox n° = ";cmbbox
                         for abc=0 to nbDonnees-1:comboliste2$(abc) = liste$(abc):print "[refaire] - ";comboliste2$(abc):next
                         print #fiche.cb2,"reload"
                         #fiche.cb2, fontecbx$ : print #fiche.cb2, "! " : print #fiche.stcb2, ""
 
                case 3 : print "[refaire] - case 3, réattribution de la liste modifiée, combobox n° = ";cmbbox
                         for abc=0 to nbDonnees-1:comboliste3$(abc) = liste$(abc):print "[refaire] - ";comboliste3$(abc):next
                         print #fiche.cb3,"reload"
                         #fiche.cb3, fontecbx$ : print #fiche.cb3, "! " : print #fiche.stcb3, ""
 
                case 4 : print "[refaire] - case 4, réattribution de la liste modifiée, combobox n° = ";cmbbox
                         for abc=0 to nbDonnees-1:comboliste4$(abc) = liste$(abc):print "[refaire] - ";comboliste4$(abc):next
                         print #fiche.cb4,"reload"
                         #fiche.cb4, fontecbx$ : print #fiche.cb4, "! " : print #fiche.stcb4, ""
        end select
        print "[refaire] - fin du tour"
        print
    next
 
    print : print "[refaire] - fin boucle cmbbox, traitant successivement tous les combobox"
 
    print #fiche.corriger, "!enable" 'rendre opérationnel le bouton "corriger"
    print "[refaire] - ";fontebtn$
 
    print "[refaire] - fin"
    print
 
wait
 
 
[melangeliste]
                    'mélange de la liste
    print : print "[melangeliste]"
    tour = 0
    mot = 0
    'un tableau recense les tirages : si un nombre a déja été tiré on refait le tirage
    'pour chaque case du tableau, on tire au sort un numéro

    'tableau recensant les numéros déjà tirés
    nbrDonnee = comboNbDonnees(cmbbox)
    print "[melangeliste] - nbrDonnee = ";nbrDonnee
    dim tirages(nbrDonnee)
    dim tirages$(nbrDonnee)
 
    'remplissage du tableau avec des valeurs "-1" (pour faire la différence avec la valeur "zéro", qui n'est pas  neutre
    print "[melangeliste] - remplissage tableau des tirages avec -1 valeur vide"
    for aa = 0 to nbrDonnee -1
        tirages(aa)=-1
    next
 
    print "[melangeliste] - placer les mots à une position aléatoire dans le tableau"
 
    complet = 0
    print "[melangeliste] - début while, variable = complet"
    while complet = 0
 
        tour = tour + 1
        tir = int(rnd(1) * nbrDonnee)
        print "[melangeliste] - tir = ";tir
 
        if tirages(tir)=-1 then
 
            tirages(tir) = mot
            tirages$(mot)=liste$(tir)
            print "[melangeliste] - mot n°";mot;", tir n°";tir;" accepté, tirages(tir) = ";tirages(tir);", tirages$(tir) = ";tirages$(mot)'tir
            mot = mot + 1
        end if
 
        if mot = nbrDonnee or tour = 100 then print "[melangeliste] - fin du tour. mot = ";mot;", tour = ";tour : print : complet = 1
    wend
    print "[melangeliste] - liste mélangée :"
 
    print:print "[melangeliste] - liste mélangée :"
    for aa = 0 to nbDonnees - 1
        liste$(aa) = tirages$(aa)
        print "[melangeliste] - position : ";aa;",  contenu : ";liste$(aa)
    next
 
    print
 
return
 
 
[statictexts]
    print : print "[statictexts]"
    select case stxtext
 
        case 0 : statictext #fiche.tit, staticChaine$(0), staticX(0),  staticY(0), staticLargeur(0), staticHauteur(0)
        case 1 : statictext #fiche.text1, staticChaine$(1), staticX(1),  staticY(1), staticLargeur(1), staticHauteur(1)
        case 2 : statictext #fiche.text2, staticChaine$(2), staticX(2),  staticY(2), staticLargeur(2), staticHauteur(2)
        case 3 : statictext #fiche.text3, staticChaine$(3), staticX(3),  staticY(3), staticLargeur(3), staticHauteur(3)
        case 4 : statictext #fiche.text4, staticChaine$(4), staticX(4),  staticY(4), staticLargeur(4), staticHauteur(4)
        case 5 : statictext #fiche.text5, staticChaine$(5), staticX(5),  staticY(5), staticLargeur(5), staticHauteur(5)
        case 6 : statictext #fiche.text6, staticChaine$(6), staticX(6),  staticY(6), staticLargeur(6), staticHauteur(6)
        case 7 : statictext #fiche.text7, staticChaine$(7), staticX(7),  staticY(7), staticLargeur(7), staticHauteur(7)
     end select
 
return
 
 
[comboboxes]
    print : print "[comboboxes]"
    print "[comboboxes] - cmbbox = ";cmbbox
    print : print "[comboboxes] - select case cmbbox"
    select case cmbbox
 
        case 0
            print "[comboboxes] - case 0"
            for cbx = 0 to nbrDonnee - 1 : comboliste0$(cbx) = liste$(cbx) :print "liste = ";liste$(cbx);" = ";comboliste0$(cbx): next
            combobox #fiche.cb0, comboliste0$(), [cb0], comboX(0), comboY(0), comboLargeur(0), comboHauteur(0)
            statictext #fiche.stcb0, "", comboX(0), comboY(0) + interligneReponse, comboLargeur(0), comboHauteur(0)
 
            motJuste0$=motJuste$
            fontecbx0$=fontecbx$
 
        case 1
            print "[comboboxes] - case 1"
            for cbx = 0 to nbrDonnee - 1 : comboliste1$(cbx) = liste$(cbx) : next
            combobox #fiche.cb1, comboliste1$(), [cb1], comboX(1), comboY(1), comboLargeur(1), comboHauteur(1)
            statictext #fiche.stcb1, "", comboX(1), comboY(1) + interligneReponse, comboLargeur(1), comboHauteur(1)
 
            motJuste1$=motJuste$
            fontecbx1$=fontecbx$
 
        case 2
            print "[comboboxes] - case 2"
            for cbx = 0 to nbrDonnee - 1 : comboliste2$(cbx) = liste$(cbx) : next
            combobox #fiche.cb2, comboliste2$(), [cb2], comboX(2), comboY(2), comboLargeur(2), comboHauteur(2)
            statictext #fiche.stcb2, "", comboX(2), comboY(2) + interligneReponse, comboLargeur(2), comboHauteur(2)
 
            motJuste2$=motJuste$
            fontecbx2$=fontecbx$
 
        case 3
            print "[comboboxes] - case 3"
            for cbx = 0 to nbrDonnee - 1 : comboliste3$(cbx) = liste$(cbx) : next
            combobox #fiche.cb3, comboliste3$(), [cb3], comboX(3), comboY(3), comboLargeur(3), comboHauteur(3)
            statictext #fiche.stcb3, "", comboX(3), comboY(3) + interligneReponse, comboLargeur(3), comboHauteur(3)
 
            motJuste3$=motJuste$
            fontecbx3$=fontecbx$
 
        case 4
            print "[comboboxes] - case 3"
            for cbx = 0 to nbrDonnee - 1 : comboliste3$(cbx) = liste$(cbx) : next
            combobox #fiche.cb4, comboliste4$(), [cb4], comboX(4), comboY(4), comboLargeur(4), comboHauteur(4)
            statictext #fiche.stcb3, "", comboX(4), comboY(4) + interligneReponse, comboLargeur(4), comboHauteur(4)
 
            motJuste4$=motJuste$
            fontecbx4$=fontecbx$
    end select
    print "[comboboxes] - fin select case"
    print "[comboboxes] - fin combo, return"
 
return
 
 
[cb0]
    print
    print "[cb0] - ce qui se passe quand on a choisi le mot dans CB0"
    'on vérifie le choix de l'utilisateur

    'on extrait le choix de l'utilisateur
    print #fiche.cb0, "contents? choix$"
    print "[cb0] - choix de l'utilisateur : ";choix$
    print "[cb0] -          bonne réponse = ";motJuste0$
 
    'on compare le choix au réel
    if choix$ = motJuste0$ then
        print "[cb0] - bonne réponse"
        'résultat juste, fonte normale
        cb0Resultat = 1
        fontecbx0$ = fontecbx$
        corrige0$ = ""
    else
        'résultat faux, fonte barrée
        'motJuste0$
        print #fiche.stcb0,fonteexp$
 
        print "[cb0] - réponse erronnée"
        cb0Resultat = 0
        fontecbx0$=fontecbx$+" strikeout"
        corrige0$ = comboMotJuste$(0)
    end if
    print "[cb0] - en [cb0] on a : ";fontecbx0$
 
    wait
 
 
[cb1]
    print
    print "[cb1] - ce qui se passe quand on a choisi le mot dans CB1"
    'on vérifie le choix de l'utilisateur

    'on extrait le choix de l'utilisateur
    print #fiche.cb1, "contents? choix$"
    print "[cb1] - choix de l'utilisateur : ";choix$
    print "[cb1] -          bonne réponse = ";motJuste1$
 
    'on compare le choix au réel
    if choix$ = motJuste1$ then
        print "[cb1] - bonne réponse"
        'résultat juste, fonte normale
        cb1Resultat = 1
        fontecbx1$=fontecbx$
        corrige1$ = ""
    else
        'résultat faux, fonte barrée
        print "[cb1] - réponse erronnée"
        print #fiche.stcb1,fonteexp$
        cb1Resultat = 0
        fontecbx1$=fontecbx$+" strikeout"
        corrige1$ = comboMotJuste$(1)
    end if
    print "[cb1] - en [cb1] on a : ";fontecbx1$
    wait
 
 
[cb2]
    print
    print "[cb2] - ce qui se passe quand on a choisi le mot dans CB2"
    'on vérifie le choix de l'utilisateur

    'on extrait le choix de l'utilisateur
    print #fiche.cb2, "contents? choix$"
    print "[cb2] - choix de l'utilisateur : ";choix$
    print "[cb2] -          bonne réponse = ";motJuste2$
 
    'on compare le choix au réel
    if choix$ = motJuste2$ then
        print "[cb2] - bonne réponse"
        'résultat juste, fonte normale
        cb2Resultat = 1
        fontecbx2$=fontecbx$
        corrige2$ = ""
    else
        'résultat faux, fonte barrée
        print "[cb2] - réponse erronnée"
        print #fiche.stcb2,fonteexp$
        cb2Resultat = 0
        fontecbx2$=fontecbx$+" strikeout"
        corrige2$ = comboMotJuste$(2)
    end if
    print "[cb2] - en [cb2] on a : ";fontecbx2$
    wait
 
 
[cb3]
    print
    print "[cb3] - ce qui se passe quand on a choisi le mot dans CB3"
    'on vérifie le choix de l'utilisateur

    'on extrait le choix de l'utilisateur
    print #fiche.cb3, "contents? choix$"
    print "[cb3] - choix de l'utilisateur : ";choix$
    print "[cb3] -          bonne réponse = ";motJuste3$
 
    'on compare le choix au réel
    if choix$ = motJuste3$ then
        print "[cb3] - bonne réponse"
        'résultat juste, fonte normale
        cb3Resultat = 1
        fontecbx3$=fontecbx$
        corrige3$ = ""
    else
        'résultat faux, fonte barrée
        print "[cb3] - réponse erronnée"
        print #fiche.stcb3,fonteexp$
        cb3Resultat = 0
        fontecbx3$=fontecbx$+" strikeout"
        corrige3$ = comboMotJuste$(3)
    end if
    print "[cb3] - en [cb3] on a : ";fontecbx3$
    wait
 
 
[cb4]
    print
    print "[cb4] - ce qui se passe quand on a choisi le mot dans CB4"
    'on vérifie le choix de l'utilisateur

    'on extrait le choix de l'utilisateur
    print #fiche.cb4, "contents? choix$"
    print "[cb4] - choix de l'utilisateur : ";choix$
    print "[cb4] -          bonne réponse = ";motJuste3$
 
    'on compare le choix au réel
    if choix$ = motJuste4$ then
        print "[cb4] - bonne réponse"
        'résultat juste, fonte normale
        cb4Resultat = 1
        fontecbx4$=fontecbx$
        corrige4$ = ""
    else
        'résultat faux, fonte barrée
        print "[cb4] - réponse erronnée"
        print #fiche.stcb4,fonteexp$
        cb4Resultat = 0
        fontecbx4$=fontecbx$+" strikeout"
        corrige4$ = comboMotJuste$(3)
    end if
    print "[cb4] - en [cb4] on a : ";fontecbx4$
    wait
 
 
 
 
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 10/03/2015 à 22h51

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2252
J'ai tenté un truc, mais ça ne marche pas.
Par contre il me semble que
Dans ta boucle 4 des combos, et dans la ligne:
for cbx = 0 to nbrDonnee - 1 : comboliste3$(cbx) = liste$(cbx) : next

Il faudrait peut-être: comboliste4$(cbx)
Au lieu de: comboliste3$(cbx)

Ou me trompe-je ?


.
____________________
Roro

   
Le 12/03/2015 à 15h43

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 612
Observateur ? Bien vu, il y a eu du copier-coller, et une modif oubliée, en effet. Au moins je peux maintenant préparer plus de combobox que nécessaire, la précédente version ne le permettait pas (4 combobox, n°0 à 3).

Merci de t'être penché sur mon code.

Je laisse en l'état le temps de réaliser le plan, à la fois pour clarifier les idées, et voir ce qui peut être simplifié. On aura alors une bonne base pour étudier le problème du fonctionnement erratique des combobox. Seul problème, j'ai davantage l'expérience d'un code linéaire qui va du début à la fin, alors que gérer des combobox n'a rien de linéaire, on peut cliquer dessus à n'importe quel moment, et je ne sais pas comment représenter de manière "parlante" ce genre de comportement/composant sur un schéma.

A+
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 12/03/2015 à 18h39

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2252
Bah, le clic dans un combo, ça n'est jamais qu'un branchement à un sous programme
Avec passation de paramètre ( l'item cliqué)

J'ai essayé de créer les combos dans une boucle en utilisant la rotation de handle (hand$="#...")
Mais ça coince avec la définition du tableau associé (syntaxe introuvable et peut-être impossible)
ça m'a bien râler...Parce qu'avec cette méthode, on pourrait créer les combos à la demande

Mine de rien, c'est un sacré morceau ton code.
____________________
Roro

   
Le 14/03/2015 à 09h27

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Bonjour Christophe et Roland,

je me permet de poster car je trouve le programme de Christophe très intéressant et plein de défis...
Malheureusement ça fait pas mal de temps que j'ai arrêté de coder en JustBasic et je suis bien en peine de me rappeler toutes ses subtilitées...

Si je peux me permettre de donner mon point de vue tout de même...
Ne m'en veuillez pas si je dis quelques carabistouilles ;)

Voici comment je verais bien les choses :

- première fenêtre en ouvrant le programme : un selecteur de fichier pointant directement dans le répertoire des fichiers des textes. (1 fichier par texte)
( d'ailleurs je ne nommerai pas forcément les fichiers *.txt, mais peut-être une extension propriétaire... comme *.poe ou autre...)
- les textes formatés ainsi :

"Le Corbeau et le Renard" [première ligne est toujours le titre]
"Maître (Corbeau*Loup*Renard*Souriceau*Lion) sur un arbre (perché*en fleur*déraciné*feuillu*magnifique) tenait en son bec un fromage."
"Maître Renard, à l'odeur (alléchée*rouge vif*bleue*puissante*sereine*assurée) lui tint à peu près ce langage."
"Hé ! bonjour, Monsieur du (Corbeau*Courneau*Bigorneau*Cours d'Eau) que vous êtes joli ! que vous me semblez beau !"

où les parenthèses signifient que ces mots feront partie d'une liste dans un combobox, et donc à trouver... le premier (par exemple) étant toujours le bon pour le code. le * étant le séparateur utilisé par la commande WORD$().
Ensuite on respecte les lignes pour les afficher. Il faut donc être précis lors de la fabrication de ces textes...

- je privilégirais plutôt l'affichage entièrement graphique du texte afin de s'affranchir du problème titre qui préoccupe Christophe c'est à dire la création des objets graphiques dont on ne connait à priori pas le nombre...

- la mise en page est évidemment plutôt coton !!!
- Par contre il n'y aurait QU'UN SEUL COMBOBOX.
En effet le joueur ne peux pas en utiliser 2 au même moment. Hors dans les paramètres d'un combobox il y a tout ce qu'il faut pour changer sa position à l'écran ainsi que son contenu...
Il devra donc se positionner par dessus le texte à trouver qui sera représenté par des étoiles par exemple ******* et remplacé par le mot (pourquoi pas coloré) issu de la sélection du combobox le moment venu... c a d dès que le joueur clique sur la zone d'un mot à trouver.

- une indication claire de la réussite par un "BRAVO !" quelque part (ou "ECHEC!"), et bien sûr les boutons pour donner les choix voulus ainsi que celui de changer de fichier texte...
Dans ce cas il suffit de cloturer la fenêtre en cours puis de re-proposer le sélecteur de fichier initial et on recommence... en fait on vient de boucler sur le tout début du code...!

Roland: as-tu essayé ta boucle de création des objets graphiques en sortant le # de la chaine fabriqué et en le mettant devant ?

@+

Gilles.



Edité par cassiope01 Le 23/03/2015 à 19h26
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 14/03/2015 à 12h28

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2252
Bonjour Gilles,
Je suis sacrément content de voir que tu a enfin craqué.
Par le code de Christophe alléché
Car depuis le donjon, je vois tes visites datées
J'ai fais je ne sais combien de messages, mais au moment de te contacter en mp, je me suis chaque fois dégonflé.
J'ai aussi été voir ce que tu bricolais sur RFO
Bref...
Concernant le code de Christophe:
Il est vrai qu'un affichage graphique serait judicieux. et en écartant suffisamment les lignes avec ajout d'un mini bouton (puisque de toutes façons, il faut cliquer pour dérouler le combo), on peut même envisager d'abandonner les combobox. sans changer la présentation (puisqu''en comptant les caractères, on peut avoir les coordonnées d'affichages. Mais c'est une autre philosophie.

La mise en fichier du texte et son balisage ne présente guère de difficulté vu le niveau de Christophe.

Pour la rotation de handle, c'est sûr que je vais encore tenter quelques syntaxes improbables.
La difficulté est de faire tourner le nom du tableau associé (qui lui, n'est pas un handle)
C'est de haute magouille syntaxique.

Te souhaitant bonne journée et bonne suite.
@ ++ peut-être ?

.
____________________
Roro

   
Le 14/03/2015 à 12h45

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Salut Roland,

Pas besoin de mini bouton et certainement pas laisser tomber le combobox car c'est sûrement la meilleure façon de donner un choix au joueur.
Par contre il faut bien évidemment connaitre les coordonnées graphiques de chaque mots à trouver...

Quoi qu'il en soit, dans ma proposition, il n'y a plus qu'un seul combobox "utilitaire" et autant de fichiers textes différents à appeler à volonté lors du jeux.
Il n'est plus nécessaire d'anticiper la déclaration d'un nombre inconnu d'objets graphiques...

Tout semble plus "simple" :top

Bon courage à Christophe.



Edité par cassiope01 Le 14/03/2015 à 16h14
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 14/03/2015 à 16h00

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2252
J'avoue que je suis perplexe sur l'utilisation d'un seul combo à la place de plusieurs
Qui doivent êtres présent en même temps à plusieurs endroits
Mais bon, je te sais capable de choses pour le moins étonnantes
____________________
Roro

   
Le 14/03/2015 à 17h03

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Pour l'objet graphique déplacé à la demande il y avait ce code : GUI_GAUSS-JORDAN.bas
et pour le selecteur de fichier au début puis fermeture de la fenêtre graphique principale puis retour à nouveau dans le sélecteur de fichier il y avait cet exemple là : List_Func_Label.bas (bien utile d'ailleurs ;) )
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 14/03/2015 à 18h28

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2252
Ah oui, en déplaçant le combo quand la réponse a été donnée.
Ce forum est une mine :)
____________________
Roro

   
Le 23/03/2015 à 14h22

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 612
Bonjour tout le monde,

Pardonnez-moi j'ai loupé des interventions, je me fiais à la date du post en pensant que j'avais posté le 14, donc du coup je ne venais pas voir...

Je reprend le problème par où il aurait fallu que je commence : établir un schéma logique de l'application avant de la coder^^.

Voilà un aperçu qui va déjà m'alléger la boucle de dessin des fiches en mettant en sous-programme la préparatrion à l'affichage des titres, lignes, combo, etc...
organigramme.pdf

Le schéma est un peu surprenant car je mélange encore le schéma, qui doit être de la logique pure, avec le programme qui utilise des instructions, mais je pense m'en sortir. Et puis là c'est un test de faisabilité, avec le module Draw de LibreOffice.

Je vous tiens au courant (et merci pour les suggestions).



Edité par Christophe Le 23/03/2015 à 14h24
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie