今日5/12課程大綱::
1。元件介紹
2。元件介紹
3。剩下的元件介紹
4。鍵盤、滑鼠事件偵測
5。各種對話方塊
6。練習
範例檔下載
參考書籍:
C++ Builder 6 完全攻略
金禾資訊
Boland C++ Builder 6 程式設計經典
松崗
一、元件介紹
● Button (standard)
● BitBtn (additional)
有圖片的按鈕
Glyph:設定按鈕上出現的圖片
Kind:自動設定按鈕的樣式,共11種
Layout:設定圖片在按鈕的哪個位置,共4個位置可選擇
Margin:設定圖片到邊界的pixel數
範例4-3
● SpeedButton (additional)
圖形化的按鈕,一般程式menu下方的按鈕都是SpeedButton
AllowAllUp:在同一群組上的所有speedbutton都可以保持不被選取的狀態,也就是沒有凹下去
Down:設定True,表示此按鈕被選取時會是凹下的
Flat:設定等到滑鼠移到按鈕上時,按鈕會浮起來,有立體效果
GroupIndex:可以將一群speedbutton集合成一群組,此群組同時只有一個按鈕可以被選取
範例4-4
● ToolBar (win32)
工具列元件
Align:設定工具列的位置
ToolButton:在工具列上按右鍵新增的按鈕叫做ToolButton
Style:按鈕格式
範例4-5
● CoolBar (win32)
與ToolBar類似,可說是ToolBar的集合
Align:設定CoolBar的位置
CoolBand:在CoolBar上面新增的類似ToolBar的工具列叫做CoolBand
補充:什麼是Dock
可以將某些元件(一般都是工具列)從視窗中獨立出來變成一個小視窗,也可以再結合回去主視窗上
● Label (standard)
● Edit (standard)
編輯框
範例5-2 複製
PasswordChar:若輸入密碼時,希望顯示的是*,則將此屬性質改為*即可
範例5-3 密碼輸入
● MaskEdit (additional)
遮罩編輯框,與編輯框功能相似,但是可以先設定好輸入的格式,
所以當使用者在使用的時候,此元件可以限制使用者輸入的文字。
EditMask:此屬性質即為Edit輸入的限制
例如:
輸入身分證字號== >L<000000000
輸入電話號碼=== \(00\)00000009
輸入出生日期=== 0000/00/00
範例5-4
補充:Mask中可以使用的符號
! 選擇的字元表現在Edit上就像是開頭空白
> 此符號後面的所有英文字母都會被轉成大寫,直到<出現才恢復
< 此符號之後的英文字母都會被轉成小寫,直到>出現才恢復
<> 不檢查英文字母是大寫還是小寫
\ 在要顯示的字元前面加上此符號
L 只可輸入英文字母,且一定要輸入,不分大小寫
I 只可輸入英文字母,但不一定要輸入,不分大小寫
A 可輸入英文或數字,且一定要輸入,英文不分大小寫
a 可輸入英文或數字,但不一定要輸入,英文不分大小寫
C 可輸入任何字元,且一定要輸入
c 可輸入任何字元,但不一定要輸入
0 只可輸入數字,且一定要輸入
9 只可輸入數字,但不一定要輸入
# 可輸入數字或是正負符號
: 分隔時間中的時、分、秒
/ 分隔時間中的年、月、日
; 用來分隔Mask的欄位
- 空白,輸入時會跳過此字元,但是會在Mask上出現
● LabeledEdit (additional)
標籤編輯框,即將 Label 與 Edit 結合。
不需要再使用兩個VCL元件,用 LabeledEdit 來代替就好。
LabeledEdit -> LabelPostion:設定標籤位置
LabeledEdit -> EditLabel -> Caption:設定標籤內容,顯示的值
LabeledEdit -> Text:輸入或輸出編輯框的內容
● StringGrid (additional)
提供一個Grid來儲存相關的文字,例如:填寫表格、報表等
ColCount:設定行數
DefaultColWidth:設定行的寬度,使此StringGrid不需要遇到捲軸
RowCount:設定列數
DefaultRowWidth:設定列的高度,使此StringGrid不需要遇到捲軸
範例5-6
● Memo (standard)
可輸入多行文字的文件,即文字編輯區。
範例5-9
● RichEdit (win32)
與Memo幾乎相同,最大差別在 RichEdit 可以讀寫RTF文件。
範例5-10
● CheckBox (standard)
核取方塊,可以做出可複選的選項。
Alignment:核取方塊與標題名稱的相對位置
Caption:標題名稱
Checked:核取方塊的狀態,若為true表示已被打勾,若為false表示未被打勾或是選項失效
Enabled:設定是否為有效方塊
● RadioButton (standard)
與CheckBox差別在RadioButton是單選的。
Checked:true表示被選取,false表示沒有被核取(預設值)
Enabled:true表示為有效按鈕,可以被選取
● GroupBox (standard)
群組方塊,可以將同類的核取方塊放在一起,使畫面較為簡潔有條理。
另一個好處是,移動群組方塊時,會連裡面的元件一起移動。
與RadioGroup不同的是,GroupBox可以支援其他的元件。
Caption:標題名稱
Enabled:若為false則群組方塊的選項都不能使用
● Panel (standard)
面板,為控制元件提供一個區域,當面版被移動時,上面的元件也會跟著動
Caption:面板的標題
BevelInner、BevelOuter:面板的邊界樣式
BevelWidth:面板的邊界寬度
Locked:設定此面板是否能移動
Visible:設定是否顯示
範例8-1
● ListBox (standard)
可將一群選項,做成列表清單的形式給使用者選取。
Items:此列表盒中的控制項
MultiSelect:設定是否可複選
Sorted:設定是否經過字母排序
ItemIndex:被選取的項目的Index
除了用視窗介面的編輯方式外,還可利用下列函式來控制:
Add:新增
ListBox1->Items->Add("789");
Delete:刪除原有的項目
Clear:刪除所有的項目
範例8-2
● CheckListBox (additional)
選取列表盒與列表盒相似
AllowGrayed:允許某些控制項不得選擇
Items:選取列表盒中的控制項
Sortes:設定是否經過字母排序
範例8-3
● ComboBox (standard)
下拉式選單
Items:ComboBox中的控制項
Sorted:設定ComboBox中的控制項是否經過字母排序
● ScrollBar (standard)
捲軸
Kind:設定此捲軸是垂直還是水平的
LargeChange:有大捲動時捲動的長度
Position:目前捲動到的位置
SmallChange:有小捲動時捲動的長度
● ScrollBox (additional)
捲軸盒,是一個有捲軸的區域;
如果放在Box裡面的元件沒有超出捲軸盒的範圍,那就不會有捲軸出現
HorzScrollBar:橫向捲軸
VertScrollBar:縱向捲軸
● Timer (system)
定時器。可取代用迴圈寫的時間延遲。
Enabled:設定是否啟動Timer事件
Interval:用來設定每隔多少時間就觸動一次Timer事件
預設值1000(一秒),若為0表示不呼叫
● Image (additional)
圖形元件
AutoSize:圖形顯示自動調整以符合圖像大小
Canvas:描繪圖像
Center:圖形置中
Picture:載入圖像
Height:顯示方塊的長度
Width:顯示方塊的寬度
Transparent:背景是否透明
Strecth:是否縮放圖像,若為true則center沒效果
● Shape (additional)
是可以直接畫出各種幾何圖形的元件,而不需要繪圖指令
二、擷取輸入裝置的訊息和事件
鍵盤
OnKeyDown
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{ }
OnKeyUp
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key,
TShiftState Shift)
{ }
OnKeyPress
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{ }
滑鼠
OnClick
void __fastcall TForm1::FormClick(TObject *Sender)
{ }
OnDblClick
OnMouseDown
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{ }
OnMouseMove
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{ }
OnMouseUp
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{ }
OnMouseWheel
OnMouseWheelDown
OnMouseWheelUp
三、對話方塊
元件
● OpenDialog
物件 -> LoadFromFile (OpenDialog1 -> FileName)
● SaveDialog
物件 -> SaveToFile (SaveDialog1 -> FileName)
● OpenPictureDialog
Image1 -> Picture -> LoadFromFile (OpenPictureDialog1 -> FileName)
● SavePictureDialog
Image1 -> Picture -> SaveToFile (SavePictureDialog1 -> FileName)
● FontDialog
Edit1 -> Font = FontDialog1 -> Font
● ColorDialog
函式
● MessageBox
int MessageBox(const char * Text, const char * Caption, int Flags)
EX:Application->MessageBox("測試" , "標題" , 32+3);
Flag語法
0 OK
1 OK、Cancel
3 YES、NO、Cancel
4 YES、NO
5 Retry、Cancel
16 包含錯誤警告圖示
32 包含疑問圖示
回傳值
1 OK
2 Cancel
4 Retry
6 YES
7 NO
● InputBox
AnsiString InputBox(const AnsiString ACaption, const AnsiString APrompt, const AnsiStrng ADefault)
EX:pay=StrToInt(InputBox("本金" , "請輸入本金" , "100"));
● ShowMessage
void ShowMessage(const AsiString Msg)
按下OK後,程式會繼續執行,不會有影響。
四、練習
練習一
偵測按鍵值
Label1->Caption = (int)Key;
--------------------------------------------------------------------------------------
練習二
下載圖檔,任點兩點,求兩點間距離,並標示出兩點座標值
#include<math.h>
sqrt(x) x的根
hypot(x,y) (x平方+y平方)的根值
abs(x) x取絕對值
if ( OpenDialog1 -> Execute() )
{ 物件 -> LoadFromFile (OpenDialog1 -> FileName)
}
--------------------------------------------------------------------------------------
練習三
設定任意四個鍵,使表單中的圖形按照按鍵方向上下左右的移動
且要有兩套方向鍵,一套動的慢,一套動的快
可能會用到的屬性:
Left、Top、Width、Height
也可能會用到第一題的Key
--------------------------------------------------------------------------------------
練習四
還沒想到...
--------------------------------------------------------------------------------------
練習五
也還沒想到...