Forum Liberty Basic France : Voir tous les messages du membre
• Index
Dans le principe, ça fonctionnerait mieux comme ça, mais il faudrait essayer de mieux contrôler le combobox...ou bien utiliser une Listbox ?
Code VB :
Code VB :
'détection de souris sur plusieurs zones d'une fenêtre nomainwin 'définir la fenêtre ' (dimensions modifiées par des coefficients allant de 0 à 1 inclus) 'dimensions de la fenêtre WindowWidth = int(DisplayWidth * 0.6) WindowHeight = int(DisplayHeight * 0.6) 'position de l'angle supérieur gauche de la fenêtre sur l'écran UpperLeftX = int(DisplayWidth * 0.2) UpperLeftY = int(DisplayHeight * 0.2) 'position des écritures « position pointeur » XLigneAffichage = int(WindowWidth * 0.05) YLigneAffichage = int(WindowHeight * 0.05) 'position et dimension des zones dans lesquelles on devra détecter la souris ' on définit ici le point supérieur gauche et le point inférieur droit de la zone ' axes de référence : bords droit et haut de la fenêtre Zone1XHautGauche = int(WindowWidth * 0.3) Zone1YHautGauche = int(WindowHeight * 0.3) Zone1XBasDroite = Zone1XHautGauche + int(WindowWidth * 0.5) Zone1YBasDroite = Zone1YHautGauche + int(WindowHeight * 0.5) couleur1$ = "darkgreen" Zone2XHautGauche = int(WindowWidth * 0.15) Zone2YHautGauche = int(WindowHeight * 0.11) Zone2XBasDroite = Zone2XHautGauche + int(WindowWidth * 0.2) Zone2YBasDroite = Zone2YHautGauche + int(WindowHeight * 0.15) couleur2$ = "red" Zone3XHautGauche = int(WindowWidth * 0.09) Zone3YHautGauche = int(WindowHeight * 0.36) Zone3XBasDroite = Zone3XHautGauche + int(WindowWidth * 0.09) Zone3YBasDroite = Zone3YHautGauche + int(WindowHeight * 0.08) couleur3$ = "blue" 'ouvrir la fenêtre en mode graphique (la lecture de la souris ne marche pas en mode window 'il semblerait d'ailleurs qu'il y ait un monde entre ces deux univers) aa=-480 :bb=30 dim mots$(10,3), array$(10) graphicbox #fenetre1.gra, 20,20,WindowWidth-40,WindowHeight-60 listbox #fenetre1.ext, array$(), [event], aa, bb, 100, 100 OPEN "souris sur zone ?" for window_nf as #fenetre1 #fenetre1 "trapclose [quit]" 'affichage du texte "bougez la souris !" #fenetre1.gra, "color black" #fenetre1.gra, "down" #fenetre1.gra, "place ";XLigneAffichage;" ";YLigneAffichage #fenetre1.gra, "\Bougez la souris !" 'dessin des zones 'zone 1 #fenetre1.gra, "place ";Zone1XHautGauche;" ";Zone1YHautGauche #fenetre1.gra, "backcolor " + couleur1$ #fenetre1.gra, "boxfilled ";Zone1XBasDroite;" ";Zone1YBasDroite 'zone 2 #fenetre1.gra, "place ";Zone2XHautGauche;" ";Zone2YHautGauche #fenetre1.gra, "backcolor " + couleur2$ #fenetre1.gra, "boxfilled ";Zone2XBasDroite;" ";Zone2YBasDroite 'zone 3 #fenetre1.gra, "place ";Zone3XHautGauche;" ";Zone3YHautGauche #fenetre1.gra, "backcolor " + couleur3$ #fenetre1.gra, "boxfilled ";Zone3XBasDroite;" ";Zone3YBasDroite #fenetre1.gra, "backcolor white" #fenetre1.gra "flush : discard" #fenetre1.gra, "when mouseMove [souris_se_deplace]" mot$(1,1) = "Corbeau" mot$(2,1) = "Loup" mot$(3,1) = "Renard" mot$(4,1) = "Corbeau" mot$(5,1) = "Souriceau" mot$(6,1) = "Lion" mot$(1,2) = "perché" mot$(2,2) = "en fleur" mot$(3,2) = "déraciné" mot$(4,2) = "perché" mot$(5,2) = "feuillu" mot$(6,2) = "magnifique" mot$(1,3) = "alléchée" mot$(2,3) = "rouge vif" mot$(3,3) = "bleue" mot$(4,3) = "alléchée" mot$(5,3) = "puissante" mot$(6,3) = "sereine" 'attente… wait '******** zone des sous-programmes ******** [quit] 'fermeture sans confirmation et par le gadget de fermeture de la fenetre print "[quit]" close #fenetre1 end [souris_se_deplace] X = MouseX : Y = MouseY aa=-480 :bb=30 'le pointeur est-il dans la zone ? zone = 0 if X > Zone1XHautGauche and X < Zone1XBasDroite and Y > Zone1YHautGauche and Y < Zone1YBasDroite then zone = 1 if X > Zone2XHautGauche and X < Zone2XBasDroite and Y > Zone2YHautGauche and Y < Zone2YBasDroite then zone = 2 if X > Zone3XHautGauche and X < Zone3XBasDroite and Y > Zone3YHautGauche and Y < Zone3YBasDroite then zone = 3 select case zone case 0 afficher$ = "La souris est hors-zone " couleur$ = "black" case 1 afficher$ = "La souris est dans la zone 1 " couleur$ = couleur1$ aa=Zone1XHautGauche+22 bb=Zone1YHautGauche+22 for m=1 to 6 array$(m) = mot$(m,1) next case 2 afficher$ = "La souris est dans la zone 2 " couleur$ = couleur2$ aa=Zone2XHautGauche+22 bb=Zone2YHautGauche+22 for m=1 to 6 array$(m) = mot$(m,2) next case 3 afficher$ = "La souris est dans la zone 3 " couleur$ = couleur3$ aa=Zone3XHautGauche+22 bb=Zone3YHautGauche+22 for m=1 to 6 array$(m) = mot$(m,3) next end select #fenetre1.ext "reload" #fenetre1 "refresh" 'affichage de la position du pointeur et de l'information "en/hors zone" #fenetre1.gra, "color black" #fenetre1.gra, "place ";XLigneAffichage;" ";YLigneAffichage #fenetre1.gra, "\Pos X = ";X;", Pos Y = ";Y;" " #fenetre1.gra, "place ";XLigneAffichage;" ";YLigneAffichage + 20 #fenetre1.gra, "color " + couleur$ #fenetre1.gra, "\" + afficher$ wait
Voyons Roland ! non seulement encore une fois tu te fais une montagne d'un caillou mais en plus tu fais peur à Christophe
c'est malin ça


