0

私はperlWin32::GUIを使用してデスクトップアプリケーションを開発しています。その中で、私はステータスの識別にプログレスバーを使用しています。プログレスバーの最大レベルを100に設定しました。その点で、長さに従って値をステップアップしています。以下にサンプルコードを書きました。100を入力長で割ってステップアップ値を計算しています。その中で、入力長が奇数の場合、ステップ値は浮動小数点になります。したがって、プログレスバーはその最大レベルを完全には完了していません。たとえば、長さが11の場合、ステップアップ値は9.09になります。プログレスバーは9のみとしてそれを取ります。したがって、進行レベルは99セグメントのみを完了します。100ではありません。提案を共有してください。

use strict;
use Win32;
use Win32::GUI;

my $DOS = Win32::GUI::GetPerlWindow();                   
Win32::GUI::Hide($DOS);

my $Upload_win=Win32::GUI::Window->new(
        -name => 'UploadWindow',
        -text => 'SVN-CHIP-Upload-Tool-V2-HurixSystems',
        -left => 375,
        -top  => 400,
        -width =>520,#370,
        -height =>520,
        #-menu =>$Menu,
        -background => [190,190,190],
        -dialogui   => 1,
        -maximizebox => 0,
);

my $ProcessButton=$Upload_win->AddButton(
        -text => 'Upload',
        -name =>  'uploadbut',
        -size => [90,25],
        -pos  =>  [200,360],
        -background =>  [190,190,190],
        -foreground => [],
        -tabstop => 1,
);
my $Progress_bars=$Upload_win->AddProgressBar(
  -pos=>[20,400],
  -background=>[0,255,85],
  -smooth   => 1,
  -size=>[470,20],

);

$Upload_win->Show();
Win32::GUI::Dialog();
Win32::GUI::Hide($DOS);

sub uploadbut_Click{

  $Progress_bars->SetRange(0,100);
  my $x=11;
  my $y=100/$x;
  for(1..$x){
  Win32::GUI::DoEvents() >= 0;
   $Progress_bars->SetStep($y);
   $Progress_bars->StepIt();
   sleep 1;
  }
}
4

1 に答える 1

2

プログレスバーの長さをステップとステップサイズの積に設定できます。

#!perl

use strict;
use Win32;
use Win32::GUI();

my $DOS = Win32::GUI::GetPerlWindow();                   
Win32::GUI::Hide($DOS);

my $Upload_win=Win32::GUI::Window->new(
    -name => 'UploadWindow',
    -text => 'SVN-CHIP-Upload-Tool-V2-HurixSystems',
    -left => 375,
    -top  => 400,
    -width => 520,
    -height =>520,
    -background => [190,190,190],
    -dialogui   => 1,
    -maximizebox => 0,
);

my $ProcessButton=$Upload_win->AddButton(
    -text => 'Upload',
    -name =>  'uploadbut',
    -size => [90,25],
    -pos  =>  [200,360],
    -background =>  [190,190,190],
    -foreground => [],
    -tabstop => 1,
);
my $Progress_bars=$Upload_win->AddProgressBar(
    -pos=>[20,400],
    -background=>[0,255,85],
    -smooth   => 1,
    -size=>[470,20],
);

$Upload_win->Show();
Win32::GUI::Dialog();
Win32::GUI::Hide($DOS);

sub uploadbut_Click{
    my $intended_max = 100;
    my $x = 11;
    my $y = int($intended_max/$x);

    $Progress_bars->SetRange(0,$x*$y);

    for(1 .. $x){
        Win32::GUI::DoEvents();
        $Progress_bars->SetStep($y);
        $Progress_bars->StepIt();
        Win32::Sleep(1000);
    }
}
于 2012-09-18T17:36:39.430 に答える