Forum Liberty Basic France : Voir tous les messages du membre

Bien vu (pour tes deux derniers posts, j'ai commencé à rédiger lorsqu'il n'y en avait qu'un)

Maintenant que j'ai retrouvé la bonne manière de procéder, ça devrait être relativement simple d'envisager un placement dynamique des controles : des triplets nom du paramètre - valeur - unité regroupés à l'intérieur de rubriques dont le nom est en retrait et en gras.

Au fur et à mesure du développement et au besoin, on ajoute des triplets. Lorsqu'on arrive en bas de la fenêtre, on continue la rubrique en haut à droite dans une nouvelle colonne, et ainsi de suite tant qu'il y a de la place sur la fenêtre. Par contre, si on dépasse la capacité de la fenetre, il faudra ajouter des ascenseurs, et je n'ai jamais fait.

Et je peux toujours reprendre et approfondir le travail que tu m'as fourni en lien.

Freeform mériterait d'être amélioré : pour l'instant je n'ai pas trouvé comment faire une sélection multiple, qui aiderait beaucoup à déplacer un bloc de contrôles pour insérer de nouveaux contrôles.

Je vous retrouve le week-end prochain, là j'ai explosé le budget "temps consacré à JustBasic" pour la semaine ;)
Puisque je suis joueur, j'ai rendu fonctionnel mes déclarations de contrôles avec des tableaux ;)

Question subsidiaire sur la pertinence de la solution : quand, dans le listing, je lis "Ampere=2" et "Volt=3", c'est tout à fait parlant. Mais alors, quand je vois n(10,1)+n(10,3), qu'est-ce que ça peut donc bien être ? ;)

