From: Morbus I. <mo...@di...> - 2002-05-17 20:34:21
|
Good day. I'm the developer of popular AmphetaDesk program: http://www.disobey.com/amphetadesk/ Anyways, I use Win32::GUI to make the GUI for the Windows side of things, and then I use perl2exe to make it into a binary for distribution. This has been working fine for about a year now. In the current release version, I'm using simple perl libraries - no packages or modules. The current code is here: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/amphetadesk/AmphetaDesk/ lib/Windows.pl?rev=1.37&content-type=text/vnd.viewcvs-markup I've recently switched everything over to modules/packages, and the above code has been given a standard modular header: package AmphetaDesk::OS::Windows; use strict; $|++; use AmphetaDesk::Settings; use AmphetaDesk::Utilities; use Win32::GUI; require Exporter; use vars qw( @ISA @EXPORT ); @ISA = qw(Exporter); @EXPORT = qw( gui_init gui_listen gui_note open_url ); Besides the above addition, it's identical to what I've been using in the past. Unfortunately, things aren't working 100%. The main window is drawn correctly, the systray icon is shown, the various menu items will expand, but NOTHING seems to work save the "gui_init" and "gui_listen" routines: - the systray right click menu doesn't show up. - the File>Exit or Tools sub-items display, but don't work. - the X box closes the current window, but doesn't release the memory. I've tried numerous little things to get this working (like EXPORTing all of the my'd variables into the parent namespace, which is now AmphetaDesk::, not main::), and nothing works. Any ideas? -- Morbus Iff ( i'm the droid you're looking for ) Culture: http://www.disobey.com/ and http://www.gamegrene.com/ Tech: http://www.oreillynet.com/pub/au/779 - articles and weblog icq: 2927491 / aim: akaMorbus / yahoo: morbus_iff / jabber.org: morbus |
From: Johan L. <jo...@ba...> - 2002-05-21 07:24:48
|
At 16:34 2002-05-17 -0400, Morbus Iff wrote: >I've recently switched everything over to modules/packages, and >the above code has been given a standard modular header: > > package AmphetaDesk::OS::Windows; [please correct me if I'm wrong here, this is how I understand it to work] Event handlers you create here will be located in this package. Controls will default to calling event handlers in package main unless you -name your controls with the package name as a prefix (e.g. "Amphetadesk::OS::Windows::myWindow"), which makes it difficult to access them[1]. I use modules all the time and I usually place all my event handler subs in package main like this: sub ::myWindow_Terminate { } If you try that, does it work? /J [1] Idea: In a future version of Win32::GUI, the control could keep track of the containing package itself, possibly using caller() to determine which event handler to use. -------- ------ ---- --- -- -- -- - - - - - Johan Lindström Sourcerer @ Boss Casinos jo...@ba... Latest bookmark: "no tv" http://use.perl.org/comments.pl?sid=4416&cid=6621 dmoz (1 of 7): /Computers/Programming/Languages/Perl |
From: Morbus I. <mo...@di...> - 2002-05-21 11:46:59
|
>Controls will default to calling event handlers in package main unless you >-name your controls with the package name as a prefix (e.g. >"Amphetadesk::OS::Windows::myWindow"), which makes it difficult to access >them[1]. > >If you try that, does it work? Yup. Shortly after I sent my original question, I hit upon an old message in the archives saying pretty much the same thing. After changing everything over to the package name (I probably changed too much, but hey), everything is working perfectly. Thanks! -- Morbus Iff ( i'm the droid you're looking for ) Culture: http://www.disobey.com/ and http://www.gamegrene.com/ Tech: http://www.oreillynet.com/pub/au/779 - articles and weblog icq: 2927491 / aim: akaMorbus / yahoo: morbus_iff / jabber.org: morbus |