今日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
--------------------------------------------------------------------------------------

練習四
還沒想到...
--------------------------------------------------------------------------------------

練習五
也還沒想到...