Voici :
Code VB :
 
    xt=10   'position horizontale de la rubrique
    yt=20   'position verticale initiale de la rubrique
    it=25   'interligne entre données de la rubrique
    xd=xt+10'position horizontale de la donnée sous la rubrique
    ir=40   'interligne entre dernière donnée de la rubrique et la rubrique suivante

    ls=170  'longueur statictext
    lt=50   'longueur textbox
    lu=30   'longueur unité
    hg=20   'hauteur statictext, textbox, etc...
    ig=7   'intervalle entre statictext, textbox, etc... sur une ligne
    cc=3     'correction de hauteur de textbox (alignement avec le texte des statictext)

    dim c$(100,2),n(100,5)
    fontrub$="!font MS_Sans_Serif 10 bold"
    fontdon$="!font MS_Sans_Serif 10"
    fontres$="!font MS_Sans_Serif 10 italic"
    fontbut$="!font Liberation_Mono 10"
 
    c$(0,0)="Courant continu"
    c$(0,1)=fontrub$
    n(0,0)=xt
    n(0,1)=yt
    n(0,2)=200
    n(0,3)=20
    statictext #p1.stcc, c$(0,0), n(0,0), n(0,1), n(0,2), n(0,3)
 
    c$(1,0)="Tension :"
    c$(1,1)=fontdon$
    n(1,0)=xd
    n(1,1)=yt+1*it
    n(1,2)=ls
    n(1,3)=hg
    statictext #p1.stun, c$(1,0), n(1,0), n(1,1), n(1,2), n(1,3)
 
    c$(2,0)="Tension"
    c$(2,1)=fontdon$ 
    n(2,0)=xd+ls+ig
    n(2,1)=yt+1*it-cc
    n(2,2)=lt
    n(2,3)=hg
    textbox #p1.tbud, n(2,0), n(2,1), n(2,2), n(2,3)
 
    c$(3,0)="V"
    c$(3,1)=fontdon$
    n(3,0)=xd+ls+lt+2*ig
    n(3,1)=yt+1*it
    n(3,2)=lu
    n(3,3)=hg
    statictext #p1.stuu, c$(3,0), n(3,0), n(3,1), n(3,2), n(3,3)
 
    c$(4,0)="Intensité :"
    c$(4,1)=fontdon$
    n(4,0)=xd
    n(4,1)=yt+2*it
    n(4,2)=ls
    n(4,3)=hg
    statictext #p1.stin, c$(4,0), n(4,0), n(4,1), n(4,2), n(4,3)
 
    c$(5,0)="Intensité"
    c$(5,1)=fontdon$
    n(5,0)=xd+ls+ig
    n(5,1)=yt+2*it-cc
    n(5,2)=lt
    n(5,3)=hg
    textbox #p1.tbid, n(5,0), n(5,1), n(5,2), n(5,3)
 
    c$(6,0)="A"
    c$(6,1)=fontdon$
    n(6,0)=xd+ls+lt+2*ig
    n(6,1)=yt+2*it
    n(6,2)=lu
    n(6,3)=hg
    statictext #p1.stiu, c$(6,0), n(6,0), n(6,1), n(6,2), n(6,3)
 
    c$(7,0)="Résultat"
    c$(7,1)=fontrub$ 
    n(7,0)=xt
    n(7,1)=yt+2*it+ir
    n(7,2)=200
    n(7,3)=20
    statictext #p1.stresult, c$(7,0), n(7,0), n(7,1), n(7,2), n(7,3)
 
    c$(8,0)="en attente de vos données"
    c$(8,1)=fontres$
    n(8,0)=xd
    n(8,1)=yt+3*it+ir
    n(8,2)=ls
    n(8,3)=hg
    statictext #p1.stresultat1, c$(8,0), n(8,0), n(8,1), n(8,2), n(8,3)
 
    c$(9,0)="résultat 2"
    c$(9,1)=fontres$
    n(9,0)=xd
    n(9,1)=yt+4*it+ir
    n(9,2)=ls
    n(9,3)=hg
    statictext #p1.stresultat2, c$(9,0), n(9,0), n(9,1), n(9,2), n(9,3)
 
    c$(10,0)="Calculer"
    c$(10,1)=fontbut$
    n(10,0)=xt
    n(10,1)=yt+4*it+2*ir
    n(10,2)=ls
    n(10,3)=25
    button #p1.btok, c$(10,0), [calculer], ul, n(10,0), n(10,1), n(10,2), n(10,3)
 
    WindowWidth=xd+ls+lt+3*ig+lu
    WindowHeight=n(10,1)+n(10,3)+40
 
    open "fenetre" for window as #p1
        #p1.stcc, c$(0,1)
        #p1.stun, c$(1,1)
        #p1.tbud, c$(2,1)
        #p1.stuu, c$(3,1)
        #p1.stin, c$(4,1)
        #p1.tbid, c$(5,1)
        #p1.stiu, c$(6,1)
        #p1.stresult, c$(7,1)
        #p1.stresultat1, c$(8,1)
        #p1.stresultat2, c$(9,1)
        #p1.btok, c$(10,1)
        #p1, "trapclose [quitter]"
    wait
 
 
[quitter]
    close #p1
    end
 
[calculer]
    #p1.tbud,"!contents? U$":U=val(U$)
    #p1.tbid,"!contents? I$":I=val(I$)
    if I=0 then
        notice "Saisissez une valeur non nulle pour l'intensité"
    else
        print
 
        c$(8,0)="Puissance = ";U*I;" W"
        c$(9,0)="Résistance = ";U/I;" Ohm"
 
        #p1.stresultat1, c$(8,0)
        #p1.stresultat2, c$(9,0)
 
        print c$(1,0);U$;" ";c$(3,0)
        print c$(4,0);I$;" ";c$(6,0)
        print c$(8,0)
        print c$(9,0)
    end if
 
    wait
 
La mise en tableau était déjà une tentative de réponse à un phénomène aberrant, ce n'était pas une fin en soi. Je te laisse découvrir l'explication du problème dans le topo qui suit.

J'ai été voir sur le lien que tu fournis, et en effet, il me fallait un truc du genre, et j'ai bien aimé l'étude de "projet de projet" de son auteur, je ne suis pas le seul à "travailler" comme ça ;)

