Forum Liberty Basic France

Le 23/02/2016 à 20h00

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2090
Reprise du message précédent

Citation:
Roland si t'es dans les parages

Je suis là, mais j'étais parti sur ma version avec tableau(x), et je dois avouer que les listes de "if" de pmp me donnent un peu le tournis.
____________________
Roro

   
Le 23/02/2016 à 20h48

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
A moi aussi, j'avoue. Mais on reste encore dans le raisonnable, et c'est redoutablement efficace de simplicité pour modifier ces ifs.

L'if est l'une des premières instructions qu'on apprend. A vue de nez je remplacerais bien par un select case... , c'est le second moyen dans la simplicité. Après on aborde les listes de data, mises en tableau et/ou la lecture des données dans un fichier, là il faut déjà se tordre les méninges un peu plus.

Pour revenir à la question de base : dans a$=a$+Inkey$, Inkey$ aurait-il le magique pouvoir de vider a$ avant d'y mettre la frappe clavier ?


pmb, question de bon sens : quelle variable veux-tu utiliser, et pour faire quoi ?

On a utilisé a$=left$(a$,(len(a$)-1)) parce que a$ était la chaine qui contenait tous les caractères qu'on avait entré au clavier, et quand on appuyait sur <enter>, on affichait le contenu de a$ un peu plus bas dans la fenêtre. Il n'y a pas ce système dans ton dernier listing, donc on n'a pas besoin de a$, je t'ai induit en erreur avec cet a$.

à chaque frappe clavier, le caractère lu était entré dans a$
on avait donc, frappe après frappe et par ex :
L
Le
Le
Le j
Le jo
Le jou
Le joux 'là on s'est trompé, donc on appuie sur "del"

"del" envoie sur un sous-programme ou une section qui contient a$=left$(a$,(len(a$)-1)). Cette instruction extrait les len(a$)-1 caractères de gauche de a$, puisque len(a$) est la longueur de la chaine, pour les réaffecter à a$. Ainsi, "Le joux" perd son caractère final et devient "Le jou" : on a effacé le caractère entré par erreur.

Cherche à quel endroit tu dois modifier quelque chose dans ta fenêtre quand on appuie sur "del", et tu trouveras la bonne variable et le bon traitement à appliquer.

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

   
Le 23/02/2016 à 22h37

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2090
Citation:
vider a$

Pourquoi diable veux-tu vider a$ ?
Ce que tu mets dans a$ écrase (remplace) ce qu'il y avait avant
Sinon, tu peux toujours faire a$=""; et a$ sera vide
____________________
Roro

   
Le 24/02/2016 à 14h24

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Parce qu'elle n'a qu'un seul caractère même lorsque on en a entré plusieurs au clavier...

Dans le dernier listing de pmp, tu case un print sous a$=a$+Inkey$, et tu verra par toi-même que a$ vaut toujours le dernier caractère frappé :

Code VB :
 
...
[A]
 
 Key$=Inkey$
 a$=a$+Inkey$     
 print a$, len(a$)     'l'impression de a$ sera sur la mainwin
  If asc(Key$)=8 then
  a$=left$(a$,(len(a$)-1))
  end if
 
...
 

C'est un peu bizarre, parce que ne j'ai pas vu ailleurs dans le programme un vidage de a$, donc Inkey$ imposerait son contenu à a$ ?
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 24/02/2016 à 14h51

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Oki, autant pour moi, je viens de trouver la ligne a$="", juste après la série d'if de [A].

Donc inkey$ n'a pas de pouvoirs magiques.

De toute manière, vu la constitution du programme, il faut que a$ n'ait qu'un seul caractère.

Je reverrais bien la lecture du clavier comme ceci :
Code VB :
 
...
[A]
 
supprimé : Key$=Inkey$
supprimé: a$=a$+Inkey$   
ajouté : a$=Inkey$
 
  If asc(a$)=8 then
  supprimé : a$=left$(a$,(len(a$)-1))
  ajouté : a$=" "
  ajouté : L$="          "
  ajouté : x=x-12
  ...
 
  end if
 
...
 


Je laisse volontairement incomplet pour que pmp réfléchisse ;)



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

   
pmp
Le 24/02/2016 à 17h08

Libertynaute Timide

Groupe: Membre

Inscrit le: 15/02/2016
Messages: 27
Oui c'est pas facile j'ai essayer de raisonner simplement je veut juste que quand Key$=8 que sa revienne de a-20 et x-12 et que sa fasse un espace blanc voila a quoi j'avais pensé. Sa ne marche que pareillement pour les Lettres:

If asc(Inkey$)=8 then
a=a-20
x=x-12
print #w,"place ";a;" ";b; " "
print #w,"place ";x;" ";y;" "
a=a-20 'c'est pour écrire la ou j'avais éffacé
x=x-12
goto [DEBUT]
end if

   
Le 24/02/2016 à 17h51

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Désolé, pmp, je ne crois pas que tu aurais pu obtenir quelque chose de probant : je connais mal l'instruction Inkey$ et elle m'a réservé une sorte de surprise : quand on appuie sur "del", inkey$ possède alors deux caractères. Quoi que j'aie pu faire, les deux caractères étaient traités dans les instructions print a$ ou if asc(a$)=8, même en ne gardant qu'un seul caractère pour a$.

Néanmoins, si je ne l'ai pas compris, j'ai tenu compte de ce comportement pour aboutir au listing ci-dessous. J'ai repris la seule partie "transmettre" que j'ai adaptée et corrigée
Code VB :
 
'24 fev 16 16h13

WindowWidth=1100
WindowHeight=500
UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
 
open "Fenêtre" for graphics AS #w
    'GRAPHICBOX #w.m 0, 0, 280, 460
    print #w, "setfocus"
    x=20: y=50
    a=550: b=50
 
 
    #w "when characterInput [A]"
    #w, "TRAPCLOSE [closeHelp]"
    wait
 
[A]
 
    a$=Inkey$
 
 
    If asc(a$)=8 then 'si on a appuyé sur "del" :

        'on efface le dernier caractère entré
        x=x-24 '2 fois l'écart entre caractère, à cause du fonctionnement de inkey$ (explications dans le post)
        print #w, "place ";x;" ";y;" ;|          "
 
        'et on efface le code morse correspondant
        a=a-40
        print #w, "place ";a;" ";b;" ;|           "
 
    else    'pour tous les autres caractères :

        if len(a$)=1 then print #w, "place ";x;" ";y;" ;|";a$ 
        if (  a$="a" ) then L$=".-/"
        if (  a$="b" ) then L$="-.../"
        if (  a$="c" ) then L$="-.-./"
        if (  a$="d" ) then L$="-../"
        if (  a$="e" ) then L$="./"
        if (  a$="f" ) then L$="..-./"
        if (  a$="g" ) then L$="--./"
        if (  a$="h" ) then L$="..../"
        if (  a$="i" ) then L$="../"
        if (  a$="j" ) then L$=".---/"
        if (  a$="k" ) then L$="-.-/"
        if (  a$="l" ) then L$=".-../"
        if (  a$="m" ) then L$="--/"
        if (  a$="n" ) then L$="-./"
        if (  a$="o" ) then L$="---/"
        if (  a$="p" ) then L$=".--./"
        if (  a$="q" ) then L$="--.-/"
        if (  a$="r" ) then L$=".-./"
        if (  a$="s" ) then L$= ".../"
        if (  a$="t" ) then L$="-/"
        if (  a$="u" ) then L$="..-/"
        if (  a$="v" ) then L$="...-/"
        if (  a$="w" ) then L$="-..-/"
        if (  a$="x" ) then L$="-..-/"
        if (  a$="y" ) then L$="-.--/"
        if (  a$="z" ) then L$="--../"
 
        print #w, "place ";a;" ";b;" ;|";L$ 
        a=a+20
        x=x+12
 
    end if
 
 
    L$=""
    a$=""
    If x=500 then x=20: y=y+20
    If a=1050 then a=550: b=b+20
 
 
 
    wait
 
[closeHelp]
    Close #w
    end
 
 


Roland, si tu peux me dire toi aussi si le résultat est bien l'effacement du dernier caractère avec "del"



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

   
Le 24/02/2016 à 18h00

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
pmp:
Oui c'est pas facile j'ai essayer de raisonner simplement je veut juste que quand Key$=8 que sa revienne de a-20 et x-12 et que sa fasse un espace blanc voila a quoi j'avais pensé ...

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

   
Le 24/02/2016 à 18h25

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2090
Oui, ça efface bien le reculant

Sur ma version j'essaie de sortir les tops, pour l'instant ll n'en sort qu'un, alors que j'ai tout fais pour que ça marche
Y a un os dans l' pâté. lol!
____________________
Roro

   
Le 25/02/2016 à 15h17

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Christophe:
les deux caractères étaient traités dans les instructions print a$ ou if asc(a$)=8, même en ne gardant qu'un seul caractère pour a$.

Le code ci-dessous pour illustrer le truc que je capte pas.