Salut vous deux,
il y aurait peut-être une autre piste intéressante (et peut-être plus courte à l'usage ?) : spritecollides (voir le paragraphe Drawing and Collision Detection dans l'aide)
- on crée un petit sprite de 1 pixel
- ce sprite suivra la souris tout le temps.
- on crée autant de sprites blanc à l'emplacement des zones à détecter (un rectangle blanc)
- en utilisant spritecollides on connait le sprite que le petit sprite qui suit la souris vient de percuter...
- on détermine la position du sprite rencontré avec spritexy? je crois bien,
- on déplace le combobox à cette position
et le tour est joué...
@+
Gilles
il y aurait peut-être une autre piste intéressante (et peut-être plus courte à l'usage ?) : spritecollides (voir le paragraphe Drawing and Collision Detection dans l'aide)
- on crée un petit sprite de 1 pixel
- ce sprite suivra la souris tout le temps.
- on crée autant de sprites blanc à l'emplacement des zones à détecter (un rectangle blanc)
- en utilisant spritecollides on connait le sprite que le petit sprite qui suit la souris vient de percuter...
- on détermine la position du sprite rencontré avec spritexy? je crois bien,
- on déplace le combobox à cette position
et le tour est joué...
@+
Gilles
Christophe:
Mon code actuel ne me plaît pas, donc aucun regret à le refondre
Donc je ne pensais pas que debugger ton code actuel était ta priorité, ni que tu n'en avais plus vraiment besoin en fait
Personnellement je ne suis pas convaincu que passer des heures à chercher le grain de sable qui grippe les rouages soit le plus passionnant dans la programmation, au contraire... c'est souvent ce qui pourrait écoeurer
j'ai réçemment passer environ 10 heures (sur plusieurs jours bien sûr) à chercher (et trouver) un bug stupide qui m'a mis plutôt en colère
Surtout que je ne programme QUE pour le fun
donc en principe pour mon plaisir...
Je trouve que la programmation c'est tout à fait comme pour un artisan menuisier par exemple, cela nécessite pas mal de réflexion en amont sur la faisabilité avec les outils dont on dispose, la maitrise parfaite du cahier des charges car les surprises peuvent être catastrophiques, mais tout en essayant de garder une certaine souplesse au cas où
et aussi beaucoup d'astuce et l'esprit très ouvert pour pouvoir apprendre sans arrêt, mais quel plaisir de voir fonctionner le produit fini
parfois même mieux qu'on l'imaginais...
Bon courage et bonne continuation
Gilles.
Mon code actuel ne me plaît pas, donc aucun regret à le refondre

