Johan, I tested your script with 0.0.665 on Win2k, Works as you describe, shame about the jumping though.
I used to call Dialog this way, (ignorant of modal I admit) then I read methods.html in the docs which states, "note that this function must be called without ANY parameter or instantiation (eg. don't call it as method of a created object): Win32::GUI::Dialog(); # correct $Window->Dialog(); # !!!WRONG!!! " Perhaps Mr Calpini , chose to hide this feature because it still had problems ?? John R > -----Original Message----- > From: Johan Lindstrom [mailto:[EMAIL PROTECTED] > Sent: Tuesday, October 22, 2002 6:51 AM > To: perl-win32-gui-users@lists.sourceforge.net > Subject: [perl-win32-gui-users] HOWTO: Modal windows > > > Aaaarggg!!! I started poking around in GUI.xs, looking for a > solution to my > double event problem, and found the mother of all > undocumented features: > > True modal dialog boxes in Win32::GUI. Well very close anyway... > > I _always_ thought this wasn't possible. Heck, I even wrote > Win32::GUI::Modalizer just to hack (and it is a sorry hack) > around that > absent feature. > > In the event that this is common knowledge and I'm the only > one who didn't > get this obvious thing, I have already prepared a big "Doh!" > for myself > :) If not, this is how to do it. > > Test the script below. > > What I found was that Win32::GUI::Dialog accepts a hwnd > parameter. So you > don't have to call it like this: > > Win32::GUI::Dialog(); > > you can also call it like this: > > $win->Dialog(); > > and then the event loop is restricted to $win, which means > other windows > don't get processed. > > There are still a few things not 100% correct with this: > > - Your windows aren't really connected to the modal window. > This is only > noticable when you switch between other applications and your > GUI program, > in that they don't get moved on top of the other application > when your > modal window gets focus again. > > - There seems to be some problem with mouse events when > clicking in the > main window, and then clicking on the title bar on your modal > window (the > modal window jumps to a new location relative to the previous > click. this > is obviously wrong). > > Apart from that it seems to work. This goes for 0.0.558. Can someone > confirm this behaviour with 0.0.665? > > > In brief: > > - Call it like $win->Dialog(); > - In the Terminate event, or a close-button Click event, > Hide() the modal > window and return -1 to break out of the main loop. The modal > window isn't > destroyed. > > - You can also make a MessageBox modal to a window like this: > $winModeless->MessageBox("Clicked the Test button", "Test"); > > > > #!/usr/local/bin/perl -w > > use strict; > use Win32::GUI; > > my $winModeless = new Win32::GUI::Window( > -left => 13, > -top => 32, > -width => 439, > -height => 260, > -name => "winModeless", > -text => "Win32::GUI::Modalizer Synopsis [1]" > ); > $winModeless->AddButton( > -text => "&Open", > -name => "btnModelessOpen", > -left => 358, > -top => 207, > -width => 70, > -height => 21, > ); > $winModeless->AddButton( > -text => "&Test", > -name => "btnModelessTest", > -left => 358, > -top => 20, > -width => 70, > -height => 21, > ); > > my $winModeless2 = new Win32::GUI::Window( > -left => 100, > -top => 100, > -width => 439, > -height => 260, > -name => "winModeless2", > -text => "Win32::GUI::Modalizer Synopsis [2]" > > ); > > my $winDialog = new Win32::GUI::DialogBox( > -left => 50, > -top => 50, > -width => 439, > -height => 260, > -name => "winDialog", > -text => "Dialog Box", > ); > $winDialog->AddButton( > -text => "&Ok", > -name => "btnDialogOk", > -left => 358, > -top => 207, > -width => 70, > -height => 21, > ); > > > $winModeless->Show(); > $winModeless2->Show(); > > > > #Go modal > Win32::GUI::Dialog(); > > > ##Event handlers > > #Modeless window > sub winModeless_Terminate { > return(-1); > } > sub btnModelessOpen_Click { > $winDialog->Show(); > $winDialog->Dialog(); > return(1); > } > sub btnModelessTest_Click { > $winModeless->MessageBox("Clicked the Test button", > "Test Button"); > return(1); > } > > #Modeless2 window > sub winModeless2_Terminate { > return(-1); > } > > #Dialog window > sub winDialog_Terminate { > $winDialog->Hide(); > return -1; > } > sub btnDialogOk_Click { > $winDialog->Hide(); > print "Ok\n"; > return(-1); > } > > __END__ > > > /J > -------- ------ ---- --- -- -- -- - - - - - > Johan Lindström Sourcerer @ Boss Casinos [EMAIL PROTECTED] > > Latest bookmark: "XEmacs XEmacs and Supporting Libraries and Prog..." > http://xemacs.org/Download/win32/ > dmoz: /Computers/Open_Source/Software/Editors/ 98 > > > > > ------------------------------------------------------- > This sf.net emial is sponsored by: Influence the future > of Java(TM) technology. Join the Java Community > Process(SM) (JCP(SM)) program now. > http://ad.doubleclick.net/clk;4699841;7576298;k?http://www.sun .com/javavote _______________________________________________ Perl-Win32-GUI-Users mailing list Perl-Win32-GUI-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users ############################################################## Disclaimer If this e-mail has been sent to you in error, please notify Océ-Australia Limited immediately and delete this e-mail from your system. Any views expressed in this e-mail are those of the individual sender and may not necessarily reflect the views of Océ-Australia Limited. ##############################################################