mikepj
asked on
Want a toolbar status window for a modal application...
I need my application to have a "Machine status" tool window so the machine can be controlled using the tool window.
The problem is that this part of the application uses modal windows and I need the tool window to be accessable from any of the windows.
"TestForm" modal window
\ test type 1 modal window
\ test type 2 modal window
What I've found so far is that if I create the form and have it owned by TestForm, the "child" modal forms don't allow you to press buttons on the tool window. What I did so far is that when I display a new "test type" form, I recreate the tool window and make it owned by the "test type".
I think I'm going about this the wrong way. Here's what I've tried:
FormCreate: Not really suitable for various reasons but if I use it anyhow, I can't access the window (it's as though it's owned by another form).
FormShow: If it's put here, I get some pretty ugly flickering when the form loads. LockWindowUpdate didn't help.
FormResize: Definitely not a good idea to put it here; sometimes get access violations even though I'm always checking to ensure the form is there first. Always setting to nil immediatly upon Free.
How can I share this window without recreating it all the time? Hopefully someone has an idea which will fit my situation.
Thanks!
MP
The problem is that this part of the application uses modal windows and I need the tool window to be accessable from any of the windows.
"TestForm" modal window
\ test type 1 modal window
\ test type 2 modal window
What I've found so far is that if I create the form and have it owned by TestForm, the "child" modal forms don't allow you to press buttons on the tool window. What I did so far is that when I display a new "test type" form, I recreate the tool window and make it owned by the "test type".
I think I'm going about this the wrong way. Here's what I've tried:
FormCreate: Not really suitable for various reasons but if I use it anyhow, I can't access the window (it's as though it's owned by another form).
FormShow: If it's put here, I get some pretty ugly flickering when the form loads. LockWindowUpdate didn't help.
FormResize: Definitely not a good idea to put it here; sometimes get access violations even though I'm always checking to ensure the form is there first. Always setting to nil immediatly upon Free.
How can I share this window without recreating it all the time? Hopefully someone has an idea which will fit my situation.
Thanks!
MP
ASKER
Thank you for your reply.
The tool window won't necessarily exist.
If I were to be able to change the order, I would think I would have the same problem because the tool window would instead own the modal test window.
I think I've solved the problem by:
1) using the FormResize event as a time to recreate the window
2) put up a semaphore so that it's impossible for any use of the window to be attempted between FREE and :=nil (there's nothing inbetween them but when I did that, it seems to work fine.)
Thanks again for your comments! Just now I think I'll leave it alone--it works!
MP
The tool window won't necessarily exist.
If I were to be able to change the order, I would think I would have the same problem because the tool window would instead own the modal test window.
I think I've solved the problem by:
1) using the FormResize event as a time to recreate the window
2) put up a semaphore so that it's impossible for any use of the window to be attempted between FREE and :=nil (there's nothing inbetween them but when I did that, it seems to work fine.)
Thanks again for your comments! Just now I think I'll leave it alone--it works!
MP
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
So the answer is:
use the FormResize event as a time to recreate the window
and put up a semaphore so that it's impossible for any use of the window to be
attempted between FREE and :=nil (there's nothing inbetween them but when I did that,
it seems to work fine.
use the FormResize event as a time to recreate the window
and put up a semaphore so that it's impossible for any use of the window to be
attempted between FREE and :=nil (there's nothing inbetween them but when I did that,
it seems to work fine.
ASKER
Hi Moorrees,
I guess you don't know how Experts Exchange works. You've "recycled" my answer; if I were to accept the answer, two things happen:
- nobody will provide a better answer
- I give the points away rather than keeping the points when I had I had provided my own answer.
Thanks,
MP
I guess you don't know how Experts Exchange works. You've "recycled" my answer; if I were to accept the answer, two things happen:
- nobody will provide a better answer
- I give the points away rather than keeping the points when I had I had provided my own answer.
Thanks,
MP
ASKER
Thank you for your answer.
I totally forgot about FormActivate. It works great now--thanks!
I also did the following so frmToBeDestroyed would be made unavailable before destruction started.
frmSave:=frmToBeDestroyed;
frmToBeDestroyed:=nil;
frmSave.Free;
I knew there must have been a better answer!
Thanks,
MP
I totally forgot about FormActivate. It works great now--thanks!
I also did the following so frmToBeDestroyed would be made unavailable before destruction started.
frmSave:=frmToBeDestroyed;
frmToBeDestroyed:=nil;
frmSave.Free;
I knew there must have been a better answer!
Thanks,
MP
ASKER
Found out some more through experience; I figured I'd relate my experiences in case anyone else finds them to be useful.
If form A is the parent of form B I will have problems if I don't destroy form B before closing form A.
I've changed it now so upon activate of form A, form B will be created. Upon close of form A, form B will be destroyed.
If form A is the parent of form B I will have problems if I don't destroy form B before closing form A.
I've changed it now so upon activate of form A, form B will be created. Upon close of form A, form B will be destroyed.
Let your "tool window" create the "machine window"?
Or don't make your tool window a modal window.