Donc je ne pensais pas que debugger ton code actuel était ta priorité, ni que tu n'en avais plus vraiment besoin en fait

Personnellement je ne suis pas convaincu que passer des heures à chercher le grain de sable qui grippe les rouages soit le plus passionnant dans la programmation, au contraire... c'est souvent ce qui pourrait écoeurer


Surtout que je ne programme QUE pour le fun

Je trouve que la programmation c'est tout à fait comme pour un artisan menuisier par exemple, cela nécessite pas mal de réflexion en amont sur la faisabilité avec les outils dont on dispose, la maitrise parfaite du cahier des charges car les surprises peuvent être catastrophiques, mais tout en essayant de garder une certaine souplesse au cas où


Bon courage et bonne continuation
Gilles.
Aurais-tu essayé ce genre de truc :
Code VB :
Code VB :
DIM chain$(12,5) for cb = 1 to 5 hdle$ = "h.ext"+str$(cb) COMBOBOX #hdle$, chain$(12,cb), [event], 110, 30, 80, 30 next
Christophe:
Je n'ai pas pensé qu'on pouvait ouvrir la fenêtre graphique avant de lire le fichier, il serait alors possible pour le programme de définir directement les combobox au fur et à mesure qu'on les trouve dans le fichier, puisqu'on sera après l'open window, mais la difficulté n'est pas là.
Je penses que ta confusion serait peut-être plutôt là
J'ai bien peur que tu ne puisses rien définir APRES la commande OPEN.
Tu peux simplement manipuler (pourquoi pas de la façon que tu décris et que j'ai aussi beaucoup utilisée car très pratique) les objets DEJA déclarés AVANT la commande OPEN. Cette 'déclaration' d'objets graphiques ou de contrôle obligatoirement faite AVANT la commande OPEN (afin que celle-ci sache ce dont elle va devoir s'occuper) ne supporte pas cette syntaxe chaînée...
Tout langage a ses limites...
Reste à savoir comment parvenir à ton but avec les outils dont tu disposes. Si tu penses que celui-ci ne te permettra pas d'y parvenir, alors il te faudra essayer un autre langage dont tu penses qu'il te permettra de faire ce que tu veux.
Mais sincèrement, si tu ne perd pas de vue ton objectif, avec un peu d'astuce et de souplesse dans ton cahier des charges (et encore ! je n'en suis pas si sûr), je penses qu'avec JB tu peux vraiment parvenir à tes fins...
Dis moi si tu n'a pas bien compris quoi que ce soit dans mon premier post. N'hésite pas. J'y décris une chronologie qui devrait satisfaire à ton cahier des charges... ainsi qu'un formatage légèrement différent du contenu des fichiers textes, mais peut-être plus simple (plus besoin de suffixes ou autre
)
Si tu n'as besoin que de manipuler qu'un seul COMBOBOX mobile, tu n'as plus besoin d'en déclarer plusieurs (inconnus en nombre)...
Si tu écris le texte sous forme graphique dans la fenêtre graphique : plus besoin non plus d'un nombre inconnu de STATICTEXT...
Je ne vois donc pas où serait le problème ?
@+
Gilles.
Je n'ai pas pensé qu'on pouvait ouvrir la fenêtre graphique avant de lire le fichier, il serait alors possible pour le programme de définir directement les combobox au fur et à mesure qu'on les trouve dans le fichier, puisqu'on sera après l'open window, mais la difficulté n'est pas là.
Je penses que ta confusion serait peut-être plutôt là

J'ai bien peur que tu ne puisses rien définir APRES la commande OPEN.
Tu peux simplement manipuler (pourquoi pas de la façon que tu décris et que j'ai aussi beaucoup utilisée car très pratique) les objets DEJA déclarés AVANT la commande OPEN. Cette 'déclaration' d'objets graphiques ou de contrôle obligatoirement faite AVANT la commande OPEN (afin que celle-ci sache ce dont elle va devoir s'occuper) ne supporte pas cette syntaxe chaînée...
Tout langage a ses limites...
Reste à savoir comment parvenir à ton but avec les outils dont tu disposes. Si tu penses que celui-ci ne te permettra pas d'y parvenir, alors il te faudra essayer un autre langage dont tu penses qu'il te permettra de faire ce que tu veux.
Mais sincèrement, si tu ne perd pas de vue ton objectif, avec un peu d'astuce et de souplesse dans ton cahier des charges (et encore ! je n'en suis pas si sûr), je penses qu'avec JB tu peux vraiment parvenir à tes fins...

Dis moi si tu n'a pas bien compris quoi que ce soit dans mon premier post. N'hésite pas. J'y décris une chronologie qui devrait satisfaire à ton cahier des charges... ainsi qu'un formatage légèrement différent du contenu des fichiers textes, mais peut-être plus simple (plus besoin de suffixes ou autre

Si tu n'as besoin que de manipuler qu'un seul COMBOBOX mobile, tu n'as plus besoin d'en déclarer plusieurs (inconnus en nombre)...
Si tu écris le texte sous forme graphique dans la fenêtre graphique : plus besoin non plus d'un nombre inconnu de STATICTEXT...
Je ne vois donc pas où serait le problème ?
@+
Gilles.
Christophe:
Aurais-je rêvé, mais Il me semble bien avoir vu sur un forum un type qui avait réussi à définir ses comboboxes avec une chaine de caractères, ce qui aurait été très commode pour les nommer "à la volée". Je ne retrouve pas cette discussion, et ici sur mon ordi, JB ne veut même pas entendre parler de cette manip. Roland, était-ce ce que tu voulais faire ici (posts du 12/03/15 à 18h39 et du 14/03/15 à 12h28)"Pour la rotation de handle, c'est sûr que je vais encore tenter quelques syntaxes improbables". As-tu réussi à obtenir quelque chose ?
A+
Christophe.
Salut Christophe,
de mémoire il me semble bien que ce genre de manip peut tout à fait se faire APRES la commmande OPEN mais n'est pas acceptée AVANT...
Ce serait l'explication.
Dans ton cas, je n'en vois toujours pas l'utilité mais je n'ai peut-être pas tout saisi...
Comme je te l'ai exposé, les mots à découvrir peuvent tout à fait être des "*******" au départ, et lorsque ta victime le souhaite, elle clique sur un de ces emplacement (celui qu'elle veut) et le combobox apparait à cet endroit afin qu'elle fasse son choix.
Bon courage.
Gilles.
Aurais-je rêvé, mais Il me semble bien avoir vu sur un forum un type qui avait réussi à définir ses comboboxes avec une chaine de caractères, ce qui aurait été très commode pour les nommer "à la volée". Je ne retrouve pas cette discussion, et ici sur mon ordi, JB ne veut même pas entendre parler de cette manip. Roland, était-ce ce que tu voulais faire ici (posts du 12/03/15 à 18h39 et du 14/03/15 à 12h28)"Pour la rotation de handle, c'est sûr que je vais encore tenter quelques syntaxes improbables". As-tu réussi à obtenir quelque chose ?
A+
Christophe.
Salut Christophe,
de mémoire il me semble bien que ce genre de manip peut tout à fait se faire APRES la commmande OPEN mais n'est pas acceptée AVANT...
Ce serait l'explication.
Dans ton cas, je n'en vois toujours pas l'utilité mais je n'ai peut-être pas tout saisi...
Comme je te l'ai exposé, les mots à découvrir peuvent tout à fait être des "*******" au départ, et lorsque ta victime le souhaite, elle clique sur un de ces emplacement (celui qu'elle veut) et le combobox apparait à cet endroit afin qu'elle fasse son choix.
Bon courage.
Gilles.
Et oui, vu ton post, j'ai bien cru que je ne m'étais pas très bien exprimé, et que tu n'avais pas vraiment compris la porté de la solution que je proposais...
Mais je suis désolé, cela implique une refonte presque complète de ton code... mais là est le plaisir n'est-ce pas
@+
Gilles.

Mais je suis désolé, cela implique une refonte presque complète de ton code... mais là est le plaisir n'est-ce pas

@+
Gilles.
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

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.
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.
• 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é