C++Builder (CB) 繼承 Delphi 的 RAD 架構,以 C++ 語言產出高效原生碼。本教學將帶領讀者逐步建立一個功能類似 Windows 記事本的文字編輯器,涵蓋檔案開啟/儲存、修改狀態追蹤、UI 狀態同步等核心功能。
| 元件類別 | Name | 關鍵屬性 |
|---|---|---|
| TMemo | edit | 核心編輯區 |
| TButton | bopen | Caption="Open" |
| TButton | bsave | Caption="Save" |
| TButton | bexit | Caption="Exit" |
| TOpenDialog | opendialog | |
| TSaveDialog | savedialog |
TMemo 佔滿剩餘空間 (Align = alClient)void __fastcall TForm1::FormCreate(TObject* Sender) {
bsave->Enabled = false; // 尚未修改,儲存鈕停用
edit->Lines->Clear(); // 清空內容
edit->Enabled = false; // 未開檔前停用編輯區
}
void __fastcall TForm1::bopenClick(TObject* Sender) {
// 1. 若目前內容已修改未存,詢問使用者
if (edit->Modified) {
int yn = Application->MessageBox(
"檔案已修改,是否先儲存?", "開啟檔案",
MB_YESNO | MB_ICONQUESTION);
if (yn == IDYES)
edit->Lines->SaveToFile(savedialog->FileName);
}
// 2. 開啟檔案對話框
edit->Enabled = true;
if (opendialog->Execute()) {
edit->Lines->LoadFromFile(opendialog->FileName);
edit->Modified = false; // 重置修改旗標
bsave->Enabled = false;
// 可選:同步儲存對話框預設檔名
savedialog->FileName = opendialog->FileName;
}
}
void __fastcall TForm1::bsaveClick(TObject* Sender) {
if (savedialog->Execute()) {
edit->Lines->SaveToFile(savedialog->FileName);
edit->Modified = false;
bsave->Enabled = false;
}
}
void __fastcall TForm1::editChange(TObject* Sender) {
bsave->Enabled = true; // 內容一變更即啟用儲存鈕
}
void __fastcall TForm1::bexitClick(TObject* Sender) {
Close(); // 觸發 FormClose -> FormDestroy
}
| 功能 | 實作方向 |
|---|---|
| 另存新檔 | 新增按鈕,強制顯示 SaveDialog |
| 關閉時提示儲存 | 處理 FormCloseQuery,檢查 edit->Modified |
| 編碼支援 (UTF-8/Big5) | 使用 TEncoding,LoadFromFile/FileName, TEncoding::UTF8 |
| 尋找/取代 | TFindDialog/TReplaceDialog + Memo->FindText |
| 列號/行號顯示 | 搭配 TPaintBox 自繪或第三方元件 |
| 語法醒目 | 整合 TSynEdit 開源元件 |
| 拖放開啟檔案 | 處理 WM_DROPFILES,DragAcceptFiles |
TMemo.Lines 封裝 TStrings,提供 LoadFromFile/SaveToFile 高層介面Modified 屬性自動追蹤使用者編輯行為Execute() 為模態,回傳 true 表示使用者按確定這個迷你編輯器展示了 C++Builder 快速開發的核心優勢:視覺化設計 + 少量程式碼 = 完整功能。以此為基礎,逐步加入編碼、搜尋、語法醒目、多文件分頁等功能,即可發展為專業級文字編輯器。