On y parle aussi du freeform (encore un truc que j'avais oublié) qui pourrait bien me rendre plus de services qu'une usine à gaz logicielle et provisoire ne servant qu'aux essais, puisqu'on peut modifier à loisir les positions et taille des contrôles, et sans avoir à intervenir manuellement dans le listing. Il faudra juste faire du copier-coller à la fin.

Pour revenir à la discussion, la déconvenue est due à l'oubli que le déroulé du listing n'est pas forcément linéaire : l'approche erronée consiste à croire que la déclaration effective, officielle, de la position d'un contrôle se fait quand on le définit. Dans cette optique, si tous nos contrôles ont pour coordonnées les variables x et y, il suffit, entre chaque définition de contrôle, de modifier les valeurs de x et y pour répartir les controles sur la fenêtre. Mais ce n'est pas comme ça que ça marche.

En fait, avant d'ouvrir une fenêtre, on fait la liste de tous les contrôles, et tout se passe comme si leurs positions et dimensions sont définies seulement lorsque l'interpréteur arrive sur l'instruction "open...". Et forcément, s'ils utilisent tous la même variable y, ils seront tous positionnés à la dernière valeur connue de y, quelques soient les différentes valeurs qu'on ait pu lui donner avant. Je suis déjà plusieurs fois tombé dans le panneau.

En corollaire, et contrairement à ce que j'ai écrit dans mon premier post, une variable tableau est bien prise en compte dans la déclaration des contrôles, seulement sa valeur sera celle de la case correspondant au dernier index utilisé.

Une règle de base, qui m'aurait permis de savoir pertinemment le nombre et l'agencement des contrôles, donc de les définir à l'avance, est d'avoir d'abord fait l'analyse de ce qu'on veut informatiser, la programmation ne représentant que dix pour cent du travail total.

Ceci dit, le basic est pour moi un passe-temps devenu occasionnel, et ça me cantonne, de fait, dans des projets très simples.
Salutations matinales, programmeurs fous !

Comme je ne pratique plus beaucoup, à chaque fois qu'il m'arrive d'avoir une velléité de créer quelque chose avec notre JustBASIC, j'ai tout oublié et je perds un temps fou à retrouver les bonnes pratiques.

Ainsi, j'ai voulu créer une attribution automatique de la position des contrôles sur une fenetre. Le but est, durant la phase de création du programme, de pouvoir insérer facilement statictext et textbox dans une page déjà bien fournie : autrement dit, je me vois mal modifier manuellement les coordonnées de trente contrôles si je dois, au cours du développement, en insérer un autre au dessus de ces trente.

Le programme calcule donc à la volée position et dimension de ces contrôles, les place dans un tableau puis tente d'appliquer ce tableau aux statictexts et autres contrôles.

Le problème : si on utilise un tableau pour positionner un contrôle, la variable représentant une case de tableau est interprétée comme une variable ordinaire (elle contiendra cependant le contenu de la case identifiée par le dernier index fourni).

Un exemple pour être plus clair :
Code VB :
 
statictext #p1.str1, "truc", psn(b), psn(b+1), psn(b+2), psn(b+3)
b=b+4
statictext #p1.str2, "muche", psn(b), psn(b+1), psn(b+2), psn(b+3)
 

placera les deux statictext sur la même psn(b) trouvée avec la dernière valeur de b.

Un listing qui permet de constater de visu, et aussi que les calculs sont corrects :
Code VB :
 
    xt=10   'position horizontale de la rubrique
    yt=20   'position verticale initiale de la rubrique
    it=25   'interligne entre données de la rubrique
    xd=xt+10'position horizontale de la donnée sous la rubrique
    ir=40   'interligne entre dernière donnée de la rubrique et la rubrique suivante

    ls=150  'longueur statictext
    lt=50   'longueur textbox
    lu=30   'longueur unité
    hg=20   'hauteur statictext, textbox, etc...
    ig=7   'intervalle entre statictext, textbox, etc... sur une ligne
    cc=3     'correction de hauteur de textbox (alignement avec le texte des statictext)

    dim psn(100)
 
    a=0
    b=a
    psn(a)=xt:a=a+1
    psn(a)=yt:a=a+1
    psn(a)=200:a=a+1
    psn(a)=20:a=a+1
    statictext #p1.str, "Rubrique :", psn(b), psn(b+1), psn(b+2), psn(b+3)
    print a;" : statictext #p1.str : ";psn(b), psn(b+1), psn(b+2), psn(b+3)
 
    b=a
    psn(a)=xd:a=a+1
    psn(a)=yt+1*it:a=a+1
    psn(a)=ls:a=a+1
    psn(a)=hg:a=a+1
    statictext #p1.std1, "Donnée 1", psn(b), psn(b+1), psn(b+2), psn(b+3)
    print a;" : statictext #p1.std1 : ";psn(b), psn(b+1), psn(b+2), psn(b+3)
 
    b=a
    psn(a)=xd+ls+ig:a=a+1
    psn(a)=yt+1*it-cc:a=a+1
    psn(a)=lt:a=a+1
    psn(a)=hg:a=a+1
    textbox #p1.tbd1, psn(b), psn(b+1), psn(b+2), psn(b+3)
    print a;" : textbox #p1.tbd1 : ";psn(b), psn(b+1), psn(b+2), psn(b+3)
 
    b=a
    psn(a)=xd:a=a+1
    psn(a)=yt+2*it:a=a+1
    psn(a)=ls:a=a+1
    psn(a)=hg:a=a+1
    statictext #p1.std2, "Donnée 2", psn(b), psn(b+1), psn(b+2), psn(b+3)
    print a;" : statictext #p1.std2 : ";psn(b), psn(b+1), psn(b+2), psn(b+3)
 
    b=a
    psn(a)=xd+ls+ig:a=a+1
    psn(a)=yt+2*it-cc:a=a+1
    psn(a)=lt:a=a+1
    psn(a)=hg:a=a+1
    textbox #p1.tbd2, psn(b), psn(b+1), psn(b+2), psn(b+3)
    print a;" : textbox #p1.tbd2 : ";psn(b), psn(b+1), psn(b+2), psn(b+3)
 
    WindowWidth=800
    WindowHeight=600
    open "fenetre" for window as #p1
        #p1, "trapclose [quitter]"
    wait
 
 
[quitter]
    close #p1
    end
 


Une idée pour s'en sortir ?
C'est le gros avantage du langage de programmation, on peut tenter autant d'approches que désiré.

Mais à moins de ne pas avoir compris ce que tu voulais faire, j'ai modifié ta fonction selectTabV2 en selectTabV2$ et rectifié un chr$ en str$, et quoi qu'en disent nos amis d'outre-Manche, ça semble fonctionner en JB, qu'en dis-tu ?

Code VB :
 
'exemple tab
dim tab0(12)
dim tab1(12)
dim tab2(12)
 
'exemple init
tab0(6) = 0
tab1(6) = 11
tab2(6) = 22
'[...]

'---test 1
choix=2	'choix du tableau
print selectTabV1(choix)    'on souhaite utiliser le tableau N°2

'---test 2
print selectTabV2$(choix)    'on souhaite utiliser le tableau N°2

wait
 
'---------------------------------
function selectTabV1(x)
'cette fonction fonctionne bien !

    select case x
     case 0
        selectTabV1 = tab0(6)
     case 1
        selectTabV1 = tab1(6)
     case 2
        selectTabV1 = tab2(6)
    end select
 
end function
 
'---------------------------------
function selectTabV2$(x)
'ici je souhaite utiliser la variable 'x' pour sélectionner mon tableau
'MAIS j'y arrive pô^^^^

        selectTabV2$ = "tab";str$(x);"(";6;")"
 
end function
 
Bonjour tout le monde, c'est un revenant !

Je regarde dans le courant de l'après-midi, et il y a un petit détail qui cloche, mais il faut que je me replonge dans la technique pour me souvenir.

A plus tard
post du 26 avril à 08h28
Fonction Point dans un Polygone & Fonction Polygone Avec un Polygone

premier paragraphe
  • since the number of sides of the polygon can be huge, you have a great deal of freedom in creating polygons of just about any shape and size : comme le nombre de côtés d'un polygone peut être énorme, vous avez un grand degré de liberté dans la création de polygones de toute formes et taille

second paragraphe
  • This next function can process a minimum of three points and a practical maximum of 500 points ! : Cette nouvelle fonction peut traiter un minimum de trois points et un maximum pratique de 500 points !

troisième paragraphe
  • besoin d'avoir ces coordonnées stocker : stockées ;)

paragraphes sous la figure 1
  • if you only need to display or check one polygon with a large number of vertice (i.e. the point where two sides converge), you shouldn't notice a significant slow down : si vous avez juste besoin d'afficher ou de tester un polygone avec un grand nombre de sommets (le point où deux côtés se rejoignent), vous ne devriez pas constater un ralentissement significatif
  • However, if you have several polygons with a high number of vertices or hundreds of polygons with a low number of vertices displayed at the same time, you will notice a significant slow down when checking for collisions : cependant, si vous avec plusieurs polygones avec un grand nombre de sommets ou des centaines de polygones avec peu de sommets à afficher en même temps, vous noterez un ralentissement significatif pendant la vérification de collisions
  • 3) The bounding box's upper-left corner and the width and height of the bounding box wich allow us to quickly check for collision events even when sprites are not used : le coin haut gauche de la boite englobante, sa largeur et sa hauteur nous permettent de vérifier rapidement les évènements de collision, même si les sprites ne sont pas utilisé


Je crois bien qu'on a fait le tour ;)

@joan74, vérifie ton texte placé sous la figure 1 (le ralentissement en fonction du nombre de polygones et de points), c'est le seul point de désaccord que j'ai trouvé.

Christophe
Hello !

Toutes mes excuses pour ce conséquent retard, je fais trop de choses à la fois, en plus de devoir gérer la vraie vie, et au final, le temps passe. D'ici demain soir cela devrait être réparé : tu peux revenir ;)

Je n'ai pas regardé pour une stricte traduction, du moment que l'idée à transmettre me semblait respectée. Je propose ma traduction quand elle est différente de la tienne, ou quand elle me vient spontanément à l'esprit, c'est à titre d'avis et d'éventuelle discussion.

post du 26 avril à 07h43
*** [JB] Tutoriel sur la Détection de Collisions Avancées ***


Dans la liste des jeux :
  • railroad tycoon : gestion d'empire ferroviaire
  • road race : course sur route (franchement pas sûr de moi : pourquoi "sur route" et pas ailleurs, je ne connais pas grand chose au vocabulaire des jeux vidéo)

Dans la liste des fichiers attachés, il manque ou c'est pas très explicite :
  • the source code for all of the collision fonctions : le code source pour toutes les fonctions de collision
  • simple example code to see how everything works : un simple exemple de code pour voir comment tout fonctionne
  • a simple triangle game that starts out easy and later becomes frantic : un jeu de triangle simple qui commence facilement et devient plus tard frénétique
  • a puzzle game (see Point In Polygon Function.bas) : un jeu de réflexion ? de puzzle ?

