ポップアップメニューの閉じるを無効にするにはどうしたら?


由香  2005-05-25 04:25:32  No: 15036  IP: [192.*.*.*]

お聞きしたいのですが、実行中にタスクバーとかタイトルバーを右クリック
すると、最大化とか閉じるとか出てくるじゃないですか?その閉じるを押しても
意味がないみたいにできないかなぁと思いました。何かいい方法はないですか?

編集    削除
ちわっす  2005-05-25 04:40:58  No: 15037  IP: [192.*.*.*]

以前MLで投稿されていました。
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=042000

編集    削除
由香  2005-05-25 04:48:47  No: 15038  IP: [192.*.*.*]

タスクバーでの閉じるを制限したい場合はどうすればよいのでしょうか?

編集    削除
にしの  2005-05-25 04:54:15  No: 15039  IP: [192.*.*.*]

ちわっすさんの紹介した方法は試されましたか?

編集    削除
由香  2005-05-25 04:59:26  No: 15040  IP: [192.*.*.*]

はい!試しましたよ!!タイトルバーには閉じるは表示されなかったの
ですが、実行ファイルのタスクバー(画面の一番下にあるやつ)には閉じる
がそのまま有効なんですよ...

編集    削除
にしの  2005-05-25 05:01:32  No: 15041  IP: [192.*.*.*]

失礼しました。
Delphiの基本動作を忘れていました。

FormのシステムメニューをDisableにしても、タスクバーに出ているシステムメニューとは別なので、同じ手順をこちらのメニューに対しても行う必要があります。
タスクバーに出ているシステムメニューの持ち主は、Applicationオブジェクトです。
GetSystemMenu(Handle, FALSE);
で、Formのハンドルを渡しているので、Formのシステムメニューのハンドルが返ってきます。
ここを、
GetSystemMenu(Application.Handle, FALSE);
とすると、アプリケーションのシステムメニューのハンドルが返ってきます。

ちわっすさんの例では、閉じるメニューを削除でしたが、無効化するということでしたら、

procedure TForm1.FormCreate(Sender: TObject);
var
  hMenu: THandle;
begin
  hMenu := GetSystemMenu(Handle, False);
  EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);

  hMenu := GetSystemMenu(Application.Handle, False);
  EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);

end;
というようにしたほうがよいかもしれません。

編集    削除