je souhaiterait savoir la largeur d'un text box (entree de text
multi-lignes) en unitee de caractaires, c'est a dire savoir combien de
caractere je peu afficher sur une ligne.
J'ai fouiller dans la documentation, je peu recuperer la largeur mais
malheureusement en pixels.
avec google je n'est rien trouver.
je souhaiterait savoir la largeur d'un text box (entree de text
multi-lignes) en unitee de caractaires, c'est a dire savoir combien de
caractere je peu afficher sur une ligne.
J'ai fouiller dans la documentation, je peu recuperer la largeur mais
malheureusement en pixels.
avec google je n'est rien trouver.
je souhaiterait savoir la largeur d'un text box (entree de text
multi-lignes) en unitee de caractaires, c'est a dire savoir combien de
caractere je peu afficher sur une ligne.
J'ai fouiller dans la documentation, je peu recuperer la largeur mais
malheureusement en pixels.
avec google je n'est rien trouver.
À (at) Fri, 26 May 2006 12:54:35 +0200,
"personne" écrivait (wrote):je souhaiterait savoir la largeur d'un text box (entree de text
multi-lignes) en unitee de caractaires, c'est a dire savoir combien de
caractere je peu afficher sur une ligne.
J'ai fouiller dans la documentation, je peu recuperer la largeur mais
malheureusement en pixels.
avec google je n'est rien trouver.
Puisque personne ne répond à "personne", je m'y colle ;-)
La largeur d'un textbox Tk est effectivement donnée en pixels car la
donner en caractères n'aurait pas de sens : selon la police choisie et
même dans une police donnée, les caractères n'ont pas tous la même
largeur.
Ceci étant, si vous choisissez une police à espacement fixe, il est
possible de demander au système la largueur (fixe) d'un caractère et
de faire soi-même le calcul. Pour cela, la méthode 'measure' de
Tk::Font peut être utile.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Fri, 26 May 2006 12:54:35 +0200,
"personne" <blabla@hotmail.com> écrivait (wrote):
je souhaiterait savoir la largeur d'un text box (entree de text
multi-lignes) en unitee de caractaires, c'est a dire savoir combien de
caractere je peu afficher sur une ligne.
J'ai fouiller dans la documentation, je peu recuperer la largeur mais
malheureusement en pixels.
avec google je n'est rien trouver.
Puisque personne ne répond à "personne", je m'y colle ;-)
La largeur d'un textbox Tk est effectivement donnée en pixels car la
donner en caractères n'aurait pas de sens : selon la police choisie et
même dans une police donnée, les caractères n'ont pas tous la même
largeur.
Ceci étant, si vous choisissez une police à espacement fixe, il est
possible de demander au système la largueur (fixe) d'un caractère et
de faire soi-même le calcul. Pour cela, la méthode 'measure' de
Tk::Font peut être utile.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Fri, 26 May 2006 12:54:35 +0200,
"personne" écrivait (wrote):je souhaiterait savoir la largeur d'un text box (entree de text
multi-lignes) en unitee de caractaires, c'est a dire savoir combien de
caractere je peu afficher sur une ligne.
J'ai fouiller dans la documentation, je peu recuperer la largeur mais
malheureusement en pixels.
avec google je n'est rien trouver.
Puisque personne ne répond à "personne", je m'y colle ;-)
La largeur d'un textbox Tk est effectivement donnée en pixels car la
donner en caractères n'aurait pas de sens : selon la police choisie et
même dans une police donnée, les caractères n'ont pas tous la même
largeur.
Ceci étant, si vous choisissez une police à espacement fixe, il est
possible de demander au système la largueur (fixe) d'un caractère et
de faire soi-même le calcul. Pour cela, la méthode 'measure' de
Tk::Font peut être utile.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
premierement je te remercie pour ta reponce.
J'avais deja penser a cette solution, j'ai donc ecrit cette fonction :
1.. sub mesureL{2.. my ($t,$i);3.. $i=1;4..
$t=substr($text,$i,1); #$text contient le text du TextBox5..
while($text_box->fontMeasure($text_box->Font,$t) < $text_box->Width)6..
{7.. $i++;8..
$t.=substr($text,$i,1);9.. 10.. }11.. #print
length($t);12.. return length($t);13.. } Mais malheureusement,
les resultats sont totalement incorrect, plus court que necessaire sous
windows, beaucoup trop long sous linux !
C'est vraiment genant comme probleme, c'est tout bete mais c'est ce qui me
bloc dans mon projet .
"Paul Gaborit" a écrit dans le message de
news:
À (at) Fri, 26 May 2006 12:54:35 +0200,
"personne" écrivait (wrote):je souhaiterait savoir la largeur d'un text box (entree de text
multi-lignes) en unitee de caractaires, c'est a dire savoir combien de
caractere je peu afficher sur une ligne.
J'ai fouiller dans la documentation, je peu recuperer la largeur mais
malheureusement en pixels.
avec google je n'est rien trouver.
Puisque personne ne répond à "personne", je m'y colle ;-)
La largeur d'un textbox Tk est effectivement donnée en pixels car la
donner en caractères n'aurait pas de sens : selon la police choisie et
même dans une police donnée, les caractères n'ont pas tous la même
largeur.
Ceci étant, si vous choisissez une police à espacement fixe, il est
possible de demander au système la largueur (fixe) d'un caractère et
de faire soi-même le calcul. Pour cela, la méthode 'measure' de
Tk::Font peut être utile.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
premierement je te remercie pour ta reponce.
J'avais deja penser a cette solution, j'ai donc ecrit cette fonction :
1.. sub mesureL{2.. my ($t,$i);3.. $i=1;4..
$t=substr($text,$i,1); #$text contient le text du TextBox5..
while($text_box->fontMeasure($text_box->Font,$t) < $text_box->Width)6..
{7.. $i++;8..
$t.=substr($text,$i,1);9.. 10.. }11.. #print
length($t);12.. return length($t);13.. } Mais malheureusement,
les resultats sont totalement incorrect, plus court que necessaire sous
windows, beaucoup trop long sous linux !
C'est vraiment genant comme probleme, c'est tout bete mais c'est ce qui me
bloc dans mon projet .
"Paul Gaborit" <Paul.Gaborit@invalid.invalid> a écrit dans le message de
news: r7zmh1jg5j.fsf@vaugirard.enstimac.fr...
À (at) Fri, 26 May 2006 12:54:35 +0200,
"personne" <blabla@hotmail.com> écrivait (wrote):
je souhaiterait savoir la largeur d'un text box (entree de text
multi-lignes) en unitee de caractaires, c'est a dire savoir combien de
caractere je peu afficher sur une ligne.
J'ai fouiller dans la documentation, je peu recuperer la largeur mais
malheureusement en pixels.
avec google je n'est rien trouver.
Puisque personne ne répond à "personne", je m'y colle ;-)
La largeur d'un textbox Tk est effectivement donnée en pixels car la
donner en caractères n'aurait pas de sens : selon la police choisie et
même dans une police donnée, les caractères n'ont pas tous la même
largeur.
Ceci étant, si vous choisissez une police à espacement fixe, il est
possible de demander au système la largueur (fixe) d'un caractère et
de faire soi-même le calcul. Pour cela, la méthode 'measure' de
Tk::Font peut être utile.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
premierement je te remercie pour ta reponce.
J'avais deja penser a cette solution, j'ai donc ecrit cette fonction :
1.. sub mesureL{2.. my ($t,$i);3.. $i=1;4..
$t=substr($text,$i,1); #$text contient le text du TextBox5..
while($text_box->fontMeasure($text_box->Font,$t) < $text_box->Width)6..
{7.. $i++;8..
$t.=substr($text,$i,1);9.. 10.. }11.. #print
length($t);12.. return length($t);13.. } Mais malheureusement,
les resultats sont totalement incorrect, plus court que necessaire sous
windows, beaucoup trop long sous linux !
C'est vraiment genant comme probleme, c'est tout bete mais c'est ce qui me
bloc dans mon projet .
"Paul Gaborit" a écrit dans le message de
news:
À (at) Fri, 26 May 2006 12:54:35 +0200,
"personne" écrivait (wrote):je souhaiterait savoir la largeur d'un text box (entree de text
multi-lignes) en unitee de caractaires, c'est a dire savoir combien de
caractere je peu afficher sur une ligne.
J'ai fouiller dans la documentation, je peu recuperer la largeur mais
malheureusement en pixels.
avec google je n'est rien trouver.
Puisque personne ne répond à "personne", je m'y colle ;-)
La largeur d'un textbox Tk est effectivement donnée en pixels car la
donner en caractères n'aurait pas de sens : selon la police choisie et
même dans une police donnée, les caractères n'ont pas tous la même
largeur.
Ceci étant, si vous choisissez une police à espacement fixe, il est
possible de demander au système la largueur (fixe) d'un caractère et
de faire soi-même le calcul. Pour cela, la méthode 'measure' de
Tk::Font peut être utile.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
Excuse moi, mais l'affichage du code a un peu foirer, voila un lien ou j'ai
poser ma question ainsi que le code :
http://forum.hardware.fr/hardwarefr/Programmation/Tk-Largeur-Text-sujet-91136-1.htm
Excuse moi, mais l'affichage du code a un peu foirer, voila un lien ou j'ai
poser ma question ainsi que le code :
http://forum.hardware.fr/hardwarefr/Programmation/Tk-Largeur-Text-sujet-91136-1.htm
Excuse moi, mais l'affichage du code a un peu foirer, voila un lien ou j'ai
poser ma question ainsi que le code :
http://forum.hardware.fr/hardwarefr/Programmation/Tk-Largeur-Text-sujet-91136-1.htm
À (at) Mon, 5 Jun 2006 02:46:43 +0200,
"personne" écrivait (wrote):Excuse moi, mais l'affichage du code a un peu foirer, voila un lien ou
j'ai
poser ma question ainsi que le code :
http://forum.hardware.fr/hardwarefr/Programmation/Tk-Largeur-Text-sujet-91136-1.htm
Manifestement vous ne maitrisez pas vraiment le manipulation des fonts
sousT Tk. Voici un bout de code qui n'utilise pas (directement) les
fonts et qui devrait vous suffire :
------------------------------------------------------------
use Tk;
use Tk::Text;
my $mw = MainWindow->new(-title => "Essai");
$mw->Text(-height => 20,
-width => 40,
-wrap => 'char',
-font => "courrier")->pack;
$mw->Button(-text => "Quit", -command => sub { exit })->pack;
MainLoop;
------------------------------------------------------------
Le fait d'utiliser un font non proportionnelle ("courrier" qui est
disponible sur toutes les plateformes) permet de spécifier la largeur
de Text en nombre de caractères comme l'indique la doc :
Switch: -width
Specifies the desired width for the window in units of
characters in the font given by the -font option. If
the font doesn't have a uniform width then the width of
the character ``0'' is used in translating from
character units to screen units.
Vous pouvez vérifier que la largeur est exactement 40 caractères.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Mon, 5 Jun 2006 02:46:43 +0200,
"personne" <blabla@hotmail.com> écrivait (wrote):
Excuse moi, mais l'affichage du code a un peu foirer, voila un lien ou
j'ai
poser ma question ainsi que le code :
http://forum.hardware.fr/hardwarefr/Programmation/Tk-Largeur-Text-sujet-91136-1.htm
Manifestement vous ne maitrisez pas vraiment le manipulation des fonts
sousT Tk. Voici un bout de code qui n'utilise pas (directement) les
fonts et qui devrait vous suffire :
------------------------------------------------------------
use Tk;
use Tk::Text;
my $mw = MainWindow->new(-title => "Essai");
$mw->Text(-height => 20,
-width => 40,
-wrap => 'char',
-font => "courrier")->pack;
$mw->Button(-text => "Quit", -command => sub { exit })->pack;
MainLoop;
------------------------------------------------------------
Le fait d'utiliser un font non proportionnelle ("courrier" qui est
disponible sur toutes les plateformes) permet de spécifier la largeur
de Text en nombre de caractères comme l'indique la doc :
Switch: -width
Specifies the desired width for the window in units of
characters in the font given by the -font option. If
the font doesn't have a uniform width then the width of
the character ``0'' is used in translating from
character units to screen units.
Vous pouvez vérifier que la largeur est exactement 40 caractères.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Mon, 5 Jun 2006 02:46:43 +0200,
"personne" écrivait (wrote):Excuse moi, mais l'affichage du code a un peu foirer, voila un lien ou
j'ai
poser ma question ainsi que le code :
http://forum.hardware.fr/hardwarefr/Programmation/Tk-Largeur-Text-sujet-91136-1.htm
Manifestement vous ne maitrisez pas vraiment le manipulation des fonts
sousT Tk. Voici un bout de code qui n'utilise pas (directement) les
fonts et qui devrait vous suffire :
------------------------------------------------------------
use Tk;
use Tk::Text;
my $mw = MainWindow->new(-title => "Essai");
$mw->Text(-height => 20,
-width => 40,
-wrap => 'char',
-font => "courrier")->pack;
$mw->Button(-text => "Quit", -command => sub { exit })->pack;
MainLoop;
------------------------------------------------------------
Le fait d'utiliser un font non proportionnelle ("courrier" qui est
disponible sur toutes les plateformes) permet de spécifier la largeur
de Text en nombre de caractères comme l'indique la doc :
Switch: -width
Specifies the desired width for the window in units of
characters in the font given by the -font option. If
the font doesn't have a uniform width then the width of
the character ``0'' is used in translating from
character units to screen units.
Vous pouvez vérifier que la largeur est exactement 40 caractères.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
Merci, mais le probleme n'est justement pas de savoir la largeure du text
box lors de sa creation (je sais que l'on peu specifier la largeur en terme
de caractaires), mais plutot de recuperer la largeure apres que
l'utilisateur l'ai redimentioner ( donc une fonction qui au lieu de me
donner la largeure en pixels, me la dennerait en term de caractaires).
et c'est ce que j'essai de faire dans la fonction que j'ai presenté, je
calcule la longeure d'une chaine de carataire en pixels en utilisent le font
du text box, et j'ajoute une lettre apres l'autre jusqu'a que la longueur de
la chaine de caractaire en pixels soit plus grande que celle de la largeur
du text box (egualement en pixels), ce qui normalement devrait me donner le
nombre de caractaire qui peut etre afficher sur une ligne. Mais pour une
cause que j'ignore, la foction renvoie un resultat incoherent.
Merci, mais le probleme n'est justement pas de savoir la largeure du text
box lors de sa creation (je sais que l'on peu specifier la largeur en terme
de caractaires), mais plutot de recuperer la largeure apres que
l'utilisateur l'ai redimentioner ( donc une fonction qui au lieu de me
donner la largeure en pixels, me la dennerait en term de caractaires).
et c'est ce que j'essai de faire dans la fonction que j'ai presenté, je
calcule la longeure d'une chaine de carataire en pixels en utilisent le font
du text box, et j'ajoute une lettre apres l'autre jusqu'a que la longueur de
la chaine de caractaire en pixels soit plus grande que celle de la largeur
du text box (egualement en pixels), ce qui normalement devrait me donner le
nombre de caractaire qui peut etre afficher sur une ligne. Mais pour une
cause que j'ignore, la foction renvoie un resultat incoherent.
Merci, mais le probleme n'est justement pas de savoir la largeure du text
box lors de sa creation (je sais que l'on peu specifier la largeur en terme
de caractaires), mais plutot de recuperer la largeure apres que
l'utilisateur l'ai redimentioner ( donc une fonction qui au lieu de me
donner la largeure en pixels, me la dennerait en term de caractaires).
et c'est ce que j'essai de faire dans la fonction que j'ai presenté, je
calcule la longeure d'une chaine de carataire en pixels en utilisent le font
du text box, et j'ajoute une lettre apres l'autre jusqu'a que la longueur de
la chaine de caractaire en pixels soit plus grande que celle de la largeur
du text box (egualement en pixels), ce qui normalement devrait me donner le
nombre de caractaire qui peut etre afficher sur une ligne. Mais pour une
cause que j'ignore, la foction renvoie un resultat incoherent.
À (at) Mon, 5 Jun 2006 16:47:51 +0200,
"personne" écrivait (wrote):Merci, mais le probleme n'est justement pas de savoir la largeure du text
box lors de sa creation (je sais que l'on peu specifier la largeur en
terme
de caractaires), mais plutot de recuperer la largeure apres que
l'utilisateur l'ai redimentioner ( donc une fonction qui au lieu de me
donner la largeure en pixels, me la dennerait en term de caractaires).
et c'est ce que j'essai de faire dans la fonction que j'ai presenté, je
calcule la longeure d'une chaine de carataire en pixels en utilisent le
font
du text box, et j'ajoute une lettre apres l'autre jusqu'a que la longueur
de
la chaine de caractaire en pixels soit plus grande que celle de la
largeur
du text box (egualement en pixels), ce qui normalement devrait me donner
le
nombre de caractaire qui peut etre afficher sur une ligne. Mais pour une
cause que j'ignore, la foction renvoie un resultat incoherent.
Il y avait un bug dans mon script précédent : il fallait lire
"courier" au lieur de "courrier".
Voici une autre proposition (testez la bouton "Show") :
------------------------------------------------------------
use Tk;
use Tk::Dialog;
use Tk::Text;
use Tk::Font;
my $mw = MainWindow->new(-title => "Essai");
my $text = $mw->Text(-height => 20,
-width => 40,
-wrap => 'char',
-font => "courier")->pack(qw/-expand 1 -fill both/);
my $font = $text->cget('-font');
my $bw = $text->cget('-borderwidth');
my $padx = $text->cget('-padx');
$mw->Button(-text => "Show",
-command => sub {
print "Width: ", $text->width, "n";
my $size = 0;
my $cont = 1;
while ($cont) {
$size++;
my $twi = $font->measure("0" x $size);
$cont = ($twi < $text->width - 2 * $bw - 2 * $padx);
}
$size--;
print "Largeur: $sizen";
})->pack;
$mw->Button(-text => "Quit", -command => sub { exit })->pack;
MainLoop;
------------------------------------------------------------
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Mon, 5 Jun 2006 16:47:51 +0200,
"personne" <blabla@hotmail.com> écrivait (wrote):
Merci, mais le probleme n'est justement pas de savoir la largeure du text
box lors de sa creation (je sais que l'on peu specifier la largeur en
terme
de caractaires), mais plutot de recuperer la largeure apres que
l'utilisateur l'ai redimentioner ( donc une fonction qui au lieu de me
donner la largeure en pixels, me la dennerait en term de caractaires).
et c'est ce que j'essai de faire dans la fonction que j'ai presenté, je
calcule la longeure d'une chaine de carataire en pixels en utilisent le
font
du text box, et j'ajoute une lettre apres l'autre jusqu'a que la longueur
de
la chaine de caractaire en pixels soit plus grande que celle de la
largeur
du text box (egualement en pixels), ce qui normalement devrait me donner
le
nombre de caractaire qui peut etre afficher sur une ligne. Mais pour une
cause que j'ignore, la foction renvoie un resultat incoherent.
Il y avait un bug dans mon script précédent : il fallait lire
"courier" au lieur de "courrier".
Voici une autre proposition (testez la bouton "Show") :
------------------------------------------------------------
use Tk;
use Tk::Dialog;
use Tk::Text;
use Tk::Font;
my $mw = MainWindow->new(-title => "Essai");
my $text = $mw->Text(-height => 20,
-width => 40,
-wrap => 'char',
-font => "courier")->pack(qw/-expand 1 -fill both/);
my $font = $text->cget('-font');
my $bw = $text->cget('-borderwidth');
my $padx = $text->cget('-padx');
$mw->Button(-text => "Show",
-command => sub {
print "Width: ", $text->width, "n";
my $size = 0;
my $cont = 1;
while ($cont) {
$size++;
my $twi = $font->measure("0" x $size);
$cont = ($twi < $text->width - 2 * $bw - 2 * $padx);
}
$size--;
print "Largeur: $sizen";
})->pack;
$mw->Button(-text => "Quit", -command => sub { exit })->pack;
MainLoop;
------------------------------------------------------------
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Mon, 5 Jun 2006 16:47:51 +0200,
"personne" écrivait (wrote):Merci, mais le probleme n'est justement pas de savoir la largeure du text
box lors de sa creation (je sais que l'on peu specifier la largeur en
terme
de caractaires), mais plutot de recuperer la largeure apres que
l'utilisateur l'ai redimentioner ( donc une fonction qui au lieu de me
donner la largeure en pixels, me la dennerait en term de caractaires).
et c'est ce que j'essai de faire dans la fonction que j'ai presenté, je
calcule la longeure d'une chaine de carataire en pixels en utilisent le
font
du text box, et j'ajoute une lettre apres l'autre jusqu'a que la longueur
de
la chaine de caractaire en pixels soit plus grande que celle de la
largeur
du text box (egualement en pixels), ce qui normalement devrait me donner
le
nombre de caractaire qui peut etre afficher sur une ligne. Mais pour une
cause que j'ignore, la foction renvoie un resultat incoherent.
Il y avait un bug dans mon script précédent : il fallait lire
"courier" au lieur de "courrier".
Voici une autre proposition (testez la bouton "Show") :
------------------------------------------------------------
use Tk;
use Tk::Dialog;
use Tk::Text;
use Tk::Font;
my $mw = MainWindow->new(-title => "Essai");
my $text = $mw->Text(-height => 20,
-width => 40,
-wrap => 'char',
-font => "courier")->pack(qw/-expand 1 -fill both/);
my $font = $text->cget('-font');
my $bw = $text->cget('-borderwidth');
my $padx = $text->cget('-padx');
$mw->Button(-text => "Show",
-command => sub {
print "Width: ", $text->width, "n";
my $size = 0;
my $cont = 1;
while ($cont) {
$size++;
my $twi = $font->measure("0" x $size);
$cont = ($twi < $text->width - 2 * $bw - 2 * $padx);
}
$size--;
print "Largeur: $sizen";
})->pack;
$mw->Button(-text => "Quit", -command => sub { exit })->pack;
MainLoop;
------------------------------------------------------------
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>