http://qs321.pair.com?node_id=587372


in reply to Refreshing text without flicker with AddLabel using Win32::GUI

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.