in reply to How do I get OnMouseOver event to work on a label?

I'm not familiar with Win32GUI, but Gtk2 has a similar behavior with Labels. The labels don't have an underlying lowlevel widget window, so they don't respond to mouse movements. In Gtk2, we get around it by putting the label into what is called an event-box.... then the event-box responds.

Upon googling myself for "Win32GUI label event", it seems the label needs the notify=>1, option. YMMV


I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku
  • Comment on Re: How do I get OnMouseOver event to work on a label?

Replies are listed 'Best First'.
Re^2: How do I get OnMouseOver event to work on a label?
by ZJ.Mike.2009 (Scribe) on Jan 31, 2010 at 02:23 UTC

    Thanks zentara. Problem solved :)

Re^2: How do I get OnMouseOver event to work on a label?
by Anonymous Monk on Jan 31, 2010 at 02:04 UTC

    Thank, Anonymous Monk :) I finally figured it out. I actually had the notify=>1 option in my original script but it didn't work like expected (didn't change the background color of the label) so I removed it afterwards, thinking it was useless. Now I have the notify=>1 option and after several failed experiments, I now realize I have to add the -text => '' option in my script to make things really work.

    Well, it's kind of weird that in order to change the background color of a label I have to add the quite irrelevant -text => '' option. But it does the trick

    Here's the code that works for me. Please note the -text => '' option in the Change() function.:
    use Win32::GUI(); use constant { TME_HOVER => 1, TME_LEAVE => 2, HOVER_DEFAULT => 0xFFFFFFFF, }; $state = 0; $mw = Win32::GUI::Window->new( -title => 'Test', -pos => [170,100], -size => [200,220], ); $label = $mw->AddLabel( -background => [0,0,255], -pos => [ 70, 60 ], -size => [50, 50 ], -notify=>1, -onMouseOver => sub { $label->Change(-background => [255,0,0],-text=>'', ); return 0; }, -onMouseOut => sub { $label->Change(-background => [0,0,255],-text=>'', ); $state=0; return 0;}, -onMouseMove => \&Move, ); $mw->Show(); Win32::GUI::Dialog(); sub Move { return unless $state == 0; $state = 1; $label->TrackMouse(100,TME_HOVER|TME_LEAVE); return 1; }

    And also thanks for the use constant suggestion :)