On Tue, 24 Jul 2001 08:27:17 -0500, [EMAIL PROTECTED] said:

| 
|  Does any have the following ...
|  
|  Idiots Guide to PERL Progressbars
|  3 easy Steps to Progressbars & Perl
|  Progressbars by example..
|  etc,  etc, etc,  etc, etc,  etc, etc,  etc, etc,  etc, etc,  etc, etc,
|   etc,
|  etc,  

Eoin,

I use this subroutine to create a window that displays when I transfer a
file in an FTP client I made. Obviously you will have to modify some of
the code.

# code #
#===================
sub CreateProgressWin {
#===================
    $ProgWin = new Win32::GUI::DialogBox(
                -name       => "ProgWin",
                -text       => "Progress Window",
                -size       => [280, 220],
                -pos        => [($screen_width/2)-125,
($screen_height/2)-100],# center it
                -style      =>,
    );
    $ProgWin->AddLabel(
                -name       => "ProgLbl",
                -text       => "Sending",
                -pos        => [10, 10],
                -size       => [$ProgWin->ScaleWidth-20, 70],
                -foreground => [255, 255, 255],
                -background => [0, 0, 0],
    );
    $ProgWin->AddLabel(
                -name       => "ProgLblSize",
                -text       => "0 bytes of 0 bytes",
                -pos        => [45, 65],
                -size       => [$ProgWin->ScaleWidth-40, 20],
                -foreground => [255, 255, 255],
                -background => [0, 0, 0],
    );
    $ProgWin->AddLabel(
                -name       => "ProgLblPercent",
                -text       => "0%",
                -pos        => [($ProgWin->ScaleWidth/2)-15, 90],
                -size       => [50, 20],
                -foreground => [255, 255, 255],
                -background => [0, 0, 0],
    );
    $ProgWin->AddProgressBar(
                -smooth  => 1,
                -name    => "ProgBar",
                -pos     => [0, $ProgWin->ScaleHeight-25],
                -size    => [$ProgWin->ScaleWidth, 25],
    );
    # Abort Button #
    $ProgWin->AddButton(
                -text     => "Abort",
                -name     => "Abort",
                -pos      => [($ProgWin->ScaleWidth()/2)-25,
$ProgWin->ScaleHeight()-60],
                -tabstop  => 1,
                -cancel   => 1,
                -default  => 1,
    );
    $ProgWin->Abort->SetFocus();
}

Then, I initialize my values before the transfer:

# code #
my $track=0;
$ProgWin->ProgLbl->Text("Sending $LocalFile...");
$ProgWin->ProgBar->SetRange(0, 100);
$ProgWin->ProgBar->SetPos(0);
$ProgWin->ProgLblSize->Text("$track bytes of $size bytes sent");
$ProgWin->ProgLblPercent->Text(int($pos)."%");
$ProgWin->Show();

Then, while I read data, I ~SetPos~, although you can do it another way.

# code #
while(1) {
        Win32::GUI::DoEvents();
# I'm actually NOT sure if this is needed
        last if ($abort_trans);
        $ProgWin->ProgLblSize->Text("$track bytes of $size bytes sent");
        $percent = $track/$size;
        $pos = 100*$percent;
        $ProgWin->ProgLblPercent->Text(int($pos)."%");
        $ProgWin->ProgBar->SetPos($pos);
        Win32::GUI::DoEvents();
# Or this...although, I think it helps
        last unless $len = sysread(FILE, $buffer="", $blksize);
        $track += $len;
        my $wlen;
        unless(defined($wlen = $sock->write($buffer,$len)) && $wlen ==
$len) {
            $sock->abort;
            $ProgWin->Hide();
            Msg_Box("Cannot write to remote file $LocalFileName:
$!",48,"Can't Write To File");
            close(FILE); ResetTimer();
            return undef;
        }
    }
    $ProgWin->Hide();
# Then hide it!
# end of code #

I hope this helps!

regards,

erick

Reply via email to