Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 1396
Réponses : 19
Type : discussion
Etat : réponses autorisées

Menu graphique

Programaths le 06/05/2011 à 12:44
voila je vous montre le debut je voudrai savoir comment faire un menu graphique a partir de ça :

Code

Lbl 0
0->Xmin
0->Ymin
94->Xmax
62->Ymax
PlotsOff
AxesOff
GridOff
FnOff
Fulm
Lbl 1
ClrDraw
Line(65,8,94,8
Text(55,60,"graphique
Line(50,0,94,0
Line(28,50,55,50
Text(13,30,"progrm
Line(28,42,70,42
Text(1,5,"menu
Line(2,61,24,61
Line(25,60,25,30
Line(24,29,2,29
Line(1,30,1,60
Line(2,54,24,54
For(X,0,2
Text(8X+9,6,sub("new loadquit",4X+1,4
end

Programaths le 06/05/2011 à 12:52
a et new loasquit remplacer par lbl1lbl2lbl3
Programaths le 06/05/2011 à 13:56
voila j'ai trouvé:

Code


Lbl 0
0->Xmin
0->Ymin
94->Xmax
62->Ymax
PlotsOff
AxesOff
GridOff
FnOff
Fulm
Lbl 1
ClrDraw
Line(65,8,94,8
Text(55,60,"graphique
Line(50,0,94,0

Line(28,50,55,50
Text(13,30,"progrm
Line(28,42,70,42

Text(1,5,"menu
Line(2,61,24,61
Line(25,60,25,30
Line(24,29,2,29
Line(1,30,1,60
Line(2,54,24,54
For(X,0,2
Text(8X+9,6,sub("lbl1lbl2lbl3",4X+1,4
end
Delvar X
Getkey->K
Repeat max(Ans=105

If Ans
Then
If Ans=25 or Ans=34
then
Line(3,52-8X,3,47-8X,0
Line(23,52-8X,23,47-8X,0

X+(Ans+34)-(Ans=25
Ans=3((Ans<0)-(Ans>2->X
End:End

Line(3,52-8X,3,47-8X
Line(23,52-8X,23,47-8X
Getkey
End
If not(X
Goto 1

If X=1
Goto 2

If X=2
Goto 3


Lbl 1
Lbl 2
Lbl 3


Alors, j'aimerais savoir si on pourrai mettre plus de label dans ce menu merci crazy.gif
linkakro le 06/05/2011 à 19:44
La ligne du repeat n'a aucun sens. Le "max(" n'a rien à faire là ou encore il y a une faute d'argumment.

J'ai testé sans le max et pour le moment je ne peux pas déplacer le curseur.

Cette boucle m'obsède, je suis persuadé qu'il y a mieux.

EDITE= J'ai bricolé ceci : il y quelques améliorations et le reste est juste à mon goût. Et il n'y a plus certaines coquilles gênantes pour un copié-collé.

Code
Lbl 0
0->Xmin
0->Ymin
94->Xmax
62->Ymax
PlotsOff
AxesOff
GridOff
FnOff
Full
Lbl 0
ClrDraw
Line(65,8,94,8
Text(55,60,"GRAPHIQUE
Line(50,0,94,0
Line(28,50,55,50
Text(13,30,"PROGRM
Line(28,42,70,42
Text(1,5,"MENU
Line(2,61,24,61
Line(25,60,25,30
Line(24,29,2,29
Line(1,30,1,60
Line(2,54,24,54
For(X,0,2
Text(8X+9,6,sub("LBL1LBL2LBL3",4X+1,4
End
1->X
Repeat K=105
getKey->K
If K=25 or K=34
Then
Line(3,60-8X,3,55-8X,0
Line(23,60-8X,23,55-8X,0
X+(K=34)-(K=25
Ans-3(Ans=4)+3(Ans=0)->X
End
Line(3,60-8X,3,55-8X
Line(23,60-8X,23,55-8X
End
If X=1
Goto 1
If X=2
Goto 2
If X=3
Goto 3

Lbl 1
Lbl 2
Lbl 3
Programaths le 06/05/2011 à 21:32
Merci winkle.gif
Juste, le repeat en faire j'avais mis
Code

Repeat max(Ans={45,105             :// dsl j'ais oublié le "{"


Puis au lbl 3 par exemple c'est pour quitter :

Code


If Ans=45 or X=2
Goto 3


Et le goto 3 quitte le progrm, en appuyant sur [clear] ou en cliquant dessus

Je voudrai avoir 2 menu côte a côte, et que je puisse aller a droite et a gauche pourais-tu me le faire ( j'y travail mais un coup e main de serai pas e refus )
Programaths le 07/05/2011 à 13:44
Bon, je n'ai pas trouvé comment faire 2 menu cote a cote et de pouvoir circuler avec les fleche gauche droite, donc je vous montre cque j'ai fais pour y remédier ^^ ( dsl je n'ai pas fait tes modification linkakro car j'ai eu quelque problemes avec, voici le code :

Code


0->Xmin
0->Ymin
94->Xmax
62->Ymax
PlotsOff
AxesOff
GridOff
FnOff
Fulm
ClrDraw
Text(1,5,"menu
Line(2,61,24,61
Line(25,60,25,30
Line(24,29,2,29
Line(1,30,1,60
Line(2,54,24,54
Lbl 0
For(X,0,2
Text(7X+9,6,sub("lbl1lbl2 -> ",4X+1,4
end
Delvar X
Getkey->K
Repeat max(Ans={105
If Ans
Then
If Ans=25 or Ans=34
then
Line(3,52-7X,3,47-7X,0
Line(23,52-7X,23,47-7X,0

X+(Ans=34)-(Ans=25
Ans+3((Ans<0)-(Ans>2->X
End:End
Line(3,52-7X,3,47-7X
Line(23,52-7X,23,47-7X
Getkey
End

If not(X
Then
Goto 1
end

If X=1
then
Goto 2
end

If X=2
then
Text(20,3," "
Text(26,3," "
Text(20,23," "
Text(26,23," "
Goto 3
End

Lbl 3
Text(1,32,"menu2
Line(31,61,53,61
Line(54,60,54,30
Line(53,29,31,29
Line(30,30,30,60
Line(31,54,53,54
Lbl 4
For(X,0,2
Text(7X+9,35,sub("lbl3lbl4 <- ",4X+1,4
end
Delvar X
Getkey->K
Repeat max(Ans={105
If Ans
Then
If Ans=25 or Ans=34
then
Line(32,52-7X,32,47-7X,0
Line(52,52-7X,52,47-7X,0

X+(Ans+34)-(Ans=25
Ans+3((Ans<0)-(Ans>2->X
End:End
Line(32,52-7X,32,47-7X
Line(52,52-7X,52,47-7X
Getkey
End
If not(X
Then
Goto 5
end

If X=1
then
Goto 6
End

If X=2
then
Text(20,32," "
Text(26,32," "
Text(20,52," "
Text(26,52," "
Goto 0
End


Lbl 1
Lbl 2
Lbl 5
Lbl 6




Lbl 1
Lbl 2
linkakro le 07/05/2011 à 16:18
Commence par enlever les Then et End autour des Goto.
C'est un facteur de ralentit ( et de bugs : heureusement que tu n'utilises pas d'autres boucle avec des End et des labels dedans)

J'ai eu une erreur innexplicable en testant ta V3 , qui a disparu quand j'ai supprimmé des trucs innutiles.
A présent, ça marche.
Programaths le 07/05/2011 à 17:28
Moi sans les end et then ça marche pas ^^' meme avec le tien, quand on le met dans un program ça entre directement dans le premier label du programme, sans passer par le menu graphique
linkakro le 07/05/2011 à 18:27
Désolé pour les problèmes que ma version 1 t'a causé, mais je n'en ai eu aucun avant de le poster (en copier/coller)

-----

Voici une autre solution pour tes multiples menus.
J'ai enlevé des bidules esthétiques mais un habitué du graphe comme toi devrais savoir les remettre si besoin.

Nous pouvons aussi l'allonger. Si tu n'y arrives pas je le ferai et tu comprendras certainement comment faire.
Code
0->Xmin
0->Ymin
94->Xmax
62->Ymax
PlotsOff
AxesOff
GridOff
FnOff
Full
ClrDraw

Vertical 25
Vertical 55
For(Y,0,1
For(X,0,2
Text(7X+9,6+29Y,sub("LBL1LBL2LBL3LBL4LBL5LBL6",4X+1+12Y,4
End
End
1->X
1->Y
Repeat K=105
getKey->K
If K
Then
Line(29Y-26,59-7X,29Y-26,54-7X,0
Line(29Y-6,59-7X,29Y-6,54-7X,0
End
X+(K=34)-(K=25
Ans+3(Ans=0)-3(Ans=4)->X
Y+(K=26)-(K=24
Ans+2(Ans=0)-2(Ans=3)->Y
Line(29Y-26,59-7X,29Y-26,54-7X
Line(29Y-6,59-7X,29Y-6,54-7X
End
X+3Y-3->X

If X=1:Goto 1
If X=2:Goto 2
If X=3:Goto 3
If X=4:Goto 4
If X=5:Goto 5
If X=6:Goto 6

Lbl 1
Lbl 2
Lbl 3
Lbl 4
Lbl 5
Lbl 6
Disp X
Programaths le 07/05/2011 à 18:38
pour l'allonger, jai réussi ^^ j'en avais mis 7, et le dernier ouvrai 7 autre a coté puis encor 7 autre, par contre je n'ai pas réussi pour les touche 24 et 26 je go tester tout ça happy.gif
Programaths le 07/05/2011 à 18:57
Impecable merci winkle.gif

Code

For(Y,0,1
For(X,0,2
Text(7X+9,6+29Y,sub("LBL1LBL2LBL3LBL4LBL5LBL6",4X+1+12Y,4
End
End


Alors, "7X+9,6+29Y c'est le positionnement des 2 collonnes.
"LBL1LBL2LBL3LBL4LBL5LBL6" le "+12Y" ça veux dire qu'a partir de 12 lettre c'est le menu suivant, si je veux mettre 5 lettre par exemple c'est :

Code

Text(7X+9,6+29Y,sub("LBL1LBL2LBL3LBL4LBL5LBL6",5X+1+15Y,5


Pour l'allonger, le "For(X,0,2" le 2 je l'angemente a consition de faire le necessaire dans le text, mais le for Y ça m'a l'aire different je me trompe ?


Voila dis moi si j'ai bon ^^'
Programaths le 07/05/2011 à 20:00
Hem, j'ai et petit problemme ^^

Code

Line(29Y-26,59-7X,29Y-26,54-7X,0
Line(29Y-6,59-7X,29Y-6,54-7X,0


Il y a seulement 2 ligne de code pour 2 ligne du curseur, avant pour déplacer je changeais juste les absice mais la ya "29Y-26" et "29Y-6"

et je n'y arrive pas ! ^^ je veux alonger le curseur de 7 par la droite et, quand on appuis sur la fleche droite je veux que le curseur se mette plus loin
linkakro le 07/05/2011 à 20:30
Nous ne devons pas oublier qu'ici le X représente l'ordonnée et Y l'abscisse (c'était pour ne pas modifier trop d'éléments d'un coup).

Le For(X sert à augmenter le nombre de colonnes.
Le For(Y sert à augmenter le nombre de lignes (de toutes les colonnes).

Tu prévoies toujours X entre 0 et N-1. avantage graphique
Moi je traite souvent X entre 1 et N. avantage de traitement des positions
Dans tous les cas, AX+B signifie toujours que l'écart entre deux positions est A. Par contre nous devons modifier B (B+A ou B-A) selon la définition de X.

L'intervalle de définition de X et Y dépend de ces deux choses :
Code
1->X
1->Y
...
X+(K=34)-(K=25
Ans+3(Ans=0)-3(Ans=4)->X
Y+(K=26)-(K=24
Ans+2(Ans=0)-2(Ans=3)->Y
En modifiant les coefficient et les tests (derniers sto), nous modifions les limites de contrôle du curseur.
Les premiers sto définissent la position initale.


Mais ma version ne permet pas de traîter plusieurs écrans.
Programaths le 07/05/2011 à 21:27
j'ai compris par la pratique que si je modifie les lignes que tu m'as montré le curseur va plus loin avant de revenir a la 1ere colonne. tes explications l'on démontré ^^

Citation

, AX+B signifie toujours que l'écart entre deux positions est A


Bien, je veux modifier A
Je veux que mon écart entre deux position sois plus grand

Jvais essayer de le montrer en ptit shema ^^'

normalement le curseur fais ça :

Code

[->]
   |   | |   |

Je voudrai que ça fasse ça:
Code

[->]
   |   |          |   |


Voila j'espère que jme suis bien fais comprendre
linkakro le 08/05/2011 à 02:12
Pour ton augmentation de 7 pixels de l'écart ça fait :
Code
Line(36Y-33,59-7X,36Y-33,54-7X
Line(36Y-13,59-7X,36Y-13,54-7X

L'écart en abscisse passe de 29 à 36 et les constantes d'abscisses diminuent de 7.
Les constantes doivent être modifiées car Y n'est pas initialement nul.
Programaths le 08/05/2011 à 12:42
Merci un menu graphique un peu lourd mais bien ^^
derniere question ^^, pour faire 3 colonnes, je rajoute 1 dans "For Y,0,1"
Puis dans :

Code


Text(7X+9,6+29Y,sub("LBL1LBL2LBL3LBL4LBL5LBL6[lbl7lbl8lbl9],4X+1+12Y[+12Y],4

c'est ça ?
linkakro le 08/05/2011 à 16:16
Oui pour la chaîne mais non pour le 12Y.
Si tu as L=3 lignes et C=4 caractères par mot, alors on emploi L*C*Y=3*4*Y=12Y.
C'est invariable concernant ton objectif d'agrandissement.

Et bien sûr tu as compris que tu dois modifier les lignes des limites de contrôle.
Programaths le 08/05/2011 à 21:16
Citation

Si tu as L=3 lignes et C=4 caractères par mot, alors on emploi L*C*Y=3*4*Y=12Y.


Dsl je n'ai pas compris le L fois C fois Y=... moodforlove.gif

Et sinon, pour les utilisateurs de mirage OS la méthode de linkakro fais un tout ptit bug :
Quand on lance le prog sous mirage OS , le menu graphique s'affiche et si on ne déplace pas le curseur ça entre directement dans le premier label, alors qu'avec le Delvar X+repeat max etc ce bug disparait voila happy.gif
(Le premier label fini, ça revient au menu graphique et la le bug n'y est plus)
linkakro le 08/05/2011 à 22:52
Ce bug avec MirageOS m'interloque. ahh.gif
Aussi bizarre que le bug du Y qui devient nul.

Là où tu as écris +12Y+12Y supprimme en un.
Le coup des L et C te donne formellement le calcul à appliquer selon le nombre de caractère de chaque mot (LBL1 en prend 4) et le nombre de lignes de chaque colonne (le même dans toutes les colonnes ; LBL1LBL2LBL3 prend 3mots*4lettres=12caractères par colonne).
Je suis désolé d'avoir trop formalisé.
Programaths le 08/05/2011 à 23:22
pas grave merci bien !
quand j'airai plus de temps je ferais quelque test pour voir d'ou viens le bug

Et sinon tu as test d'éteindre ta calcu quand tu es sur mirage OS ? je t'avais dis la solution mais tu n'avais pas répondu alors crazy.gif