(1) 利用系統默認生成的窗體作為主窗體,並為其添加一個主菜單(MainMenu)控件和一個狀態欄控件(StatusBar),並為窗體添加一張圖片作為背景,本實例中所使用的圖片為光盤目錄下的“流水線.jpg”文件。各個控件的布局如圖3.31所示。
圖3.31 系統主窗體
(2) 窗體的屬性設置如表3.4所示。
表3.4 主窗體屬性設置
(3) 雙擊主菜單控件,在菜單編輯器中添加如圖3.32所示的窗體菜單,圖中標識了菜單的層級、Caption屬性和Name屬性。狀態欄控件的設置在第1章中已有說明,請讀者自行參考。
(4) 單擊主菜單中的各個菜單選項,為各個子窗體添加處理代碼。
private
{ Private declarations }
public
{ Public declarations }
//各個MDI子窗體間通過主窗體定義的公共變量來傳遞數據
str,str2,str3,str4:string;
//標識是哪個子窗體來使用上面4個公共變量
//bomflag=1表示BOM窗體使用上面的變量,bomflag=2,3表示主需求窗體使用
bomflag:integer;
end;
var
main: Tmain;
implementation
{$R *.dfm}
uses MaterialsForm,BomForm,CalendarForm,mainrequireForm,mainproduceform,MRPCalForm,
mrphistoryForm;
//---------------打開物料主文件維護子窗口---------------------
procedure Tmain.N4Click(Sender: TObject);
var
newform:Tmaterials;
i,flag:integer;
begin
//flag=0表示該窗體不存在
flag:=0;
for i:=0 to main.MDIChildCount do
begin
// 通過對窗體標題判斷窗體是否存在
if main.MDIChildren[i].Caption='物料主文件維護' then
begin
//如果窗體已存在,則恢復窗體
SendMessage(mdichildren[i].Handle, WM_SYSCOMMAND, SC_restore, 0);
mdichildren[i].Show;
flag:=1;
//退出循環
break;
end;
end;
//若窗體不存在,則創建窗體
if flag=0 then
begin
newform:=Tmaterials.Create(application);
newform.Caption:='物料主文件維護';
end;
end;
//----------------打開物料清單(BOM)子窗體------------------------
procedure Tmain.BOM1Click(Sender: TObject);
var
newform:Tbom;
i,flag:integer;
begin
flag:=0;
for i:=0 to main.MDIChildCount do
begin
// 通過對窗體標題判斷窗體是否存在
if main.MDIChildren[i].Caption='物料清單(BOM)' then
begin
//如果窗體已存在,則恢復窗體
SendMessage(mdichildren[i].Handle, WM_SYSCOMMAND, SC_restore, 0);
mdichildren[i].Show;
//標識窗體已存在
flag:=1;
//退出循環
break;
end;
end;
//若窗體不存在,則創建窗體
if flag=0 then
begin
newform:=Tbom.Create(application);
newform.Caption:='物料清單(BOM)';
end;
end;
//---------平鋪各個子窗體--------------
procedure Tmain.N8Click(Sender: TObject);
begin
Tile;
end;
//------------層疊各個子窗體----------
procedure Tmain.N9Click(Sender: TObject);
begin
Cascade;
end;
//----------關閉主窗體----------------------
procedure Tmain.N3Click(Sender: TObject);
begin
main.Close;
end;
//--------------------------------------------------------------------
// 這裡是【物料主文件】菜單選項和【物料清單(BOM)】菜單選項的Click事件響應處理代碼,其他子窗體相
// 對應的菜單選項處理代碼和上面的代碼基本一致
// 讀者請參考配書光盤中/chapt3/main.pas
//--------------------------------------------------------------------
文本框: 圖3.33 MDI子窗體的設置* 注意: 這些代碼需要根據在創建並保存相應的子窗體後才能添加,否則將導致編譯出錯。例如添加【物料主文件】菜單選項的Clock事件處理代碼,需要先建立一個新的窗體,設置其窗體屬性,尤其是FormStyle屬性必須設為fsMDIChild,同時需要選擇Project | Options...菜單命令,在彈出的對話框的Forms選項卡中,將物料主文件維護窗體(materials)從Auto-Create forms列表框中移到 Available forms列表框中,如圖3.33所示。因為MDI文檔的子窗體默認是隨父窗體自動創建和顯示的,通過上述操作,才可以在程序中動態地生成子窗口。