Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1954 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [Tk] Largeur d'un Text box

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Tk] Largeur d'un Text box

n°1375793
etranger
Posté le 26-05-2006 à 23:07:38  profilanswer
 

Bonjour  :)  
 
Je suis en train de developper une sorte de "Crypto" notpad, un editeur de base pour resoudre des cryptogrammes.
 
Je souhait afficher dans un text box une ligne de texte chiffrer et en dessou un "-" pour chaque caractere encore non deviné, ou sinon la lettre qui lui correspond.
 
Pour cela, je dois recuperer la largeur du textbox en caracteres, pour afficher la ligne de text puis la ligne du genre "---e-- --e-".
 
je sai comment recuperer la largeur en pixel, mais je n'est rien trouver pour transformer les pixels en unites de caracteres, ni avec google, ni dans la doc de Tk.
 
Je vous remercie d'avance


Message édité par etranger le 26-05-2006 à 23:25:40
mood
Publicité
Posté le 26-05-2006 à 23:07:38  profilanswer
 

n°1375833
pospos
Posté le 26-05-2006 à 23:51:23  profilanswer
 

tu peux recuperer le string lui meme, et utiliser length() pour avoir sa longueur

n°1375840
etranger
Posté le 27-05-2006 à 00:07:55  profilanswer
 

j'y est penser, mais malheureusement, la ligne 1 ne designe pas la premiere ligne afficher sur mon Text box, mais plutot la premiere ligne qui se termine par un "\n", c'est a dire que si tout le text ne contient aucun retour a la ligne, tout le texte est la ligne 1  :pt1cable:


Message édité par etranger le 27-05-2006 à 00:09:19
n°1375997
pospos
Posté le 27-05-2006 à 16:08:54  profilanswer
 

il me semble que tu a de quoi mesurer en pixel la largeur d'une chaine donnée avec une font donnée dans Tk::Font, donc tu pourrais retomber sur tes pieds avec ca

n°1376030
etranger
Posté le 27-05-2006 à 19:09:45  profilanswer
 

Merci pour ta reponce  :)  
 
J'ai tanté cette solution :

Code :
  1. sub mesureL{
  2.              my ($t,$i);
  3.              $i=1;
  4.              $t=substr($text,$i,1);  #$text contient le text du TextBox
  5.              while($text_box->fontMeasure($text_box->Font,$t) < $text_box->Width)
  6.              {
  7.                   $i++;
  8.                   $t.=substr($text,$i,1);
  9.              }
  10.              #print length($t);
  11.              return length($t);
  12.            }


 
mais malheureusement, la valeur de retour est toujour inferieure (la difference varie d'apres la largeur du text box)  :pt1cable:  
 
je me demande si je ne devrait pas recommancer mon projet en Java .


Message édité par etranger le 27-05-2006 à 19:10:17
n°1376048
pospos
Posté le 27-05-2006 à 20:02:13  profilanswer
 

Si tu veux rester en perl tu a d'autre GUI: GTK2 (mal documenté, il faut utiliser la doc de la lib C), WxWidget, Win32 GUI, etc.
 
Mais explique exactement ce que tu veux faire, car je ne comprend pas tout: tu dis vouloir afficher une ligne mais tu a des \n ?
Si c'est juste une ligne pouquoi ne pas utiliser en simple entry?
Esque le fait d'utiliser une font à espacement constant pourrait t'aider?

n°1376057
etranger
Posté le 27-05-2006 à 20:34:33  profilanswer
 

Voila en fait ce que je veut faire : http://etranger.webspace4free.biz/Capture01.jpg
 
pour faire cet effet, je commance par recuperer le texte d'un fichier, puis j'enleve tout les \n, les retoures a la lignes se font donc automatiquement lorce que le texte attaint la largeur maximale du text box.
 
Donc pour pouvoir afficher le texte comme dans l'image du haut, il me faut la largeure du text box , suposont que ce soit 40 caracteres.
 
je prend les premieres 40 caracteres de mon texte et je creer une autre chaine de caracteres formees de '-' pour chaques lettre du texte originale, ou d'un espace pour les espaces. Ensuite, pour resoudre un cryptogramme, si je veux echanger les E par des n, j'echangerait les '-' sous les E par des n.
 
mais pour que le texte ne soit pas decaller, il faut que je sache la largeur du text box, sinon les n (par exemple) ne seront pas sous les E.
 
un peu difficille a expliquer mais j'espert que tu aura compris, en tout cas merci  :)
 
PS: j'utilise Tk parce que je la connait deja, et surtout parcequ'elle est installer par defaut sur la plupart des distributions de perl (ActiveState et ma distrib standard sur mandriva 10).


Message édité par etranger le 27-05-2006 à 21:22:18
n°1376063
pospos
Posté le 27-05-2006 à 21:05:13  profilanswer
 

je ne peux pas voir ton image (visiblement il faut etre membre de developpez.net)


Message édité par pospos le 27-05-2006 à 21:05:28
n°1376067
etranger
Posté le 27-05-2006 à 21:24:24  profilanswer
 

ou encore http://www.speedsurf.to/etranger/Capture01.jpg

n°1376068
pospos
Posté le 27-05-2006 à 21:37:48  profilanswer
 

ok je vois
 
tu dis que fontMeasure te retourne toujours un truc un peu inferieur, mais pourquoi ne pas forcer le retour ligne en ajoutant un petit \n, en gardant quelques characteres de marge sur la droite de ta textbox ?

mood
Publicité
Posté le 27-05-2006 à 21:37:48  profilanswer
 

n°1376071
pospos
Posté le 27-05-2006 à 21:39:14  profilanswer
 

en plus comme ca ca te permet de garder tes groupes de 5 lettres sur une meme ligne

n°1376084
etranger
Posté le 27-05-2006 à 23:00:49  profilanswer
 

effectivement, sa me semble une bonne option.
 
en tout cas merci beaucoup pour ton aide  :)  :hello:
 