post du 26 avril 07h47 :
Objectif et Sommaire


Dans le premier paragraphe
  • ...dans les routines les plus impliquées : ...dans les routines les plus courantes. C'est du chipotage, involved voulant bien dire impliquées, concernées. Tel que je comprend le texte, l'idée est de décrire les routines les plus utilisées
  • Functions and SUBs are used almost exclusively to allow you to... : des Fonctions et Subs sont presque toujours utilisées pour vous permettre de...

post du 26 avril à 07h48
Fonction Point dans un Rectangle


premier paragraphe :
  • it becomes as useful as any other intrinsic function : il devient aussi commode qu'une fonction intégrée, telle que COS, INT, SQR, etc...
  • I can iterate through as many different rectangles as I could possibliy wish by storing the rectangle information in an array : je peux scanner, étudier, traiter, autant de rectangles différents que je pourrais le souhaiter en stockant les données des rectangles dans un tableau

second paragraphe :
  • a very good use of this function immediately comes to mind : Un très bon usage de cette fonction vient immédiatement à l'esprit (on peut supprimer le "me")

troisième paragraphe : l'esprit est conservé, j'y vais cependant de ma traduction
  • this collision function will be the most used of all the collision functions : cette fonction de collision devrait être la plus utilisée de toutes les fonctions de collision
  • because it allows you to break down complex or numerous collisions into manageable pieces of code : parce qu'elle vous permet de décomposer des collisions complexes ou nombreuses en petits morceaux de code gérables.
  • It's also one of the fastest to evaluate, because when it come to graphics, faster is always better. C'est aussi l'une des plus rapide à évaluer, parce que lorsqu'on parle de graphisme, le plus rapide est toujours le meilleur.

