2013-10-01 64 views
2

我想要刪除或禁用控制子窗體(最小化,還原)我的應用程序的主菜單中的按鈕。禁用或刪除MDI子窗體最小化和恢復操作

remove buttons at red retangle

應用程序應該看起來像一個「瀏覽器」,其中MDI子窗體必須保持最大化,所有的時間。

我alreday嘗試禁用它們,通過設置

BoderIcons := [biSystemMenu]; 

但我得到這個:

buttons

我alreday試圖禁止在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; 

我正在使用:

  • 德爾福7.1企業
  • 的Windows 7專業版64位
+0

爲什麼不使用常規窗體和標籤或頁面控件?看來你實際上不需要MDI嗎? –

+1

這是一個傳統的應用程序...我們正在適應它一個新的用戶界面與最小的影響可能。 –

回答

2

我通過在MainForm中爲後續代碼攔截WM_COMMAND解決顯示:

type 
    TMDIMainForm = class(TForm) 
    protected 
    procedure WMCommand(var Message: TWMCommand); message WM_COMMAND; 
    end; 

implementation 

procedure TMDIMainForm.WMCommand(var Message: TWMCommand); 
begin 
    case Message.ItemID of 
    SC_CLOSE, SC_MINIMIZE, SC_RESTORE, SC_MAXIMIZE: 
     begin 
     Message.Result := 0; 
     Exit; 
     end; 
    else 
    inherited; 
    end; 
end; 

在孩子形式,我簡單的放置在此:

procedure TMDIChild.OnCreate(Sender: TObject); 
begin 
    WindowState := wsMaximized; 
end; 

現在我的MDI孩子保持最大化,用戶無法恢復或最小化。

2

你要結束了戰鬥幾乎一切,使得MDI它是什麼。不要使用MDI,請考慮使用框架。設計一個TFrame後代來表示您的用戶界面的一個屏幕。您可以將實例放在TPageControl上以幫助組織它們。 (如果您想提供自己的屏幕導航方法,請將每頁的TabVisible屬性設置爲false。)

1

MDI恰恰是將from(child)在另一個表單(父級)內部浮動的機制。看不到永久最大化的點。

如果whant是分離代碼,並將它在其他單元可以使用幀(可以在設計時或在運行時插入)或形式(使用下面的內容代碼)

procedure TParentForm.FormCreate(ASender: TObject); 
begin 
    FEmbeddedForm := TEmbeddedForm.Create(self); 
    FEmbeddedForm.Parent := Panel1; 
    FEmbeddedForm.Align := alClient; 
    FEmbeddedForm.BorderStyle := bsNone; 
    FEmbeddedForm.Visible := True; 
end; 
相關問題