Lancer le programme, taper "qsd" et appuyez sur "del" "backspace" (ou "backspace", c'est la mêmeNon ! Décidément pas réveillé, le bonhomme... <Backspace> n'est pas <Suppr>;), et jetez un oeil sur la mainwin : le prog considère deux fois de suite que backspace a été actionné, et donc efface deux caractères au lieu d'un...

Code VB :
 
'25 fev 16 14h52

WindowWidth=1100
WindowHeight=500
UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
 
open "Fenêtre" for graphics AS #w
    'GRAPHICBOX #w.m 0, 0, 280, 460
    print #w, "setfocus"
    x=20: y=50
    a=550: b=50
 
 
    #w "when characterInput [A]"
    #w, "TRAPCLOSE [closeHelp]"
    wait
 
[A]
    print:print "on vient d'appuyer sur une touche"
    a$=Inkey$
    print "le code ascii du caractère est maintenant dans a$"
 
    if len(a$)>1 then a$=right$(a$,1)
        'normalement, que a$ ait un ou deux caractères, après cette condition a$ ne devrait avoir
        'qu'un seul caractère.
        print "longueur de a$ : ";len(a$)
 
    If asc(a$)=8 then 'si on a appuyé sur "del" :
        print "la touche était <backspace>"
 
        'on efface le dernier caractère entré
        x=x-12 
        print #w, "place ";x;" ";y;" ;|          "
 
        'et on efface le code morse correspondant
        a=a-20
        print #w, "place ";a;" ";b;" ;|           "
 
    else    'pour tous les autres caractères :
        print "le caractère est ";a$
        print #w, "place ";x;" ";y;" ;|";a$ 
        if (  a$="a" ) then L$=".-/"
        if (  a$="b" ) then L$="-.../"
        if (  a$="c" ) then L$="-.-./"
        if (  a$="d" ) then L$="-../"
        if (  a$="e" ) then L$="./"
        if (  a$="f" ) then L$="..-./"
        if (  a$="g" ) then L$="--./"
        if (  a$="h" ) then L$="..../"
        if (  a$="i" ) then L$="../"
        if (  a$="j" ) then L$=".---/"
        if (  a$="k" ) then L$="-.-/"
        if (  a$="l" ) then L$=".-../"
        if (  a$="m" ) then L$="--/"
        if (  a$="n" ) then L$="-./"
        if (  a$="o" ) then L$="---/"
        if (  a$="p" ) then L$=".--./"
        if (  a$="q" ) then L$="--.-/"
        if (  a$="r" ) then L$=".-./"
        if (  a$="s" ) then L$= ".../"
        if (  a$="t" ) then L$="-/"
        if (  a$="u" ) then L$="..-/"
        if (  a$="v" ) then L$="...-/"
        if (  a$="w" ) then L$="-..-/"
        if (  a$="x" ) then L$="-..-/"
        if (  a$="y" ) then L$="-.--/"
        if (  a$="z" ) then L$="--../"
        print "et le code morse correspondant est ";L$
        print #w, "place ";a;" ";b;" ;|";L$ 
        a=a+20
        x=x+12
 
    end if
    print "x=";x
 
    L$=""
    a$=""
    If x=500 then x=20: y=y+20
    If a=1050 then a=550: b=b+20
 
 
 
    wait
 
[closeHelp]
    Close #w
    end
 
 


Roland:
Oui, ça efface bien le reculant

Je suis donc pleinement rassuré (Cette question parce que mon dernier ordi sous windows a des problèmes, et que je ne peux plus tester sur un vrai windows, je met à jour ma signature parce que je ne sais pas combien de temps cette situation va durer)

Roland:
Sur ma version j'essaie de sortir les tops

Les bips ? Tu convertis la chaine "--.." en deux wave long et deux wave courts séparés par des wave muets ? Un seul wave par caractère ?



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

   
pmp
Le 25/02/2016 à 19h16

Libertynaute Timide

Groupe: Membre

Inscrit le: 15/02/2016
Messages: 27
Merci c'est super sa marche Nikel ! Vraiment merci beaucoup a vous deux :D
Bon maintenant j'aimerait bien améliorer l’aspect du menu, avec des 4 Cases cliquable a la souris, j'ai vu qu'on pouvait crée des fenêtres avec un éditeur. Mais pourriez vous m'en dire un peu plus ?
Et vous pouvez me donner la liste des Codes touches du clavier pour le Lb :)



Edité par pmp Le 25/02/2016 à 19h39

   
Le 25/02/2016 à 21h03

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2090
@Christophe: N'y a t-il pas un soucis avec le "a" de: print #w, "place ";a;" ";b;" ;|
x=x-12, mais quid de "a" ?
____________________
Roro

   
Le 25/02/2016 à 22h41

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
@roland : a=a-20, c'était pour faire réfléchir pmp. L'actualité est trop rapide pour qu'on ait le temps de suivre ? ;)