cinquième paragraphe :
  • (Note:all of the "Point In ...Shape" functions are great for interestingly shaped buttons however the "point in Polygon" function can accomodate especially interesting button shapes) : Là, j'ai eu du mal et reverso m'a aidé. Au final, la traduction qui me semble la plus appropriée devrait être Toutes les fonctions "Point In ...Shape" sont idéales pour les boutons mais la fonction "point in Polygon" peut accueillir des formes de boutons particulièrement intéressantes

sixième paragraphe
  • ajouter "graphique" à "système ... d'inventaire" ou "module ... de sélection d'armes"

post du 26 avril à 07h50
Fonction Point dans un Cercle

  • Dernière ligne : run the code "Point In Circle Function.bas" to get an idea of how tu use this function : lancez le code ""Point In Circle Function.bas" pour avoir une idée de comment utiliser cette fonction.


<suite un peu plus tard et avant six mois - promis - juré ! >
   Le 08/05/2020 à 10h10 Général » Code Morse
Za alors ! ;)

Citation:
Alors soit il y a un os dans l'horodatage des messages, soit tu a mal lu mon dernier; puisqu'il y est dit que l'espace entre les mots est opérationnel depuis la version "Y Morse"

Non non, c'était bien la bonne version, j'étais tout content de voir que les lettres s'affichaient dans le texteditor, c'est juste que je n'ai pas testé des mots. De toute manière j'ai déjà bien du mal avec les lettres, s'il faut en plus que je réfléchisse à la durée qui sera reconnue comme espace entre mots... ;)
Existerait-il une dll qui faciliterait la création en temps réel d'un son ?

Citation:
Citation:
Il n'y aurait pas moyen de faire un fichier midi avec une note

Comme les sons sont au format (250 et 750 ms) il suffit peut-être de finir le wav en douceur, ce que je ferai avec "Audacity", on verra ce que ça donne.


Par "coup de pioche", je voulais dire "faire des points et des traits avec le manipulateur", ce n'était pas pour adoucir les fronts. L'idée, en essayant les instructions midi, était de gérer en temps réel le début et la fin d'une note, et pourquoi pas sa hauteur. je n'ai aucune experience du midi, mais je sais qu'on peut faire varier pas mal de paramètres. Est-ce que ça pourrait t'aider ?

Citation:
Le son "No_Fade" est maintenant un vrai son de Morse (point=100ms; trait=300ms).
Bien ! :top Autrement on peut toujours créer le wave en début d’exécution du programme ou à la demande par un bouton ad-hoc, c'est un peu "usine à gaz", mais on a déjà fait.

Citation:
J'hésite à afficher le texte en temps réel, je crains que ça n'allonge le temps de latence.
Tu ne le sauras qu'en faisant l'essai ;)
Pour la relecture, je vais m'y coller moi aussi, dans les jours qui viennent. J'ai vu deux-trois petites choses qui pourraient être remaniées, mais c'est au niveau du détail, car globalement c'est bon.

Peut-être faudrait-il aussi traduire les commentaires dans les programmes, ce serait plus parlant parce qu'on les a sous les yeux dans l'éditeur JB/LB, et ce serait plus simple que la traduction de paragraphes plus ou moins abscons.

Merci du boulot, en tout cas.

 |  |

2 Utilisateurs en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 2 Visiteurs
Utilisateurs en ligne : Aucun membre connecté