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


in reply to Re^2: Refreshing text without flicker with AddLabel using Win32::GUI
in thread Refreshing text without flicker with AddLabel using Win32::GUI

Once the label is created, Win32::GUI doesn't expose a method to let you change the color. You might be able to use a custom Hook method to override painting the label.

An alternative would be to create two labels, one red and one green. Make them identical in size and location in the window. Update the green one when the stock goes up, update the red one if the stock goes down.

  • Comment on Re^3: Refreshing text without flicker with AddLabel using Win32::GUI

Replies are listed 'Best First'.
Re^4: Refreshing text without flicker with AddLabel using Win32::GUI
by Popcorn Dave (Abbot) on Dec 08, 2006 at 05:13 UTC
    That's a great idea! I was thinking I could perhaps "destroy" the label and recreate it every time but that seemed a bit much to have to do. Since that label is the same size, overwriting it should be okay.

    Update:

    Worked like a charm!

    Surprisingly enough, it doesn't seem to complain that you've got two labels in the same place, and will actually update depending on which one you choose.

    use strict; use Win32::GUI; use constant COLOR => '#F4F2E8'; my ($redraw, $count); $count = 0; my $main = Win32::GUI::Window->new( -name => 'Main', -text => 'Redraw Test', -width => 200, -height => 100, -background => COLOR, -onTimer => \&redraw, ); my $arrow_font = Win32::GUI::Font->new( -name => "Wingdings", -size => 28, -bold => 1, ); $main->AddTimer( "redraw", 500 ); my $uparrow = $main->AddLabel( -text => ' ', -left => 55, -font => $arrow_font, -foreground => [255,0,0], -background => COLOR, -top => 10, ); my $dnarrow = $main->AddLabel( -text => ' ', -left => 55, -font => $arrow_font, -foreground => [0,255,0], -background => COLOR, -top => 10, ); $main->Show(); Win32::GUI::Dialog(); sub Main_Terminate { -1; } sub redraw{ $count++; if ($count%2){ $dnarrow->Text(chr(233)); } else {$uparrow->Text(chr(234));} }

    The only thing that I found didn't work is to put '' in the text for the initial label. Once I changed that to ' ' all worked just fine.

    Thanks again for the idea!

    Revolution. Today, 3 O'Clock. Meet behind the monkey bars.