Forum Liberty Basic France

Discussion Générale » Fastoche ! ou faux-semblants pour s'y mettre ;)
Le 01/11/2018 à 14h12

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 449
Chacun aura pu constater que, lorsque les projets naissent sur un coin de table, ils apparaissent souvent jouables, voire faciles. Lorsque le moyen de les réaliser s'appelle programmation basic, on se dit que c'est dans la poche, et que, bien évidemment, ça va être plié en moins de deux...

Et le fait est, si je veux positionner une phrase au milieu de l'écran, c'est très facile, il suffit de :
  • diviser les dimensions de la fenêtre par deux,
  • imposer une largeur constante de caractère avec, par exemple, print #fenêtre.statictext, "!font courier";8;" ";16;" "
  • dimensionner la largeur du statictext à nombre de caractère de la phrase * largeur de caractère, et sa hauteur à hauteur du caractère (plus un ou deux pixels si on peur que ça rentre pas)
  • diviser par deux les dimensions du statictext
  • positionner le statictext à moitié de la fenêtre - moitié du statictext

Et à l'exécution, j'ai ma phrase pile-poil au milieu de l'écran(*), et le boulot est fait.

Sauf que : que se passe-t-il si la phrase est trop grande pour tenir sur une seule ligne ?
Pas grave, on met des ascenseurs à la fenêtre, et l'utilisateur jouera sur ces ascenseurs pour voir la phrase en entier. Sûrement efficace, mais pas très ergonomique, donc non, on va faire mieux.

On coupe la phrase quand elle atteint la largeur de la fenêtre, et on écrit le reste en dessous : facile, il suffit de mettre un chr$(13) à l'emplacement de la coupure pour forcer le changement de ligne, et on dimensionne verticalement le statictext à deux fois la hauteur du caractère.

Oui, mais... Il y a neuf chances sur dix pour que cette coupure arrive en plein milieu d'un mot.
On ne peut décemment pas couper le mot comme ça, ça n'a aucun sens. Et comme le langage de programmation ne connait pas la notion de syllabe française, on se dit qu'il sera plus simple de détecter le dernier espace avant coupure, et d'y placer notre chr$(13). Encore relativement facile, mais nécessitant déjà un peu plus de réflexion.

Donc, ça y est, on a notre coupure propre avec son chr$(13) remplaçant le dernier espace de la ligne, et le reste de la phrase qui s'affiche sur la seconde ligne.

OK, mais si on veut que cette deuxième ligne soit aussi centrée horziontalement, en utilisant le même statictext, histoire de ne pas dépareiller ? On cherche alors le nombre de caractères restant à afficher, on comble le vide de part et d'autres avec des espaces, et on s'en sort une fois de plus.

Oui, et si notre deuxième ligne est encore trop petite pour terminer l'affichage de la phrase ?

Là, on se lance dans une routine qui analyse la phrase par tronçons affichables, routine relativement simple à mettre en place, mais qui contribue encore à alourdir le travail (il est déjà quinze heures) et complexifier encore un peu le code.

Et que se passe-t-il s'il n'y a pas d'espace dans la phrase ?
Situation absurde, allez-vous me dire, on n'a jamais vu une phrase sans espaces, carsansespacesc'estmoinslisible. Certes, mais on n'est pas à l'abri d'un grand mot dans une fenêtre trop réduite, ou d'une taille de caractère trop grande (parce que dans notre grande bonté on propose sa modification par le menu "Paramètres" qu'on a créé pour l'occasion). On peut aussi rencontrer un utilisateur qui, par désœuvrement ou pour une raison qui lui est propre, veut voir si le programmeur a bien fait son travail, et entre exprès une grande phrase sans espaces.

Bon, voilà, on va s'arrêter la, hein, le temps s'obscurcit (et ce ne sont pas les nuages qui arrivent, mais bien la nuit qui tombe), et il faut encore voir ce problème de phrase sans espaces.

Avec ça, C dans l'air, ou 28' ou je ne sais quelle autre émission sympa, est terminée, le jour de repos est passé sans qu'on l'ait vu, il y avait deux courriers à écrire, plus l'intendance, et un mail pour quelqu'un qui doit se demander ce qu'on devient; le repas de midi s'est résumé à un sandwich devant l'ordi, et on a oublié de profiter du soleil pour mettre le nez dehors et prendre la Seine en photo.

Sur ce, revenons dans la vraie vie où nous sommes déjà en début d'après-midi, il n'y a certes guère de soleil dehors, mais je ne passerais pas le reste de la journée devant l'ordi (tout au moins aujourd'hui ^^ )

Bonne continuation pour vos projets et activités en cours.

Christophe.

---

(*) enfin, pas tout à fait, les dimensions qu'on donne aux objets étant souvent leurs dimension totale, incluant barres de menus, ascenseurs et autres fioritures, et non les dimensions utiles
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia6 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais 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 01/11/2018 à 16h43

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1993
Bah, y a qu'à mettre un tiret quand le mot est coupé.
Et que la Seine coule sous le pont Mirabeau.
Le temps n'est point perdu à prendre de la peine
Puisque ça nous fait travailler le cerveau.
____________________
Roro

   
Discussion Générale » Fastoche ! ou faux-semblants pour s'y mettre ;)  

 |  |

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