Schau doch mal in die widget / widget.bat. Wenn Dir das nicht reicht, beschreib mal genauer, was Du machen willst.
Und denk' an die Lizenzgebühren an IBM ;)
hier sind ein paar Schnippel aus einem Programm von mir, das die Progressbar verwendet:
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
#--------------------------------------------------------------------------
# Fortschrittsbalken:
#--------------------------------------------------------------------------
my $fb_f = $mw->LabFrame(-label => 'Fortschrittsanzeige',
-labelside => 'acrosstop',
);
my $fsb = $fb_f->ProgressBar(
-length => 200,
-width => 13,
-anchor => 'w',
-from => 0,
-to => 100,
-blocks => 10,
-gap => 0,
-colors => [
00 => '#0000FF',
10 => '#1C00FF',
20 => '#3800FF',
30 => '#5500FF',
40 => '#7100FF',
50 => '#8D00FF',
60 => '#AA00FF',
70 => '#C600FF',
80 => '#E200FF',
90 => '#FF00FF',
],
-value => 0,
)
->pack(-side => 'top',
-expand => 1,
-fill => 'x',
);
$Konfig{fsb} = $fsb;
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
sub user_informieren ($) {
#--------------------------------------------------------------------------
# sub : u s e r _ i n f o r m i e r e n
#--------------------------------------------------------------------------
# Autor : CD
# Aufgabe : Informiert den User über den Fortschritt des Programms.
# Dies erfolgt in Form der Anpassung des Fortschrittbalkens.
# Parameter : Anzahl Zeichen in der aktuellen Zeile.
# Rückgabewert : keiner
#--------------------------------------------------------------------------
# 0.0.1 - 21.04.2004 - CD - Erstellt
#--------------------------------------------------------------------------
$Konfig{accsize} += 1 + shift; # + 1 für das 2. Zeichen des Zeilenumbruchs
if ($Konfig{gui}) {
$Konfig{mw}->Unbusy();
$Konfig{fsb}->value(int (100 * $Konfig{accsize} / $Konfig{maxsize}));
$Konfig{mw}->update();
$Konfig{mw}->Busy();
}
else {
local $| = 1;
if ( $Konfig{accsize} / $Konfig{maxsize} >= $Konfig{accperc} ) {
print '#';
$Konfig{accperc} += 0.0125;
print "\n\n" if $Konfig{accsize} == $Konfig{maxsize};
}
}
} # sub user_informieren
(Den else-Zweig kannst Du ignoprieren, der ist für den poor mans progressbar, falls das Tool ohne Tk-Oberfläche läuft.)
$Konfig{maxsize} = -s $Konfig{quelle};
#--------------------------------------------------------------------------
# Eingabedatei bearbeiten:
#--------------------------------------------------------------------------
while (<IN>) {
user_informieren(length);
...
}
Das Programm liest im wesentlichen eine Datei. Der Fortschrittsbalken geht über deren Länge in Byte (oder Zeichen).
Nützt Dir das was?
Dass ich das so gelöst habe, heißt aber noch nicht, dass das die beste Lösung ist. Aber es funktioniert in meinem Fall zufriedenstellend.\n\n
<!--EDIT|Crian|1115829045-->
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