VCL (Visual Component Library) 是 C++Builder 快速開發的核心資產。本文系統整理列表框、組合框、標籤、按鈕家族 (Button/BitBtn/SpeedButton)、單選/核取方塊、捲軸、常用對話框等核心元件的屬性、方法、事件與實戰技巧。
列表框與組合框 (ListBox / ComboBox)
核心屬性對照
| 屬性 | 適用 | 說明 |
| Items | 兩者 | TStrings 集合,支援 Add/Insert/Delete/Clear/IndexOf |
| ItemIndex | 兩者 | 目前選取項目索引 (-1=無選取),寫入可程式選取 |
| Sorted | 兩者 | true 自動依升序排序 |
| MultiSelect | ListBox | true 允許多選 (Ctrl/Shift 點選) |
| ExtendedSelection | ListBox | 配合 MultiSelect,啟用 Shift/Ctrl 範圍選取 |
| Columns | ListBox | >1 顯示多欄 (預設 0=單欄) |
| Style | ComboBox | csSimple/csDropDown/csDropDownList/csOwnerDrawFixed/csOwnerDrawVariable |
| MaxLength | ComboBox | 編輯區最大輸入長度 (0=無限) |
| IntegralHeight | ListBox | true 自動調整高度顯示完整行 |
| ItemHeight | 兩者 | OwnerDraw 模式下項目高度 |
三種 ComboBox 模式差異
| Style | 外觀 | 可編輯 | 下拉列表 |
| csSimple | 編輯框+永顯列表 | 是 | 無 (永顯) |
| csDropDown | 編輯框+下拉鈕 | 是 | 點擊顯示 |
| csDropDownList | 唯讀+下拉鈕 | 否 | 點擊顯示 |
關鍵事件
OnClick:列表區點選觸發 (編輯區/下拉鈕不觸發)
OnChange:編輯區文字變更 (僅 csSimple/csDropDown)
OnDropDown:下拉列表展開
OnMeasureItem / OnDrawItem:OwnerDraw 模式自繪
按鈕家族
共通核心屬性
| 屬性 | 說明 |
| Caption | 文字,& 後字元為加速鍵 (如 &OK → OK) |
| ModalResult | 對話框關閉返回值:mrNone(0)/mrOk(1)/mrCancel(2)/mrAbort(3)/mrRetry(4)/mrIgnore(5)/mrYes(6)/mrNo(7)/mrAll(8)/mrNoToAll(9)/mrYesToAll(10) |
| Default | true = Enter 鍵觸發 (僅首個生效) |
| Cancel | true = Esc 鍵觸發 (僅首個生效) |
| Enabled | false 灰顯禁用 |
三類按鈕差異
| 特性 | TButton | TBitBtn | TSpeedButton |
| 基礎類別 | TButtonControl | TButtonControl | TGraphicControl (非視窗化) |
| 圖片支援 | 無 | Glyph 屬性 (支援 4 狀態位圖帶) | Glyph 屬性 (同 BitBtn) |
| 可獲焦點 | 是 | 是 | 否 (Tab 鍵跳過) |
| 預設尺寸 | 75×25 | 75×25 | 25×25 (方形) |
| 分組單選 | 否 | 否 | GroupIndex > 0 時啟用 |
| AllowAllUp | N/A | N/A | 分組中允許全彈起 |
| Down | N/A | N/A | 按下狀態 (分組時互斥) |
單選鈕與核取方塊
- RadioButton:通常置於
RadioGroup 或 GroupBox 實現互斥單選,Checked 屬性讀寫選取狀態
- CheckBox:
AllowGrayed=false (預設) → 二態 (Checked/Unchecked);true → 三態 (cbChecked/cbUnchecked/cbGrayed,用 State 屬性)
- 唯讀顯示技巧:置於
Panel 設 Enabled=false,避免灰顯同時禁用互動
標籤
| 屬性 | 說明 |
| AutoSize | true 自動依文字調整尺寸 |
| FocusControl | 加速鍵目標控制項 (配合 Caption 中 &) |
| ShowAccelChar | true 顯示實際 & 而非底線 |
| Transparent | true 忽略 Color,透顯背景 |
| WordWrap | true 自動換行 |
捲軸
Kind:sbHorizontal/sbVertical
Min/Max:範圍
Position:目前位置
LargeChange/SmallChange:PageUp/Down、鍵盤方向鍵步進
常用對話框
| 元件 | 用途 | 關鍵屬性 | 模態 |
| TOpenDialog | 開啟檔案 | FileName, Filter, InitialDir, Options, DefaultExt, Title | 是 |
| TSaveDialog | 儲存檔案 | 同上 | 是 |
| TOpenPictureDialog | 開啟圖片 (含預覽) | 同上 + 預覽視窗 | 是 |
| TSavePictureDialog | 儲存圖片 | 同上 | 是 |
| TColorDialog | 選取顏色 | Color, Options | 是 |
| TFontDialog | 選取字型 | Font, Device, MinFontSize, MaxFontSize, Options | 是 |
| TFindDialog | 尋找 | FindText, Options | 否 (非模態) |
| TReplaceDialog | 取代 | FindText, ReplaceText, Options | 否 (非模態) |
對話框通用模式
if (OpenDialog1->Execute()) { // Execute() 返回 true = 用戶按 OK
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
}
// 非模態 Find/Replace 需處理 OnFind/OnReplace 事件
Filter 字串格式
// 設計時用 Filter Editor,或手寫:
"文字檔 (*.txt)|*.txt|INI 設定 (*.ini)|*.ini|所有檔 (*.*)|*.*"
// FilterIndex 從 1 起算
熟練掌握 VCL 核心元件特性,能以最少程式碼實現豐富互動,是 C++Builder 高效開發的關鍵技能。
- 上一篇文章: 超星 PDG 格式轉 BMP 圖片實戰:ActiveX 元件整合與批次轉換技巧
- 下一篇文章: C++Builder 取得 Memo/RichEdit 游標行列位置:EM_LINEFROMCHAR 與 EM_LINEINDEX 訊息實戰
Copyright ©
程式碼之家 All Rights Reserved