Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re^2: Passing variables to subroutines and Win32::GUI

by ghettofinger (Monk)
on Aug 21, 2005 at 07:45 UTC ( [id://485499]=note: print w/replies, xml ) Need Help??


in reply to Re: Passing variables to subroutines and Win32::GUI
in thread Passing variables to subroutines and Win32::GUI

That gets me closer, but now that makes my $blah1 variable: Win::32::GUI::Textfield=HASH(01Xc2c35b). I am not sure why this is.

  • Comment on Re^2: Passing variables to subroutines and Win32::GUI

Replies are listed 'Best First'.
Re^3: Passing variables to subroutines and Win32::GUI
by Util (Priest) on Aug 22, 2005 at 04:44 UTC

    What am I missing?
    You are assuming that Button BOK, when calling its own onClick event handler, will pass the text of the Textfield urlfield. This will not work. What *does* get passed is just a copy of the BOK Button object, which you see printing as Win32::GUI::Textfield=HASH(0x1c2c35b). You need to obtain the URL another way.

    In the code below, I get the URL by calling the $urlfield->Text() method within the onClick event handler of the BOK Button.
    I also made these changes:

    • Renamed sub Window_Terminate to sub Main_Terminate, to match the -name you gave your main window.
      A sub named Window_Terminate will never be called in your program, because no object is named Window.
    • Added return 1; to the -onClick sub; Always return 1 from a Win32::GUI event handler, unless you *want* to cause alternate behavior, like ignoring the event.
      For a better explanation, see the Win32::GUI::UserGuide::Concepts documentation, updated last month for version 1.02 of Win32::GUI.
    • Changed the print to Data::Dumper, because it is a better debugging tool.
    • Added -dialogui to Win32::GUI::Window->new(), to enable keyboard navigation.
    • Added -tabstop to AddTextfield() and AddButton(), to allow you to tab between them.
    • Added -ok to AddButton(), to allow you to press the button by pressing ENTER in the text field.
    • Added $urlfield->SetFocus(), so that you don't have to click the Textfield to start typing.
    Working, tested code:
    use strict; use warnings; use Win32::GUI; use Data::Dumper; $Data::Dumper::Useqq = 1; $| = 1; my $main = Win32::GUI::Window->new( -title => 'application', -name => 'Main', -width => 400, -height => 200, -dialogui => 1, ); my $urlfield = $main->AddTextfield( -name => 'urlfield', -text => '', -left => 10, -top => 10, -width => 200, -height => 25, -prompt => ['URL:', 80], -tabstop => 1, ); $main->AddButton( -name => 'BOK', -text => 'GO!', -pos => [148,125], -tabstop => 1, -ok => 1, -onClick => sub { # Either of these work: my $text = $urlfield->Text(); # my $text = $main->urlfield->Text(); SUBMIT( $text ); return 1; }, ); $urlfield->SetFocus(); $main->Show(); Win32::GUI::Dialog(); sub SUBMIT { my ($submitted_url) = @_; print Dumper $submitted_url; } sub Main_Terminate { # -1 = Stop message loop and finish program return -1; }

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://485499]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (6)
As of 2024-04-18 15:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found