2

アプリケーションの子フォーム (最小化、復元) を制御するメイン メニュー内のボタンを削除または無効にしたいと考えています。

赤い長方形のボタンを外す

アプリケーションは、MDI 子フォームを常に最大化したままにしておく必要がある "ブラウザー" のように見える必要があります。

私はすでに設定して、それらを無効にしようとしました

BoderIcons := [biSystemMenu];

しかし、私はこれを得ました:

ボタン

私はすでにWM_INITMENUメッセージでメニューコマンドを無効にしようとしましたが、成功しませんでした:

procedure WMInitMenu(var Message: TWMInitMenu); message WM_INITMENU;

procedure TMyMDIChildForm.WMInitMenu(var Message: TWMInitMenu);
begin
  inherited;
  EnableMenuItem(Message.Menu, SC_MAXIMIZE, MF_BYCOMMAND or MF_GRAYED);
  EnableMenuItem(Message.Menu, SC_MINIMIZE, MF_BYCOMMAND or MF_GRAYED);
end;

私は使用しています:

  • Delphi 7.1 エンタープライズ
  • ウィンドウズ 7 プロ x64
4

4 に答える 4

2

あなたは、MDI をあるがままにするほぼすべてのものと戦うことになるでしょう。MDI を使用する代わりに、フレームの使用を検討してください。TFrameUI の 1 つの画面を表す子孫を設計します。インスタンスを に配置して、TPageControl整理しやすくすることができます。TabVisible(画面間を移動する独自の方法を提供する場合は、各ページのプロパティを false に設定します。)

于 2013-10-01T12:47:13.673 に答える
1

MDI は、まさに from (子) を別のフォーム (親) 内にフローティングさせるためのメカニズムです。ポイントが永続的に最大化されていることがわかりません。

コードを分離して他のユニットに含める場合は、フレーム (設計時または実行時に挿入できる) またはフォーム (次のコードを使用) を使用できます。

procedure TParentForm.FormCreate(ASender: TObject);
begin
  FEmbeddedForm := TEmbeddedForm.Create(self);
  FEmbeddedForm.Parent := Panel1;
  FEmbeddedForm.Align := alClient;
  FEmbeddedForm.BorderStyle := bsNone;
  FEmbeddedForm.Visible := True;
end; 
于 2013-10-01T14:44:15.573 に答える