Mark,
Your problem is much like one that I required a solution to, so using
the example below I attempted a number of different resolutions,
threads, api calls, process calls, in the end the resolution was much
more straight forward.
# Counts to 25 with an "error" at 20
# Perl v5.8.4 built for MSWin32-x86-multi-thread
# Win32-GUI [1.0] Perl-Win32 Graphical User Interface
Extension
use Win32::GUI;
use strict;
my $MainWindow = Win32::GUI::Window->new(
-text => "Main",
-name => "MainWindow",
-pos => [ 200, 200 ],
-size => [ 150, 100 ],
);
$MainWindow->AddButton(
-name => "OpenModal",
-pos => [ 15, 20 ],
-text => "Count to 25",
);
# Moved the Modal window and button outside the sub
my $ModalWindow = Win32::GUI::Window->new(
-text => "Modal",
-name => "ModalWindow",
-pos => [ 220, 220 ],
-size => [ 150, 100 ],
-parent => $MainWindow,
);
my $ModalButton = $ModalWindow->AddButton(
-name => "CloseModal",
-pos => [ 15, 20 ],
-text => "dummyvaldummyval",
);
my $forgotten_value = undef;
$MainWindow->Show();
Win32::GUI::Dialog(); # This is the main dialog sequence
sub OpenModal_Click {
$MainWindow->Disable();
for (my $i=0; $i <= 25; $i++){
if ($i == 20) {
showmodal("Where was I again\?");
}
print $i."\n";
}
$MainWindow->Enable();
$MainWindow->BringWindowToTop();
}
sub MainWindow_Terminate {
-1;
}
sub showmodal {
$ModalButton->Change(-text => @_,);
$ModalWindow->Show();
Win32::GUI::Dialog(); # This dialog sequence is specific to the
modal window
}
sub CloseModal_Click {
ModalWindow_Terminate();
}
sub ModalWindow_Terminate {
$forgotten_value = 20;
$ModalWindow->Hide();
return -1; # This will terminate the modal window dialog
sequence the main dialog sequence will still remain
}
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of
Mark Nettlingham
Sent: Tuesday, November 30, 2004 6:34 AM
To: [email protected]
Subject: [perl-win32-gui-users] Awaiting modal window closure
Hi all,
I'm trying to implement a simple error handling subroutine, which pops
up a modal error message during the main Dialog() phase.
My problem is that when I call my subroutine, the modal window appears,
but my script won't wait for me to close it before carrying on. I've had
a bit of a fiddle, but don't want to start hacking when there's more
than likely a function I've overlooked.
See the code below (adapted from the modal window tutorial)
TIA,
Mark
use Win32::GUI;
$|++;
$MainWindow = Win32::GUI::Window->new(
-text => "Main",
-name => "MainWindow",
-pos => [ 200, 200 ],
-size => [ 150, 100 ],
);
$MainWindow->AddButton(
-name => "OpenModal",
-pos => [ 15, 20 ],
-text => "Open Modal Window",
);
$MainWindow->Show();
Win32::GUI::Dialog();
sub showmodal {
$errmsg = shift;
$ModalWindow = Win32::GUI::Window->new(
-text => "Modal",
-name => "ModalWindow",
-pos => [ 220, 220 ],
-size => [ 150, 100 ],
-parent => $MainWindow, # this is the trick!
);
$ModalWindow->AddButton(
-name => "CloseModal",
-pos => [ 15, 20 ],
-text => $errmsg,
);
$MainWindow->Disable();
$ModalWindow->Show();
#Do something here to wait for modal window to be closed.
}
sub OpenModal_Click {
print "Do stuff that generates an error\n";
showmodal("Error message");
print "I want this to happen after the modal dialog is closed\n"; }
sub CloseModal_Click {
$ModalWindow->Hide();
$MainWindow->Enable();
$MainWindow->BringWindowToTop();
return 1;
}
sub MainWindow_Terminate {
-1;
}
sub ModalWindow_Terminate {
CloseModal_Click();
return 0; # so that $ModalWindow is not destroyed }
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide Read honest & candid
reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://productguide.itmanagersjournal.com/
_______________________________________________
Perl-Win32-GUI-Users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users
This message may contain privileged and/or confidential information. If
you have received this e-mail in error or are not the intended recipient, you
may not use, copy, disseminate or distribute it; do not open any attachments,
delete it immediately from your system and notify the sender promptly by e-mail
that you have done so. Thank you.