いつもお世話になっております。
またまた初心者的な質問ですみませんが教えてください。
複数のアプリケーション(exe)をTMainmenuから呼び出す処理を
作成しているのですが、アプリ自体は呼出はできているのですが
アプリを呼び出し後にMainMenuは操作できないようにしたいの
ですがどのようにすればよろしいのでしょうか?
Project内ですとShowmodalで呼出もとのFormは操作できない
ようにできるのですがexe間の時はどのようにすればよいのかが
わかりません。
申し訳ございませんがよろしくお願いいたします。
呼び出し後に操作できないようにするには、EnabledをFalseにすれば良いかと思います。
でもやりたいことは違うのでは?
もしかして、
・EXEを起動している間、メニューを操作できなくしたい
ということでしょうか。
EXEが終了したらメニューを再度操作できるようにしたいのではないですか?
そうであれば、EXEの起動にはCreateProcessを使用し、WaitForSingleObjectで終了を待ちましょう。
終了したら、CreateProcessで取得したハンドルを破棄することを忘れずに。
参考に、Mr.XRAYさんのHPにある、Halbowさんが残した資料のURLを書いておきます。
http://homepage2.nifty.com/Mr_XRAY/Halbow/Notes/N001.html
にしのさんありがとうございます。
やりたいことはにしのさんのおっしゃるとおりのこと
です。
CreateProcessでやりたかったことは実現できたので
すが、縮小ボタンや閉じるボタンなどをクリックの時
に動作してしまいます。
この部分は制御されないのでしょうか?
追加の質問なのですがタイトルバーの閉じるボタンを次画面に
行った時に押せないように下記のコードを追加したのですが
なぜかプログラム終了画面が出てきてしまいます。
hMenuHandle := GetSystemMenu(frmMenu.handle,False);
if hMenuHandle <> 0 then
EnableMenuItem(hMenuHandle, SC_CLOSE, (MF_BYCOMMAND + MF_DISABLED));
DrawMenuBar(frmMenu.Handle);
なぜ終了画面が出るのかが不明なのですが。。。
GetSystemMenuの第1引数は、MainMenuのハンドルではなくフォームのハンドルです。
また、これだけだと、タスクバーから閉じることができます。
Application.Handleに対してもする必要があります。
でも、これだけではだめです^^;
Alt+F4で終了することが出来てしまいます。
以上のことをするよりも、OnCloseQueryを使うのが近道だと思いますよ。
ツイート | ![]() |