首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ Builder 程式設計指南(二):常用元件屬性、事件與實作範例

     編輯:關於C++

前言

承接上篇 IDE 環境介紹,本文詳細說明 C++ Builder 常用視覺元件的核心屬性、關鍵事件與實戰程式碼範例,涵蓋標籤、按鈕、編輯框、狀態列、工具列、分割器、影像元件與進程啟動等實用技巧。

一、基礎顯示與輸入元件

1. TLabel(靜態標籤)

  • Align:對齊方式(alNone/alTop/alBottom/alLeft/alRight/alClient)
  • Alignment:文字水平對齊(taLeftJustify/taCenter/taRightJustify)
  • AutoSize:自動依文字大小調整尺寸
  • Caption:顯示文字
  • Font:字體、大小、顏色、樣式

2. TButton(標準按鈕)

  • Cancel:true 時對應 ESC 鍵
  • Default:true 時為預設按鈕(Enter 鍵觸發)
  • ModalResult:模態視窗關閉代碼(mrOk/mrCancel/mrYes/mrNo...)

常用事件:OnClick、OnEnter/OnExit(焦點)、OnKeyDown/OnKeyPress/OnKeyUp、OnMouseDown/OnMouseMove/OnMouseUp

3. TEdit(單行編輯框)

  • AutoSelect:取得焦點時自動全選
  • CharCase:ecNormal/ecUpperCase/ecLowerCase
  • MaxLength:最大輸入長度(0=不限)
  • ReadOnly:唯讀模式
  • Text:執行時顯示/取得的文字內容

4. TStatusBar(狀態列)

  • Panels:面板集合編輯器(可建立多區塊)
  • SimplePanel:true 單一面板,false 多面板
  • SimpleText:單面板模式下的文字

二、進階按鈕與工具列元件

1. TBitBtn(圖片按鈕)

  • Glyph:按鈕圖片(透過 Picture Editor 設定)
  • Layout:圖片相對文字位置(blGlyphLeft/Right/Top/Bottom)
  • Kind:預設行為(bkOK/bkCancel/bkHelp/bkClose...)自動設定 ModalResult

2. TSpeedButton(快速按鈕)

  • GroupIndex:同群組按鈕互斥(單選)
  • AllowAllUp:true 允許群組全彈起
  • Down:按下狀態
  • Glyph:單一點陣圖包含 4 狀態(正常/按下/不可用/保留),需等寬緊鄰排列
  • NumGlyphs:實際狀態圖數量(通常 4)
  • Flat:true 扁平風格,滑鼠進入才凸顯

3. TToolBar(工具列)

  • 右鍵選單可快速「New Button」「New Separator」
  • Images:關聯 TImageList 提供按鈕圖示
  • Flat:按鈕扁平化
  • Wrapable:寬度不足時自動換行

三、分割視窗:TSplitter

C++ Builder 3.0 引入,實現視窗動態分割:

  1. 放置 Panel1,Align=alLeft
  2. 在 Panel1 右邊緣放置 Splitter,Align=alLeft,Width=3
  3. 放置 Panel2,Align=alClient 填滿剩餘區域
  4. 各 Panel 內再放置所需元件

四、影像處理:TImage

  • Picture:載入圖檔(支援 BMP/JPG/GIF/WMF/ICO)
  • Stretch:true 影像自動縮放填滿控制項
  • Center:true 影像置中(不縮放)
  • AutoSize:控制項自動調整至影像原始大小

五、實戰範例一:滑鼠座標即時顯示與反向控制

元件佈局

  • Form1:OnMouseMove → MouseMove
  • Label1/Label2:Caption「滑鼠 X/Y 座標:」
  • Edit1/Edit2:Text="0",OnChange → EditChange
  • Button1:Caption「離開」,OnClick → ExitButton
  • StatusBar1:三個面板(提示、X、Y)

程式碼

void __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());
}

六、實戰範例二:影像開啟/縮放/縮小演示

元件佈局

  • Panel (alTop) 做工具列,放 4 個 SpeedButton:開啟/放大/縮小/離開
  • SpeedButton 屬性:Flat=true, Layout=blGlyphBottom, Glyph 設定圖示
  • TImage:Image1,Stretch=true
  • TOpenDialog:OpenDialog1,Filter="Bmp files (*.bmp)|*.bmp"

程式碼

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;
}

七、實戰範例三:類似「執行」對話框 - 啟動外部程式

元件佈局

  • Label1:Caption "開啟檔案:"
  • Edit1:輸入/顯示執行檔路徑
  • Button1 (Run)、Button2 (Exit)、Button3 (Browse...)
  • TOpenDialog:OpenDialog1,Filter="Executable files (*.exe)|*.exe"

程式碼

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;
}

八、關鍵 API:CreateProcess 參數速查

參數說明常用值
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
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved