Hello,

I'm just starting to use Win32::GUI and I can't seem to explain the behavior of 
my application.

I have a main perl program that occasionally needs user input. On those 
occasions I call a function (sub) that builds the window and starts the dialog, 
and returns a result gathered from the user input.

The first time this function is called, it works as expected. The user clicks a 
button, the button callback sets a value, and terminates the Dialog(). The 
value that was set is the return value of the function.

However, on the second and following times that the function is called, the 
window is shown, via printouts I can see the return value being set, but when 
the dialog exits and the function is about to return its return value, the 
return value is the default one, in stead of the set one. I assume that it has 
to do something with me, coding the event handlers inside the function that 
does all the gui stuff. If that is so, can someone explain this behavior? I 
don;t mind changing my code, but then I want to understand why it behaves like 
this.

The code is pasted below. The behavior I want is that the user clicks on the 
pass button which returns 1 to the calling function. If you press 'passed' in 
every test, then you'll see the return value is 0 starting from the second call 
to the 'verify' function.


use Win32::GUI();



my $canvas_height = 328;
my $title_height = 32;
my $margin = 15;


for ($i=0; $i<5;$i++){
    my $output = "test $i";
    print "$output ";
    my $result_1 = verify($output);
    print $result_1;
    print " $output\r\n";
}
  

sub verify {
    my $output = shift;
    
    my $result = 0;
    my $main =
    Win32::GUI::DialogBox->new(
                   -name    => 'Main',
                   -width   => 280,
                   -height  => $canvas_height+$title_height,
                   -text    => 'Test Step Output Verification',
                   -helpbox => 0,
                   );
    
    
    my $outputfield = $main->AddTextfield(
                      -name => 'Outputfield',
                      -multiline => 1,
                      -hscroll => 1,
                      -vscroll => 1,
                      -width => 215,
                      -height => 200,
                      -pos => [ $margin, 60],
                      -disabled => 0,
                      -readonly => 1,
                      );
    
    my $pass = $main->AddButton(
                -text => 'Passed',
                -width => 100,
                -height => 25,
                -pos => [$outputfield->Left(),
                     $outputfield->Height() + $outputfield->Top() + $margin],
                -name => 'Pass',
                -tabstop => 1
                );
    
    my $fail = $main->AddButton(
                -text    => 'Failed',
                -width   => 100,
                -height  => 25,
                -pos     => [$outputfield->Left() + $outputfield->Width() - 100,
                         $pass->Top()],
                -name    => 'Fail',
                -tabstop => 1
                );
      
    
    sub Pass_Click {
      $result = 1;
      $outputfield->Text("result : $result");
      -1;
    }
    
    sub Fail_Click {
      $result = 0;
      $outputfield->Text("result : $result");
      -1;
    }
    
    sub Main_Terminate {
    -1;
    }
    
    
    $outputfield->Text($output);
    $main->Show();
    Win32::GUI::Dialog();
    return $result;
}


Thanks for any hints,

luksedj




 
____________________________________________________________________________________
Expecting? Get great news right away with email Auto-Check. 
Try the Yahoo! Mail Beta.
http://advision.webevents.yahoo.com/mailbeta/newmail_tools.html

Reply via email to