MDI (Multiple Document Interface) 允許單一應用程式同時開啟多個文件視窗。C++ Builder 透過設定表單 FormStyle 屬性即可輕鬆實作:
fsMDIFormfsMDIChild亦可使用專案範本 File | New | Projects | MDI Application 快速產生框架。
MDIMain.cpp,子視窗存為 MDIChild.cpp,專案存為 MDICaption:「MDI演示程式---可開啟多檔案的文字編輯器」| 選單 | 項目 | 事件 |
|---|---|---|
| 檔案 | 新建 | New1Click |
| 開啟 | Open1Click | |
| 退出 | Exit1Click | |
| 視窗 | 層疊 | Tile1Click |
| 平鋪 | Cascade1Click | |
| 排列圖示 | ArrangeIcons1Click |
TSpeedButton) 對應相同事件,並設定 Glyph 圖示OpenDialog 過濾器設定:Rich Text (*.rtf)、Text (*.txt)、All Files (*.*)FormStyle = fsMDIChildOnClick=FormClick, OnClose=FormClose, OnCloseQuery=FormCloseQuery, OnCreate=FormCreateTRichEdit (Name=doc, Align=alClient) 與各種對話框元件 (SaveDialog, PrintDialog, PrinterSetupDialog, FontDialog)void __fastcall TFrameForm::New1Click(TObject *Sender)
{ ChildForm = new TChildForm(this); } // 新建子視窗
void __fastcall TFrameForm::Open1Click(TObject *Sender)
{
if (OpenFileDialog->Execute()) {
ChildForm = new TChildForm(this);
ChildForm->Open(OpenFileDialog->FileName);
}
}
void __fastcall TChildForm::Open(const AnsiString AFileName)
{
PathName = AFileName;
Caption = ExtractFileName(AFileName);
doc->Lines->LoadFromFile(PathName);
doc->SelStart = 0;
doc->Modified = false;
}
void __fastcall TChildForm::Save1Click(TObject *Sender)
{
if (Caption == DefaultFileName) Saveas1Click(Sender);
else { doc->Lines->SaveToFile(PathName); doc->Modified = false; }
}
void __fastcall TChildForm::FormClose(TObject *Sender, TCloseAction &Action)
{ Action = caFree; } // 關閉時釋放記憶體
void __fastcall TChildForm::FormCloseQuery(TObject *Sender, bool &CanClose)
{
if (doc->Modified) {
switch (MessageDlg("Save changes to " + PathName, mtConfirmation,
TMsgDlgButtons() << mbYes << mbNo << mbCancel, 0)) {
case mrYes: Save1Click(this); break;
case mrCancel: CanClose = false; break;
}
}
}
編譯執行後可同時開啟多個文件視窗,支援 RTF/TXT 格式、工具列快捷鍵、列印、字型設定、對齊、自動換行等完整編輯器功能。