Forum Liberty Basic France

Débutant » Récupérer le texte d'une TEXTBOX ? Récuperer le texte par appui sur la touche "enter"
Le 25/11/2015 à 01h33

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
Alors là, je sèche, ou j'ai mal cherché...

Par exemple, on peut rentrer du texte dans une textbox, et provoquer la prise en charge de ce texte par un bouton "OK", comme dans l'exemple ci-dessous :

Code VB :
 
    nomainwin
 
    WindowWidth = 350
    WindowHeight = 120
 
    statictext #win.stx1, "Entrer quelques caractères :", 14, 11, 250, 20
    textbox #win.txt1, 14, 31, 250, 25
    statictext #win.stx2, "",14, 61, 250, 25
    button #win.btnOK, "OK", [SaisieFinie], UL, 270, 31, 25, 25
 
    open "Prendre le contenu d'un TEXTBOX" for window as #win
    print #win, "TRAPCLOSE [quit]"
    print #win.txt1, "!setfocus"
    wait
 
[SaisieFinie]
    print #win.txt1, "!contents? chaine$"
    chaine$="Vous avez écrit : "+chaine$
    print #win.stx2, chaine$
wait
 
[quit]
    'quitte le programme
    close #win
    end
 
 

(édité pour ajout de la ligne print #win.txt1, "!setfocus", pour entrer directement le texte sans cliquer sur le textbox)

Mais comme de bien entendu, c'est une solution qui ne me convient pas, et je préfèrerais dire au programme qu'il peut lire la textbox lorsque j'appuie sur "entrée".

Et là, bec dans l'eau. Inkey ne fonctionne qu'avec des fenêtres ou boites graphiques, input$(1) aurait été nickel s'il fonctionnait ailleurs que sur la mainwin, et tout ce que j'ai pu tester à base d'input, de setfocus, et j'en passe, n'a rien donné.

Une idée ?



Edité par Christophe Le 25/11/2015 à 11h43
____________________
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 25/11/2015 à 14h41

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Citation:
ne fonctionne qu'avec des fenêtres ou boites graphiques

Où est le problème ? Bricole en graphic
Pour le clavier, il faut stocker la touche dans une var$
Et tester la var$ avec un "if then" ou un "select case"
(Voir: "inkey$" in the fucking manual)
Je vais voir de te pondre un snippet Pour des oeufs, y faut attendre Pâques
*Edit: Bah, j'ai pas eu à chercher loin
Voici l'exemple du funcking manual
Pour les touches autres qu'alphanumériques il faut passer par le code ASII avec des chr$
Code VB :
 
  'INKEY.BAS - how to use the Inkey$ variable
  nomainwin
  open "Inkey$ example" for graphics as #graph
  print #graph, "when characterInput [fetch]"
  print #graph, "setfocus"
  wait
[fetch] 'a character was typed!
  key$ = Inkey$
  if len(key$) = 1 then
    notice key$+" was pressed!"
  else
    keyValue = asc(right$(key$, 1))
    if keyValue = _VK_SHIFT then
      notice "Shift was pressed"
    else
      if keyValue = _VK_CONTROL then
        notice "Ctrl was pressed"
      else
        notice "Unhandled key pressed"
      end if
    end if
  end if
  wait
 
____________________
Roro

   
Le 25/11/2015 à 17h20

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
ça doit être au niveau conceptuel qu'il y a un truc que je capte pas, c'est pas possible autrement.

Même quand j'ouvre un fenêtre en mode texte, j'ai bien la saisie clavier qui s'affiche dans la fenêtre, preuve qu'il est bien lu ce f***tu clavier, et même l'enter qui renvoie à la ligne. Parfait, sauf que je n'ai aucun moyen d' intercepter cet enter pour dire au programme qu'il peut traiter ce que je viens d'écrire.

J'ai vu l'exemple, mais je ne l'ai pas essayé parce qu'il faut être dans une fenetre graphic, et qu'il est conseillé de rester "graphique" dans une fenêtre graphic, et de garder pour la fenêtre window les boutons et textbox et autres contrôles, et que je veux quitter mon textbox avec enter.

Je laisse reposer un peu, j'ai pas encore bien assimilé le fonctionnement des fenêtres... Ou alors j'abandonne l'enter et je le remplace par un bouton, ça je sais déjà faire^^
____________________
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 25/11/2015 à 18h16

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Perso, je préfère les graphicsbox (qui prennent très biens les textbox et les boutons) que les graphics
Pour le clavier, je ne vais pas beaucoup t'aider; je suis adepte du: "tout souris".
Je vais quand même aller voir chez les anglophones (je sais qu'il y a une magouille pas claire avec la touche "Enter".

Edit: Bon, je reviens de chez les english men (qui bien sûr veulent un bout de code pour voir de quoi il retourne)
Mais tout en traduisant mon message, une question et non des moindres m'est venue à l'esprit:
Pourquoi diable veux-tu la touche "Enter" ? Alors qu'un clic sur un bouton ferait merveilleusement l'affaire ?
Why ?.
Oui...Why ?

.
____________________
Roro

   
Le 26/11/2015 à 13h14

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Tiens, essaye ça: Pour tester il faut appuyer sur la touche "Enter"
Par contre, je comprends pas pourquoi ça ne marche qu'une fois malgré mon [ret]
Code VB :
 
     NOMAINWIN
    WindowWidth = 280
    WindowHeight = 460
    UpperLeftX = (DisplayWidth-WindowWidth)-200
    UpperLeftY = 20 ' (DisplayHeight-WindowHeight)
    TEXTBOX #w.entr, 20 , 20, 130, 25
    BUTTON #w.go, "Change", [go], UL, 10, 50, 60, 20
    GRAPHICBOX #w.m 0, 0, 280, 460
    OPEN "Help" FOR window_nf AS #w
    #w, "TRAPCLOSE [closeHelp]"
     #w.m , "down"
    #w.entr, "Contenu du textbox"
  [ret]
     #w.m, "setfocus"
     #w.m, "when characterInput [fetch]"
    wait
[fetch] 'a character was typed!
  key$ = Inkey$
  if asc(key$)=13 then
     #w.entr, "!contents? var$"
     #w.m, "color red;backcolor white"
     #w.m, "place ";"100";" ";"100";" ;|";var$
     goto [ret]
  end if
   wait
   [go]
     #w.entr, "C'est changé                  "
      goto [ret]
  wait
  [closeHelp]
    CLOSE  #w
    END
 

Edit: Après de multiples essais, il s'avère que si on change le contenu du textbox par le code (bouton "change"): ça marche
Mais si on clique dans le textbox: ça marche plus
Y a comme un mystère....
Re Edit: En fait il faut sortir le curseur du textbox (clic dans la fenêtre pour lui redonner le focus)
____________________
Roro

   
Le 26/11/2015 à 17h36

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
Malgré tout toujours obligé de cliquer dans la textbox pour entrer des caractères : les caractères s'affichent dans la textbox mais l'"enter" passe toujours inaperçu.

Je me demande si c'est pas un problème dû à wine. Je teste sur mon petit pc de secours.

De retour. Wine n'y est pour rien.Si j'appuie sur "enter" sans entrer dans la textbox, effectivement "enter" est pris en charge, mais plus quand on est entré dans la textbox... ou alors, comme tu dis, cliquer ailleurs que dans la textbox.

:hum

En fait il faudrait ne pas utiliser les textbox disponibles, mais faire sa propre textbox : afficher à l'écran les caractères entrés au clavier, et en même temps les stocker dans une chaine jusqu'à ce que le caractère devienne "enter", alors on lance la routine qui va travailler sur cette chaine.

J'ai le sentiment que, dans le fonctionnement des contrôles graphiques il n'ai pas été pris en compte qu'on pourrait avoir envie de valider avec "enter" plutôt qu'avec un clic sur un bouton. ça pourrait être ça ?



Edité par Christophe Le 26/11/2015 à 17h55
____________________
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 26/11/2015 à 18h04

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
Au fait, pour répondre à ton post du 25 à 18h16 : parce qu'il est plus évident de faire "123+enter "que de faire 123, puis de quitter le clavier pour attrapper la souris et faire le clic sur le bouton OK 8-)
____________________
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 26/11/2015 à 18h32

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
C'est un problème de focus. En faisant comme tu dit: Transférer la frappe au clavier dans la fenêtre, ça devrait fonctionner
Je vais faire un petit snippet pour tester.
Mais si on connaissait le but final, ça serait plus rationnel comme démarche.
____________________
Roro

   
Le 26/11/2015 à 18h59

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Le snippet avec retour à la ligne
Frappe clavier...frappe...frappe....frappe...ENTER.
Code VB :
 
     NOMAINWIN
    WindowWidth = 600
    WindowHeight = 460
    UpperLeftX = (DisplayWidth-WindowWidth)-200
    UpperLeftY = 20 ' (DisplayHeight-WindowHeight)
    GRAPHICBOX #w.m 5, 5, 575, 460
    OPEN "Help" FOR window_nf AS #w
    #w, "TRAPCLOSE [closeHelp]"
     #w.m , "down"
     #w.m, "font courier_new 16 bold"
     #w.m, "setfocus"
     #w.m, "when characterInput [fetch]"
   marge=20: finlign=200: y=30
    wait
[fetch] 'a character was typed!
  key$ = Inkey$
     if asc(key$)=13 then
        #w.m, "place 10 300": #w.m, "\Et maintenant, qu'est-ce qu'on fait ?"
     end if
     if marge+x > finlign then
        x=0: flag=1
     end if
     if flag=1 then y=y+20
     #w.m, "color red;backcolor white"
     #w.m, "place ";marge+x;" ";y;" ;|";key$
      x=x+10: flag=0
  wait
  [closeHelp]
    CLOSE  #w
    END
 
____________________
Roro

   
Le 26/11/2015 à 20h14

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
et bien voilà, nous y sommes ...et "qu'est-ce qu'on fait maintenant", c'était bien vu ;)

Pour la finalité, la difficulté est qu'il n'y a pas... c'est simplement de l'apprentissage.

Voici en l'état le projet sur lequel je travaille, et tu reconnaîtras au premier coup d' œil de quoi-tès-kikose (réf:une récente discussion sur la fabrication d'un fichier wav de 3 secondes et demi) :

Code VB :
 
 
    dim frequence$(3) '(l'élément 0 ne sera pas utilisé, la première fréquence porte, de manière naturelle, le n°1
    data "Fréquences","12.550,235","1 235","440"
    for a=0 to 3:read a$:frequence$(a)=a$:next
 
 
    'nomainwin

    'paramétrage de l'écran principal
    WindowWidth = 848
    WindowHeight = 595
 
    statictext #win.statictext1, "Fréquences", 14, 11, 72, 20
 
    button #win.btn0, "modifier", [modifieFrequence], UL, 14, 31, 80, 25
    button #win.btn1, frequence$(1), [freq1Clic], UL, 14, 61, 80, 25
    button #win.btn2, frequence$(2), [freq2Clic], UL, 14, 91, 80, 25
    button #win.btn3, frequence$(3), [freq3Clic], UL, 14, 121, 80, 25
 
    open "Générateur BF expérimental" for window as #win
    print "Ouverture fenêtre <Générateur BF experimental>"
        print #win, "TRAPCLOSE [quit]"
        print #win.btn1, "!setfocus"
        print "wait <Générateur BF experimental>"
        wait
 
[freq1Clic]
    print "sp [freq1Clic]"
    'marche/arrêt générateur 1
    BtnActif=1
    print "wait <[freq1Clic]>"
    wait
 
[freq2Clic]
    print "sp [freq2Clic]"
    BtnActif=2
    print "wait <[freq2Clic]>"
    wait
 
[freq3Clic]
    print "sp [freq3Clic]"
    BtnActif=3
    print "wait [freq3Clic]"
    wait
 
[modifieFrequence]
    print "sp [modifieFrequence]"
 
 
    'prévoir vérification si fenêtre déjà ouverte ou pas

    'paramétrage de l'écran de modification des fréquences
    WindowWidth=300
    WindowHeigh=400
 
    textbox #winFreq.F1, 14, 31, 80, 25
    textbox #winFreq.F2, 14, 61, 80, 25
    textbox #winFreq.F3, 14, 91, 80, 25
    button #winFreq.OK, "OK", [finiSaisieFreq], UL, 14, 121, 80, 25
 
    open "Modification des fréquences" for window as #winFreq
        print "Ouverture fenêtre <Modification des fréquences>"
        print #winFreq, "TRAPCLOSE [quitFreq]"
 
        print #winFreq.F1, frequence$(1)
        print #winFreq.F2, frequence$(2)
        print #winFreq.F3, frequence$(3)
 
        print #winFreq.F1, "!setfocus"
 
        print "wait <Modification des fréquences>"
        wait
 
 
[finiSaisieFreq]
print "sp [finiSaisieFreq]"
    print #winFreq.F1,"!contents? chaine$" : frequence$(1)=chaine$ : print #win.btn1, frequence$(1)
    print #winFreq.F2,"!contents? chaine$" : frequence$(2)=chaine$ : print #win.btn2, frequence$(2)
    print #winFreq.F3,"!contents? chaine$" : frequence$(3)=chaine$ : print #win.btn3, frequence$(3)
 
    close #winFreq
    print "wait [finiSaisieFreq]"
    wait
 
[quit]
    'quitte le programme
print "sp [quit]"
    close #win
    end
 
[quitFreq]
print "sp [quitFreq]"
    close #winFreq
    print "wait [quitFreq]"
    wait
 
 


En fait j'ai une idée très précise de ce que je veux faire, ça ne devrait pas poser de problème, d'où les fenêtres déjà nommées et les variables aux noms évocateurs.

Là où ça coince, c'est que j'ai encore du mal à manipuler les objets graphiques, comme les boutons, les zones de texte, ..., et plus j'avance plus je rencontre leurs limites qui me font remanier à chaque fois l'approche du problème.

Sur la grande fenêtre tu peux voir les boutons avec un nombre dedans : c'est la fréquence du générateur correspondant au bouton : un clic gauche pour le mettre en marche ou l'arrêter, un clic droit pour modifier la fréquence. Du moins c'est ce que je voulais faire.

Parce qu'au final, entrer du texte tapé au clavier directement dans un bouton, puis faire en sorte que ce soit pris en compte par le programme, ça a l'air d'être bien coton pour mon niveau. Alors j'ai voulu utiliser une textbox à côté du bouton pour modifier la fréquence, et puisque la textbox ne réagit pas à l'"enter", il fallait mettre un bouton de validation à coté. 3 controles pour changer une fréquence, c'est trop.

L'alternative du moment, c'est une nouvelle fenêtre, qui liste toutes les fréquences dans des textbox, avec un seul bouton de validation qui fait prendre en compte les modifications, et ferme la fenêtre. C'est plus naturel à utiliser, à défaut d'avoir pu changer la fréquence directement par un clic droit sur son bouton.

voilivoilà... :)
EDIT DU MODO: La suite de cette histoire est là bas -->http://libertybasic.fr/forum/topic-419+entrer-au-clavier-une-valeur-numerique.php

Ici, on continue avec les modes d'entrée de données
____________________
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 26/11/2015 à 20h59

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Citation:
la finalité, la difficulté est qu'il n'y a pas

Je m'en doutais. Lol! Une idée aussi tordue ne pouvait que servir à....Rien. re lol!
Mais j'avais quand même des hypothèses.

Pour les problèmes: Remmène les par ici, on les décortiquera, on mettra les épluchures par un côté et les noisettes de l'autre
Entrer des données par les boutons, j'ai jamais fait; les textbox sont bien plus pratiques En mettant deux petits boutons "Plus"/"Moins" à côté, c'est nickel. De plus, tu peux faire varier le pas de variation en fonction du nombre de clics ou avec un textbox "Pas".
Les boutons, c'est bon pour démarrer, arrêter, changer de mode...Bref, pour agir
Si tu fait des clics droits, ça t'oblige à mettre une doc pour dire qu'il y a "clic droit" (on est pas sensés le savoir)
Tu peux aussi en effet faire avec une listbox ou mieux un combobox
Bref, c'est pas les solutions qui manquent
Merci de me donner un peu de grain à moudre, je te ferai des propositions
____________________
Roro

   
Le 26/11/2015 à 21h20

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Première proposition: Le combobox
Code VB :
 
 
     NOMAINWIN
    WindowWidth = 280
    WindowHeight = 460
    UpperLeftX = (DisplayWidth-WindowWidth)-200
    UpperLeftY = 20 ' (DisplayHeight-WindowHeight)
     COMBOBOX #w.comb, comb$(), [event], 20, 20, 100, 300
    GRAPHICBOX #w.m 0, 0, 280, 460
    OPEN "Help" FOR window_nf AS #w
    #w, "TRAPCLOSE [closeHelp]"
    #w.m , "down"
    dim comb$(100)
    lesfreq$="12400 12500 12500 12600 12700 12800 12900 13000"
    for charg=1 to 8
       comb$(charg)=word$(lesfreq$, charg)
    next charg
    #w.comb, "!Fréquences"
    #w.comb, "reload"
    wait
  [event]
     #w.comb, "contents? text$"
     #w.m, "place ";"10";" ";"200";" ;|On a récupéré ça-->:  ";text$
     #w.m, "place 20 230": #w.m, "\C'est pour emporter"
     #w.m, "place 20 250": #w.m, "\Ou pour manger sur place ?"
  wait
  [closeHelp]
    CLOSE  #w
    END
 
 
 
____________________
Roro

   
Le 26/11/2015 à 22h03

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Deuxième proposition: La foire aux boutons
L'avantage, c'est du tout souris et c'est plus souple que les fréquences fixes du combobox
On peut même faire un réglage fin avec un delta du delta
Et bien sûr, on peut toujours entrer directement dans les textbox
Ah oui...J'ai mis en graphicbox parce qu'il est dit dans la doc que les contrôles marchaient mieux comme ça
Code VB :
 
     NOMAINWIN
    WindowWidth = 400: UpperLeftX = (DisplayWidth-WindowWidth)-200
    WindowHeight = 460: UpperLeftY = 20 ' (DisplayHeight-WindowHeight)
    TEXTBOX #w.freq, 20, 30, 100, 25
    BUTTON #w.ok, "Valid", [go], UL, 40, 65, 60, 20
    BUTTON #w.plu, "Plus", [plusf], UL, 130, 20, 40, 20
    BUTTON #w.moin, "Moins", [moinsf], UL, 130, 45, 40, 20
    TEXTBOX #w.pas, 190, 30, 80, 25
    BUTTON #w.pl, "Plus", [plusp], UL, 280, 20, 40, 20
    BUTTON #w.moi, "Moins", [moinsp], UL, 280, 45, 40, 20
    BUTTON #w.fin, "50", [fin], UL, 330, 30, 40, 20
    GRAPHICBOX #w.m 5, 5, 375, 460
    OPEN "Help" FOR window_nf AS #w
    #w, "TRAPCLOSE [closeHelp]"
    #w.m , "down"
     freq=12000: delta=50: fin=3
     #w.m, "place 20 15": #w.m, "\Fréquence Hz"
     #w.m, "place 200 15": #w.m, "\Delta Hz"
     #w.freq, str$(freq): #w.pas,  str$(delta)
  wait
  [go]
    #w.freq, "!contents? freq$"
     #w.m, "place ";"10";" ";"200";" ;|On a récupéré ça-->:  ";freq$
     #w.m, "place 10 250": #w.m, "\Le bouton Valid"
     #w.m, "place 10 270": #w.m, "\Peut démarrer le géné"
  wait
  [plusp]
    if fin=1 then delta=delta+1
    if fin=2 then delta=delta+10
    if fin=3 then delta=delta+50
    if fin=4 then delta=delta+100
    #w.pas, str$(delta)
  wait
  [moinsp]
    if fin=1 then delta=delta-1
    if fin=2 then delta=delta-10
    if fin=3 then delta=delta-50
    if fin=4 then delta=delta-100
    #w.pas, str$(delta)
  wait'----------------
  [plusf]
    #w.pas, "!contents? pas$": freq=freq+val(pas$): #w.freq, str$(freq)
  wait
  [moinsf]
    #w.pas, "!contents? pas$": freq=freq-val(pas$): #w.freq, str$(freq)
  wait'----------------
  [fin]
      fin=fin+1
      if fin=5 then fin=1
      #w.fin, word$("1 10 50 100",fin)
    if fin=1 then delta=1
    if fin=2 then delta=10
    if fin=3 then delta=50
    if fin=4 then delta=100
    #w.pas, str$(delta)
  wait
  [closeHelp]
    CLOSE  #w
    END
 
 
____________________
Roro

   
Le 26/11/2015 à 23h14

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
Hey, pas mal, tout ça :top

Je reviens demain, après avoir éventuellement songé à faire correspondre le titre de la discussion avec l'évolution de son contenu, je crois qu'on aime bien les hors-sujets^^

Et c'est plus sympa de bosser à deux plutôt que de se coltiner la doc tout seul dans son coin, faut reconnaitre...

Bonne nuit !
____________________
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/11/2015 à 09h03

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Suite du: 26/11/15 à 23h29
J'ai ajouté un bouton au code: 26/11/15 à 22h03 !! (j'aime bien les boutons)
Il y a donc maintenant 4 modulos ( 1-10-50 et 100) pour le delta de réglage de la fréquence
Un vrai vernier de pro !
Mais pas la peine de tester le code modifié précédent tu peux aller au message suivant qui est la simplification de la complexification précédente. :D :heink
____________________
Roro

   
Le 27/11/2015 à 09h24

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Suite de: 26/11/15 à 23h29
Et de: 27/11/15 à 09h03
Bon, et ben pour finir, j'ai virés un textbox et deux boutons
Et troisième proposition
Je crois que ça va te plaire (on peut ajouter des modulos de variation si besoin)
Code VB :
 
 
     NOMAINWIN
    WindowWidth = 400: UpperLeftX = (DisplayWidth-WindowWidth)-200
    WindowHeight = 460: UpperLeftY = 20 ' (DisplayHeight-WindowHeight)
    TEXTBOX #w.freq, 20, 30, 100, 25
    BUTTON #w.ok, "Valid", [go], UL, 40, 65, 60, 20
    BUTTON #w.plu, "Plus", [plusf], UL, 130, 20, 40, 20
    BUTTON #w.moin, "Moins", [moinsf], UL, 130, 45, 40, 20
    BUTTON #w.fin, "50", [fin], UL, 180, 30, 40, 20
    GRAPHICBOX #w.m 5, 5, 375, 460
    OPEN "Help" FOR window_nf AS #w
    #w, "TRAPCLOSE [closeHelp]"
    #w.m , "down"
     freq=12000: delta=50: fin=3
     #w.m, "place 20 15": #w.m, "\Fréquence Hz"
     #w.m, "place 175 15": #w.m, "\Delta Hz"
     #w.freq, str$(freq)
  wait
  [go]
    #w.freq, "!contents? freq$"
     #w.m, "place ";"10";" ";"200";" ;|On a récupéré ça-->:  ";freq$
     #w.m, "place 10 250": #w.m, "\Le bouton Valid"
     #w.m, "place 10 270": #w.m, "\Peut démarrer le géné"
  wait'----------------
  [plusf]
    freq=freq+delta: #w.freq, str$(freq)
  wait
  [moinsf]
    freq=freq-delta: #w.freq, str$(freq)
  wait'----------------
  [fin]
      fin=fin+1
      if fin=5 then fin=1
      #w.fin, word$("1 10 50 100",fin)
    if fin=1 then delta=1
    if fin=2 then delta=10
    if fin=3 then delta=50
    if fin=4 then delta=100
  wait
  [closeHelp]
    CLOSE  #w
    END
 
 
____________________
Roro

   
Le 27/11/2015 à 19h25

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
Excellent, comme d'hab ;)

Ordre d'affichage des posts du forum : désolé, je n'ai pas fait attention, et là il m'indique 0 messages non lus, alors que les tiens sont apparus depuis ma dernière déconnexion. Me serais-je connecté sans y penser... En fait je ne me connecte que pour répondre. J'essaierais la prochaine fois.

Pour revenir ici, je crois que j'ai encore voulu utiliser les contrôles avec une autre philosophie que celle des programmeurs qui leur ont donné naissance. Forcément, ça marchait pas...

Le problème étant réglé, j'ai commencé le travail sur le gros du programme, la génération de la forme d'onde. L'heure des questions insolubles n'est pas encore arrivée, et fera l'objet d'une discussion dédiée. A moins que j'ouvre un sujet tout de suite, on peut faire une œuvre collective.

(en fait plutôt demain, hein, là j'ai encore des choses à faire avant de considérer la journée comme terminée^^)
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 29/11/2015 à 16h25

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Citation:
mais plutôt la function

Ah ben ouais..;j'chuis con! Bah, c'est qu'en fait j'utilise rarement les fonctions

Méfie toi d'un truc; je vais faire la modif si je ne l'ai pas déjà faite sur le code d'origine
Il faut supprimer le fichier après l'avoir lu.
Because si on fait des modifs et qu'on teste sans avoir supprimé, on relit le fichier existant.

Quand tu aura choisi un mode de réglage, (Perso, j'aime bien le quatrième: Simple et efficace)
On pourra ouvrir un post dédié. on y mettra le code d'origine, le réglage et les évolutions.
Et je supprimerai ce qu'il y a ici

EDIT: ça y est j'ai ajouté le "kil" au code d'origine
Pour mémoire, il est là page 2--->: http://libertybasic.fr/forum/topic-415-2.php#m4524
____________________
Roro

   
Le 30/11/2015 à 17h17

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
Alors là...chapeau bas... :lu On va même dire "adopté"

Allez, j'avoue, j'ai regardé... mais juste un œil vite fait, pas un regard soutenu, hein, juste un tout petit regard de rien du tout, tout petit, minuscule... Bon, d'accord, j'ai regardé, quoi, c'est humain,...


Petite tranche de vie pré-JB qu'on pourra transférer dans le futur fil, s'il existe un jour...

Donc, je suis confronté à ça :


j'ai 3 périodes T1, T2 et T3, valant, par exemple, respectivement 2. 3. et 7 secondes,

je cherche la durée d'une période englobant totalement ces trois périodes : ni plus longue ni plus courte mais juste assez pour bien décrire tous les états possible de la forme d'onde résultante.

Intuitivement, on se doute bien qu'il y a une histoire de multiples, là dedans, voire de PPCM : 2*3*7 = 42.

Au bout de 42 secondes on a une forme d'onde qui décrit complètement le mélange des 3 fréquences initiales, avec 42/2 = 21 T1, 42/3 = 14 T2 et 42/7 = 6 T3

Génial, les périodes sont entières, rien ne sera tronqué à la numérisation (et pour bien faire je suppose qu'il faudrait aussi y inclure la fréquence d'échantillonnage)

On peut transcrire cet exemple à notre appli, en se disant que nos périodes valent 2, 3, et 7 millisecondes, et on aura alors une période finale de 42 millisecondes, toujours génial.


Sauf que, quand on calcule la période à partir de la fréquence exprimée en Hertz, le résultat s'exprime en secondes, et nos périodes seront fournie comme ceci : T1=0.002, T2=0.003 et T3=0.007

Donc lorsque je calcule ma période multiple, j'obtiens 0.002*0.003*0.007 = 0.000 000 042 !!!!

Alors, je défie quiconque de faire tenir, au moins sur notre bonne vieille Terre et dans la dimension habituelle, la moindre milliseconde dans 42 nanosecondes. La moquette existait-elle déjà quand on a inventé les bases des mathématiques ???

Bien sûr, c'est une histoire de puissances de 10, on a un produit de trois termes en 10-3, forcément le résultat sera en 10-9

Bon, c'est sûr, on peut toujours tricher, et multiplier le 10-9 par 106 pour retrouver nos 42 millisecondes.

Mais quand même, ça chiffonne, et on le produit comment, dans le programme, ce 106 ? Toutes les périodes ne sont pas forcément des 10-3 et il n'y aura pas toujours 3 fréquences...


Alors décrétons que la milliseconde devient l'unité, comme ça, plus de virgule ni de puissances négatives. Une période d'une milliseconde correspond à une fréquence de 1000 Hz, pile poile dans le domaine qui nous intéresse, donc nos 2,3, et 7 millisecondes donneront bien 42 millisecondes.

Sauf que, il faut vraiment du bol, dans la vraie vie, pour tomber pile sur 2, 3 ou 7. Ce serait plutôt du genre 5.12345213536246862336541654654663524654766... et je ne sais pas faire un ppcm ou un multiple de nombre entier décimal

et quant à la résolution, si je veux 400 Hz, une période de 2 millisecondes donne 500 Hz, et 333 Hz pour la 3 milliseconde : la milliseconde n'est pas assez précise


Si on prend la fréquence max qu'on souhaite obtenir, et pouvoir toujours varier de 1 Hz comme ce sera possible par les boutons de saisie et mon désir (et même j'aimerais pouvoir avoir des fréquences décimales) on obtient une période de
20 000 Hz : la période est 1/20000 = 0.000 050 000 000
19 999 Hz : la période est 1/19999 = 0.000 050 002 500

La différence est seulement de 25 dixièmes de nanosecondes, mais en exprimant les périodes en dixièmes de nanosecondes on pourrait avoir notre résolution de 1 Hz jusqu'à 20 kHz...,

Quand je demande è justBasic de me donner la période exprimée en dixièmes de nanosecondes (un truc en (1/F)*10^10), le résultat est en notation normale avec deux ou trois chiffres après la virgule, donc c'est tout bon de ce côté là et on peut se permettre d'arrondir.

Mais un produit de 4 fréquences autour du 500 Hz donneront une période à 32 chiffres... Bonjour les ppcm et la recherche de facteurs premier, et ça, à chaque fois qu'on veut modifier une fréquence

J'en-peux-plus ! Je vais essayer de reprendre une vie normale ;)

A+



Edité par Christophe Le 30/11/2015 à 17h29
____________________
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 30/11/2015 à 22h03

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Bon...En attendant que tu donne le LA (attention j'ai l'oreille musicale)
Voici la 5 bis (pour ajuster l'échelle, il faut trouver un matheux, parce que moi,j'ai fait à la louche)
Code VB :
 
   NOMAINWIN
    WindowWidth = 400: UpperLeftX = (DisplayWidth-WindowWidth)-200
    WindowHeight = 460: UpperLeftY = 20 ' (DisplayHeight-WindowHeight)
    TEXTBOX #w.freq, 20, 30, 80, 25
    BUTTON #w.ok, "Valid", [go], UL, 40, 65, 60, 20
    GRAPHICBOX #w.m 5, 5, 380, 420
    OPEN "Help" FOR window_nf AS #w
    #w, "TRAPCLOSE [closeHelp]"
    #w.m , "down"
    #w.m, "when leftButtonDown [choice]"
    #w.m, "when leftButtonUp [make]"
     freq=12000
     #w.m, "place 5 15": #w.m, "\Fréquence Hz"
      #w.freq, "!font courier_new 12 bold": #w.freq, str$(freq)
  wait
  [go]
     #w.m, "color white": #w.m, "place 300 10":#w.m, "boxfilled 360 400"
    #w.freq, "!contents? freq$"
    #w.m, "font courier_new 22 bold":#w.m, "color black"
     #w.m, "place ";"10";" ";"200": #w.m, "\Fréquence: " ; str$(int(freq))
  wait'----------------
  [choice]
     yx=MouseY
         #w.m, "color white": #w.m, "place 300 10":#w.m, "boxfilled 360 400"
     #w.m, "color darkred": #w.m, "place 300 10":#w.m, "goto 300 400"
    ' #w.m, "place ";"305";" ";yx:  #w.m, "\" ;str$(int(freq))
     aff=freq:#w.m, "font courier_new 12 bold"
     for ty=yx to 20 step-15
        #w.m, "place ";"305";" ";ty:  #w.m, "\" ;str$(int(aff))
        aff=aff+((yx-20)/13)^2
     next ty
     aff=freq
     for ty=yx to 380 step 15
        #w.m, "place ";"305";" ";ty:  #w.m, "\" ;str$(int(aff))
        aff=aff-((400-yx)/13)^2
     next ty
    '(((((((((((((((((((((((((((
    #w.m, "when leftButtonMove [make]"
    ya=MouseY
  wait'----------------
  [make]
    #w.m, "when leftButton"
    yb=MouseY
    if yb > ya then
      freq = freq-((yb-ya)/16)^2
      if freq < 1 then freq=0
      #w.freq, str$(int(freq))
    end if
    if yb < ya then
      freq = freq+((ya-yb)/16)^2: #w.freq, str$(int(freq))
    end if
  wait'----------------
  [closeHelp]
    CLOSE  #w
 
 
____________________
Roro

   
Débutant » Récupérer le texte d'une TEXTBOX ? Récuperer le texte par appui sur la touche "enter"  

 |  |

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