Jason P wrote:
Waldemar Biernacki wrote:
Hello!

I've got the following code (at the end if the mail). Here I've got two buttons: one to change label's text and other to change its visibility. The text flip button works fine, whereas that connected with visibility doesn't.

Thanks for an excellent, short, complete bit of code :-)

I believe "-visibility" is supposed to be "-visible"

Yes indeed it is, but that doesn't get you all the way there: all
   $win->Change(-visible => $x)
does is set or unset the WS_VISIBLE style -> You still need a call to Show() to get the window to redraw correctly.

Try it: When you toggle the window state, you'll see no change unless you do something to get the window to redraw (for example minimise it and then restore the window)

Is this a bug with Win32::GUI? Probably, as it's not doing what you would expect, but as Jason points out there are alternative ways.

 but consider the following
$lbl->IsVisible() ? $lbl->Hide() : $lbl->Show();

even easier:
  $label->Show($state);  # $state =0 (SW_HIDE) or 1 (SW_SHOWNORMAL)




A couple of style pointers:
(1) Unless you want lots of constants exported into you namespace, then
    use Win32::GUI();
rather than
    use Win32::GUI;
As of the next release the latter form will elicit warnings.

(2) You don't need the evals in this case - they add overhead, and hide errors until runtime.

This is how my code might look:

#!perl -w
use strict;
use warnings;

use Win32::GUI();

my $state=1;

my $frame = Win32::GUI::Window->new(
    -size => [200,200],
);

my $label = $frame->AddLabel(
    -text => $state,
    -pos  => [110,70],
    -size => [50,50],
);

$frame->AddButton(
    -text    => 'visibility flip button',
    -pos     => [10,20],
    -onClick => sub{
        $state=1-$state;
        $label->Show($state);
    },
);

$frame->AddButton(
    -name    => 'button2',
    -text    => 'text flip button',
    -pos     => [10,120],
    -onClick => sub{
        $state=1-$state;
        $label->Text($state);
    },
);

$frame->Show();
Win32::GUI::Dialog();
$frame->Hide();
exit(0);
__END__

Regards,
Rob.
--
Robert May
Win32::GUI, a perl extension for native Win32 applications
http://perl-win32-gui.sourceforge.net/


Reply via email to