Forum Liberty Basic France
• Index
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 :
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 occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
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)
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
Roro
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 :
Note; Si tu mets des nombres (positions des combobox) dans ton texte,
Il faudra les extraire en passant par:
Code VB :
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
Roro
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 ?
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 occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
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.
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
Roro
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.
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.

____________________
Roro
Roro
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
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 occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
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" ?
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 occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
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).
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
Roro
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 :
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 occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
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 ?
.
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
Roro
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+
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 occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
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.
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
Roro
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
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."
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
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 ?
.
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
Roro
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"
Bon courage à Christophe.
Edité par cassiope01 Le 14/03/2015 à 16h14
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"

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."
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
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
Qui doivent êtres présent en même temps à plusieurs endroits
Mais bon, je te sais capable de choses pour le moins étonnantes
____________________
Roro
Roro
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
)
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."
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
Ah oui, en déplaçant le combo quand la réponse a été donnée.
Ce forum est une mine
Ce forum est une mine

____________________
Roro
Roro
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
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 occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie