Thread Zeichen auf Skala verschieben: hin und zurück - will nicht (5 answers)
Opened by pktm at 2005-02-25 17:09

pktm
 2005-02-26 02:41
#52150 #52150
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
So, vorerst mal fertig:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/Perl/bin/perl

use strict;
use warnings;
use Data::Dumper;
use Tk;
use Tk::ToolBar;
use Tk::ROText;

my $VERSION = 0.1;

my @whitespaceOptions = (
[ 'Whitespaces ignorieren'=>1],
['Whitespaces verschieben'=>0],
);
my $bindWhitespaceValue = undef;
my $_debug = 0;

my $mw = Tk::MainWindow->new(-width=>640,-height=>480);
$mw->packPropagate(0);
$mw->update();

# User-Interface:
# Eine große Box die den zu untersuchenden Text enthält
# Buttons für das das Verschieben der Zeichen auf der Skala
# Entry für die Anzahl der Verschiebungen
# Checkbox für whitespaces
# reset-button für Text (Text in variable zwischenspeichern)
# ----
# Optional:
# event. merken welche verschiebung durchgeführt wurde um die rücksicherung nicht
# durch eine Variable erledigen zu lassen
# die häufigsten Zeichen des Textes und Kombinationen
# ----
# Textfeld auslesen: get('1.0', 'end')
# Textfeld löschen: delete('1.0','end');

# -- [ GUI ] -- #

my %window = (); # Kontainer für alle Fenster-Elemente (anstatt Variablen)

$window{text} = $mw->Scrolled('Text',-scrollbars=>'se',);
$window{debugCaption} = $mw->Label(-text=>'Debug:',-justify=>'left',);
$window{debug} = $mw->Scrolled(
'ROText',
-scrollbars=>'se',
-height=>6,
-bg => 'black',
-fg => 'orange',
-wrap => 'word',
);

$window{text}->pack(-side=>'top',-fill=>'x',-anchor=>'w',);
if( $_debug ){
$window{debugCaption}->pack(-side=>'top',-fill=>'x',-anchor=>'w',);
$window{debug}->pack(-side=>'top',-fill=>'x',-anchor=>'w',);
}

$window{ToolBar} = $mw->ToolBar(-movable => 1, -side => 'bottom');

$window{ToolBarLeft} = $window{ToolBar}->ToolButton(
-image => 'navback22',
-tip => 'back',
-command => sub{
back(
$window{text},
$window{ToolBarEntry}->get(),
$bindWhitespaceValue,
), # /&forward
}, # /sub, -command
);

$window{ToolBarEntry} = $window{ToolBar}->ToolEntry();
$window{ToolBarEntry}->insert('0.0', 1); # verscheibung vordefinieren

$window{ToolBarRight} = $window{ToolBar}->ToolButton(
-image => 'navforward22',
-tip => 'forward',
-command => sub{
forward(
$window{text},
$window{ToolBarEntry}->get(),
$bindWhitespaceValue,
), # /&forward
}, # /sub, -command
);
$window{ToolBarSeparator1} = $window{ToolBar}->separator();
$window{ToolBarOptionmenu} = $window{ToolBar}->ToolOptionmenu(
-options => \@whitespaceOptions,
-variable => \$bindWhitespaceValue,
);
#$checkbutton->select

MainLoop;

sub forward {
my $textfeld = shift;
my $verschiebung = shift;
my $ignWhitespaces = shift;

my $altText = $textfeld->get('0.0','end');
my $neuText = undef; # neuer Text komm thier rein

foreach my $z ( split("", $altText) ) {
# sollen whitespaces ignoriert werden? (und ist das aktuelle zeichen eins?)
if ( $ignWhitespaces and $z =~ m/\s/ ){
$neuText .= $z;
}else{
$neuText .= chr((ord($z)+$verschiebung));
}
} # /foreach @text
chop $neuText; # letztes Leerzeichen wegmachen, da die Textarea beim insert immer eines dran hängt

# textfeld löschen
$textfeld->delete('0.0', 'end');

# neuen, codierten Text einfügen
$textfeld->insert('0.0', $neuText);

} # /forward

sub back {
my $textfeld = shift;
my $verschiebung = shift;
my $ignWhitespaces = shift;

$verschiebung *= -1;

forward($textfeld, $verschiebung, $ignWhitespaces);

} # /back


Änderungen / Verbesserungsvorschläge?
Sollen wir das Script noch ein bischen ausarbeiten und unter die GPL stellen?
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )

View full thread Zeichen auf Skala verschieben: hin und zurück - will nicht