@pmp : Hmm, il reste encore deux-trois bricoles à voir :
-comment aller à la ligne en meme temps sur l'affichage des caractère et l'affichage des symboles ?
-comment répartir la largeur de la fenêtre entre l'affichage des caractères et l'affichage des symboles ?
-comment afficher un espace, un symbole conforme à la réalité ?
-quelle longueur disponible pour le message : une ligne, une phrase, un paragraphe ? qu'est-ce qu'on fera si on atteint les limites de la fenêtre ?
-etc...

Pour les boutons, un peu de lecture préliminaire se trouve dans le dossier JustBASIC v1.01, l'exemple s'appelle BUTTONS1.bas, et contient davantage de "wait" que de "debut...goto debut"^^. Je suppose qu'on doit le trouver aussi dans Liberty Basic. A étudier, donc.

On peut aussi utiliser le freeform GUI editor, mais pour quatre boutons tu auras plus vite fait à la main et ce sera plus formateur.



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

   
pmp
Le 26/02/2016 à 21h11

Libertynaute Timide

Groupe: Membre

Inscrit le: 15/02/2016
Messages: 27
Merci beaucoup je vais essayer de traiter tous ses points, mais vous auriez la liste des getket pour clavier ?

et pour le menu j'ai essayer cela mais sa ne marche pas ^^

WindowWidth=500

UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)

open "Menu" for graphics for graphics_nsb AS #w
'GRAPHICBOX #w.m 0, 0, 280, 460
print #w, "setfocus"

button #w, "Recevoir", [Recevoir], UL, 20, 10
button #w, "Transmettre", [transmettre], UL, 60, 10
button #w, "Alphabet", [Alphabet], UL, 20, 100
button #w, "Quitter", [stop], UL, 60, 100

wait

   
Le 26/02/2016 à 21h30

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2090
Allez, j'y vais de mon morceau à ma sauce.
Le premier qui se moque prends un coup de fouet.
C'est là --->: morse.zip
____________________
Roro

   
Le 26/02/2016 à 22h04

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
pmp, simple distraction de ta part : on déclare les boutons avec leurs dimensions et sous-programme de destination, certes, mais AVANT d'ouvrir la fenêtre...

Je n'ai pas la liste en question, mais jette un œil dans l'aide aux pages Inkey$ ou Using virtual key constants with Inkey$. Si j'ai un peu de temps ce week-end j'essaierai de voir si on peut faire un petit logiciel qui affiche la ou les touches pressées, mais c'est pas une promesse.

Roland, je teste ton générateur demain.

Bonne nuit les vous autres, l'est temps d'aller dormir...



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

   
pmp
Le 26/02/2016 à 22h08

Libertynaute Timide

Groupe: Membre

Inscrit le: 15/02/2016
Messages: 27
Ah c'est cool ! Le bruit de trompette n'est pas super pour du morse, mais c'est drôle :)



Edité par pmp Le 26/02/2016 à 22h16

   
Le 26/02/2016 à 22h11

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
pouêt ! :lu
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
pmp
Le 26/02/2016 à 22h17

Libertynaute Timide

Groupe: Membre

Inscrit le: 15/02/2016
Messages: 27
oui Christophe merci, sa marche mieux comme ça effectivement





button #w, "Décoder", [Recevoir], UL, 40, 100
button #w, "Coder", [transmettre], UL, 200, 100
button #w, "Alphabet", [Alphabet], UL, 40, 200
button #w, "Quitter", [stop], UL, 200, 200
WindowHeight=350

WindowWidth=400

UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
open "Menu " for graphics for graphics_nsb AS #w
wait

   
Le 27/02/2016 à 21h23

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 520
Roland : ça faisait bien "pouêt"!

Manque de bol, chez moi le programme reste muet, probablement dû à wine. Je suppose que la lecture est finie lorsqu'on voit apparaître le code "13" à la suite des symboles morse...

Je peux lire "long.wav" si je met au début de ton listing la fenêtre "filedialog" pour aller le chercher manuellement. Autrement, en mettant le chemin dans une chaine, et même en utilisant DefaultDir$+"/long.wave" : rien ,nada, ketchi. Drôle de truc, va falloir que j'investigationne...
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 27/02/2016 à 21h45

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2090
Christophe: Uune seule adresse:
https://www.virtualbox.org/wiki/Linux_Downloads
____________________
Roro

   

 |  |

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