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/