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

Tk::Text, bei Eingabe 'insert' sichtbar?

Leser: 2


<< >> 7 Einträge, 1 Seite
#Kein Kommentar
 2007-12-10 14:42
#103686 #103686
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
hallo,

ich stehe zurzeit mit Tk::Text echt auf dem Kriegsfuß!
ich will einfach, dass wenn der benutzer eine eingabe macht,
das Textwidget automatisch soweit scrollt, sodass die
eingabe immer sichtbar ist.

gut das habe ich so gelöst:
Code: (dl )
$main::widgets{textfeld}-> bind ('<Key>', sub {$main::widgets{textfeld}-> see ('insert');});

allerdings macht er zwar am anfang noch mit, aber irgendwann hört er dann auf!
dann scrollt er nicht mehr automatisch mit, obwohl das event ausgelöst wird!

weiß irgendjemand, wie ich das verhindern kann?
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
#Kein Kommentar
 2007-12-10 14:47
#103687 #103687
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
ok, anscheinend war ich wieder zu voreilig,
Code: (dl )
$main::widgets{textfeld}-> xviewMoveto(1);
tuts.
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
#Kein Kommentar
 2007-12-10 16:48
#103692 #103692
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
ha, zu früh gefreut, funktioniert doch nicht!

der geht mit diesem befehl immer bis zum ende des scrollbalkens und nicht dahin
wo der insert-cursor ist.
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
#Kein Kommentar
 2008-01-20 22:07
#104966 #104966
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
nach langem ausprobieren habe ich herausgefunden, dass der fehler irgendwo in TextUndo liegen muss:

Code: (dl )
1
2
3
4
5
6
7
8
use Tk;
use Tk::TextUndo;

my $mw = tkinit;

my $testundo = $mw-> Scrolled ('TextUndo', -wrap => 'none',)-> pack ();

MainLoop;


wenn man nun über den Rand schreibt, sodass das widget scrollen müsste wird die eingabe nicht angezeigt.

weiß jemand warum???
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
ptk
 2008-01-20 23:43
#104969 #104969
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Betriebssystem?
Spieler
 2008-01-21 00:40
#104970 #104970
User since
2007-09-24
70 Artikel
BenutzerIn
[default_avatar]
Hallo,

geht es so:
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
use Tk;
use Tk::TextUndo;


package Tk::TextUndo;
sub InsertKeypress
{
my ($w,$char)=@_;
return if $char eq '';
if ($char =~ /^\S$/ and !$w->OverstrikeMode and !$w->tagRanges('sel'))
{
my $index = $w->index('insert');
my $undo_item = $w->getUndoAtIndex(-1);
if (defined($undo_item) &&
($undo_item->[0] eq 'delete') &&
($undo_item->[2] == $index)
)
{
$w->SUPER::insert($index,$char);
$undo_item->[2] = $w->index('insert');
$w->see('insert'); #######ergaenzt
return;
}
}
$w->addGlobStart;
$w->SUPER::InsertKeypress($char);
$w->addGlobEnd;
}
package main;


my $mw = tkinit;

my $testundo = $mw-> Scrolled ('TextUndo', -wrap => 'none',)-> pack ();

MainLoop;


Christoph
#Kein Kommentar
 2008-01-21 16:07
#104989 #104989
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
das betriebssystem ist WinXP

@Spieler:
danke so funktioniert es!
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
<< >> 7 Einträge, 1 Seite



View all threads created 2007-12-10 14:42.