承接上篇 IDE 環境介紹,本文詳細說明 C++ Builder 常用視覺元件的核心屬性、關鍵事件與實戰程式碼範例,涵蓋標籤、按鈕、編輯框、狀態列、工具列、分割器、影像元件與進程啟動等實用技巧。
true 時對應 ESC 鍵true 時為預設按鈕(Enter 鍵觸發)常用事件:OnClick、OnEnter/OnExit(焦點)、OnKeyDown/OnKeyPress/OnKeyUp、OnMouseDown/OnMouseMove/OnMouseUp
true 單一面板,false 多面板true 允許群組全彈起true 扁平風格,滑鼠進入才凸顯TImageList 提供按鈕圖示C++ Builder 3.0 引入,實現視窗動態分割:
Panel1,Align=alLeftSplitter,Align=alLeft,Width=3Panel2,Align=alClient 填滿剩餘區域true 影像自動縮放填滿控制項true 影像置中(不縮放)MouseMoveEditChangeExitButtonvoid __fastcall TForm1::MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) {
StatusBar1->Panels->Items[1]->Text = IntToStr(X); // 面板索引從 0 開始
StatusBar1->Panels->Items[2]->Text = IntToStr(Y);
}
void __fastcall TForm1::ExitButton(TObject *Sender) {
Close();
}
void __fastcall TForm1::EditChange(TObject *Sender) {
// 將編輯框文字轉整數,設定滑鼠螢幕座標
SetCursorPos(Edit1->Text.ToInt(), Edit2->Text.ToInt());
}
void __fastcall TForm1::SpeedExitClick(TObject *Sender) { Close(); }
void __fastcall TForm1::SpeedOpenClick(TObject *Sender) {
Image1->Stretch = true;
OpenDialog1->Filter = "Bmp files (*.bmp)|*.bmp";
if (OpenDialog1->Execute())
Image1->Picture->LoadFromFile(OpenDialog1->FileName);
}
void __fastcall TForm1::SpeedInClick(TObject *Sender) {
Image1->Height += 10;
Image1->Width += 10;
}
void __fastcall TForm1::SpeedOutClick(TObject *Sender) {
Image1->Height -= 10;
Image1->Width -= 10;
}
void __fastcall TForm1::Button1Click(TObject *Sender) {
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;
// 建立進程啟動外部程式
BOOL ok = CreateProcess(
NULL, // 模組名稱(NULL 表示從命令列解析)
Edit1->Text.c_str(), // 完整命令列
NULL, NULL, FALSE, // 安全性/繼承
NORMAL_PRIORITY_CLASS, // 優先權
NULL, NULL, // 環境/目錄
&si, &pi // 啟動資訊/進程資訊
);
if (!ok) {
Application->MessageBox("未指定有效執行檔", "錯誤", MB_OK | MB_ICONERROR);
Edit1->SetFocus();
}
// 可選:CloseHandle(pi.hProcess); CloseHandle(pi.hThread);
}
void __fastcall TForm1::Button2Click(TObject *Sender) { Close(); }
void __fastcall TForm1::Button3Click(TObject *Sender) {
if (OpenDialog1->Execute())
Edit1->Text = OpenDialog1->FileName;
}
| 參數 | 說明 | 常用值 |
|---|---|---|
| lpApplicationName | 模組路徑(NULL 時從命令列第一個 token 取得) | NULL 或完整路徑 |
| lpCommandLine | 完整命令列字串(可包含參數) | Edit->Text.c_str() |
| lpProcessAttributes | 進程安全屬性 | NULL |
| lpThreadAttributes | 主執行緒安全屬性 | NULL |
| bInheritHandles | 子進程是否繼承控制代碼 | FALSE |
| dwCreationFlags | 建立旗標 | NORMAL_PRIORITY_CLASS |
| lpEnvironment | 環境區塊 | NULL(繼承父進程) |
| lpCurrentDirectory | 工作目錄 | NULL(繼承父進程) |
| lpStartupInfo | 啟動資訊結構 | &si |
| lpProcessInformation | 回傳進程資訊 | &pi |