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
}




Reply via email to