Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5009[/thread]

Tk::Text begrenzen

Leser: 1


<< >> 7 Einträge, 1 Seite
Froschpopo
 2005-05-10 11:50
#44000 #44000
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Wie kann ich nen Tk::Text auf 255 Buchstaben begrenzen?
ptk
 2005-05-10 13:19
#44001 #44001
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Dafuer gibt es keine Unterstuetzung. Man muesste alle Eingabemethoden wie Insert() ueberwachen oder ueberschreiben.
Crian
 2005-05-10 17:38
#44002 #44002
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Vielleicht reicht es, mit repeat alle 1/5 Sekunden die Anzahl zu überwachen und ggf. überstehendes rigoros abzuschneiden?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
coax
 2005-05-10 18:53
#44003 #44003
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Hier 'n kleiner Hack...
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl

package Tk::MyText;

 use Tk::Text;
 use base qw(Tk::Text);

 Tk::Widget->Construct('MyText');

 sub insert {
     my($w, @args) = @_;

     my $max_length = 255;

     my $t = $w->get('1.0', 'end');
     $t =~ s/\n$//s;

     $w->SUPER::insert($args[0],
         substr(join( '' => @args[1 .. $#args]), 0, $max_length - length $t));
 }


1;

package main;

 use strict;
 use warnings;

 use Tk;

 my $mw = tkinit();

 my $t = $mw->MyText()->pack;

 $t->insert('end', 'Doctor Foomanshu');

 MainLoop;

Jetzt musst du's nur noch moeglich machen, dass man eine Option -maxlength angeben kann und die hardcodierte Variable rausloeschen.

Ich hatte es versucht gleich mit einzubauen, aber irgendwie wollte es nicht so wie ich wollte.
Eigentlich muss man doch nur eine Populate-Methode schreiben, dort das maxlength-Argument aus den anderen Argumenten trennen und es der eigenen insert-Methode bekannt machen.
Komischerweise wurde meine Populate-Methode gar nicht erst aufgerufen.
Werde ich mich heute Abend noch einmal dran versuchen.\n\n

<!--EDIT|coax|1115739496-->
,,Das perlt aber heute wieder...'' -- Dittsche
Strat
 2005-05-10 19:03
#44004 #44004
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
versuch's mal mit Tk::Derived anstelle von Construct...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
coax
 2005-05-10 19:30
#44005 #44005
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Danke, mit den Derived tut es. Das Construct scheint trotzdem noetig zu sein.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package Tk::MyText;

 use Tk::Text;
 use Tk::Derived;
 use base qw(Tk::Derived Tk::Text);

 Tk::Widget->Construct('MyText');

 sub insert {
     my($w, @args) = @_;

     $w->SUPER::insert(@args)
         unless $w->cget('-maxlength');

     my $t = $w->get('1.0', 'end');
     $t =~ s/\n$//s;

     $w->SUPER::insert($args[0],
         substr(join( '' => @args[1 .. $#args]),
         0, $w->cget('-maxlength') - length $t));
 }

 sub Populate {
     my($w, $args) = @_;

     $w->ConfigSpecs(-maxlength => [qw(PASSIVE maxLength MaxLength), undef]);
     $w->SUPER::Populate($args);
 }

1;
\n\n

<!--EDIT|coax|1115739472-->
,,Das perlt aber heute wieder...'' -- Dittsche
ptk
 2005-05-10 20:15
#44006 #44006
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Construct ist notwendig, damit der neue Widget-Name ("MyText") als Widget-Constructor etwa in $mw->MyText verwendet werden kann.

Das Ueberschreiben von insert() reicht evtl. nicht --- man muesste vielleicht noch gucken, ob man mit Paste (mittlere Maustaste) trotzdem mehr Text reinkopieren kann.
<< >> 7 Einträge, 1 Seite



View all threads created 2005-05-10 11:50.