PS: apres avoir tester sous linux, je croi que je vais opter pour java, car le resulta est totalement faux.


Message édité par etranger le 27-05-2006 à 23:19:20
n°1376109
pospos
Posté le 28-05-2006 à 00:45:14  profilanswer
 

ca marche sous windows et non sous linux?
A mon avis c'est du à des versions differentes de Tk

n°1376112
etranger
Posté le 28-05-2006 à 00:53:05  profilanswer
 

oui surement

n°1376114
pospos
Posté le 28-05-2006 à 01:07:23  profilanswer
 

ce genre de truc peut aussi arriver si la machine windows est configurée en "grandes polices" (comme c'est souvent le cas des portables)

n°1381609
etranger
Posté le 05-06-2006 à 19:35:20  profilanswer
 

Une personne a fini par me trouver une solution sur un news groupe, je la poste afin que tout le monde puisse en béneficier :

Code :
  1. use Tk;
  2. use Tk::Dialog;
  3. use Tk::Text;
  4. use Tk::Font;
  5. my $mw = MainWindow->new(-title => "Essai" );
  6. my $text = $mw->Text(-height => 20,
  7.      -width => 40,
  8.      -wrap => 'char',
  9.      -font => "courier"
  10.      )->pack(qw/-expand 1 -fill both/);
  11. my $font = $text->cget('-font');
  12. my $bw = $text->cget('-borderwidth');
  13. my $padx = $text->cget('-padx');
  14. $mw->Button(-text => "Show",
  15.     -command => sub {
  16.       print "Width: ", $text->width, "\n";
  17.       my $size = 0;
  18.       my $cont = 1;
  19.       while ($cont) {
  20. $size++;
  21. my $twi = $font->measure("0" x $size);
  22. $cont = ($twi < $text->width - 2 * $bw - 2 * $padx);
  23.       }
  24.       $size--;
  25.       print "Largeur: $size\n";
  26.     })->pack;
  27. $mw->Button(-text => "Quit", -command => sub { exit })->pack;
  28. MainLoop;


 
Merci a toi propos pour t'etre pancher sur mon probleme  :)


Message édité par etranger le 05-06-2006 à 19:36:05

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [Tk] Largeur d'un Text box

 

Sujets relatifs
probleme input text valeur par defautretrouver la largeur du "border style" d'un objet
[Résolu][Oracle Text] chargement de fichiers / indexprobleme avec mon RTE (rich text editor)
pb avec System.Text.ASCIIEncoding() en vb.netProbleme de largeur de <td> sous IE
champ text disable -> comment ne pas le griser ?CSS : input[type=text] marche pas sur IE ?
Comment récupérer les valeurs d'un champ text dont le nom s'incrémenteProblème largeur de balise
Plus de sujets relatifs à : [Tk] Largeur d'un Text box


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR