Hi Popcorn Dave,
Two things:
First, the sample code adds a label for each timer event rather than updating the existing label. If you watch memory usage as the test runs, it climbs gradually at each timer event.
Assign the original label to a variable when it is created. Then in redraw_Timer, instead of AddLabel just update $label->Text. This was enough to get rid of the flicker on my system.
This also solves the problem with the extra characters, since it redraws the label text every time.
use strict;
use Win32::GUI();
my $interval = 100;
my $main = Win32::GUI::Window->new(
-name => 'Main',
-width => 150,
-height => 100,
-onTimer => \&redraw_Timer,
);
$main->AddTimer( "redraw_Timer", $interval);
# add the following line
my $label = $main->AddLabel( -text => scalar localtime );
$main->Show();
Win32::GUI::Dialog();
sub Main_Terminate {
-1;
}
sub redraw_Timer{
my $temp = localtime;
# replace the following line
# return $main->AddLabel(-text => $temp);
$label->Text( $temp );
}
Second, there is a noflicker option to Win32::GUI::Window->new, which for some reason defaults to 0.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|