公共屬性
# Smart 公共屬性、方法和事件
# 1. 大多陣列件共有的屬性
每個元件都有其特定的屬性,但有些屬性對所有的元件是通用的。下面列出一些通用的屬性並附有簡短的說明。
屬性 | 適用範圍 | 功能簡述 |
---|---|---|
Action | 一些元件 | 標識與元件連線的活動對像 |
Align | 一些元件 | 確定空間在其父元件區域內的對齊方式 |
AutoSize | 一些元件 | 元件是否可以根據其內容確定自己的大小 |
BoundRect | 所有元件 | 定義元件矩形連框(運行時用) |
ComponentCount | 所有元件 | 目前元件擁有的元件數目(運行時用) |
ComponentIndex | 所有元件 | 目前元件在父元件列表中的位置(運行時用) |
Components | 所有元件 | 目前元件擁有的子元件陣列(運行時用) |
ControlCount | 所有元件 | 目前元件的自組建數目(運行時用) |
Controls | 所有元件 | 目前元件的子元件陣列(運行時用) |
Color | 大部分元件 | 目前元件的表面背景色 |
Ctl3D | 大部分元件 | 確定元件是否有三維效果 |
Cursor | 所有元件 | 目前元件上的游標形狀 |
DragCursor | 大部分元件 | 目前元件接受拖動時游標的形狀 |
Enabled | 所有元件 | 確定元件是否被啟用 |
Focused | 所有元件 | 確定元件是否被聚焦 |
Font | 所有元件 | 確定元件內顯示的文字字型 |
Handle | 視窗元件 | 元件使用的系統視窗控制代碼(運行時用) |
Height | 所有元件 | 元件的高度 |
Hint | 所有元件 | 元件顯示提示的字串 |
Left | 所有元件 | 元件左上角的水平座標 |
Name | 所有元件 | 元件實體的唯一名稱 |
Owner | 所有元件 | 表示主元件(運行時用,只讀) |
Parent | 所有元件 | 表示父元件 |
ParentFont | 所有元件 | 確定元件是否使用父元件的Font |
ParentCtl3D | 大部分元件 | 確定元件是否使用父元件的Ctl3D |
PopupMenus | 所有元件 | 在元件上單擊游標右鍵時出現的彈出式功能表 |
ShowHint | 所有元件 | 確定是否啟用提示功能 |
TabOrder | 視窗元件 | 確定父元件的切換程式 |
Visible | 所有元件 | 確定元件是否可見 |
Tag | 所有元件 | 儲存一個整形變數的值,無實際意義 |
Top | 所有元件 | 可定位元件的頂部位置 |
Width | 所有元件 | 元件的寬度 |
Caption | 大部分元件 | 該屬性可指定標註元件的文字字串 |
# 1.1. Action 屬性
property Action;
標識與元件連線的活動對象,允許應用程式集中響應使用者的命令。當元件與行為相關聯時,行為確定元件的適當屬性和方法。要在設計程式時建立行為,則在窗體或數據模組上放置行為列表元件。雙擊該行為列表,將出現行為列表編輯器,使用功能表新增行為。使用列表編輯器新增的行為將在對像觀察器中的Action屬性的下拉選單中顯示。
- 應用
爲了節省程式碼的編輯量,可使用ActionList元件來編寫程式碼。雙擊ActionList元件,打開Main.ActionList1對話方塊,單擊「新增」按鈕。在Action1的OnExecute事件中編寫程式碼。在BitBtn1元件和MainMenu1元件的N2的Action屬性中選擇Action1,在單擊BitBtn1元件和MainMenu1元件的N2時,都會呼叫Action1的OnExecute事件。
# 1.2. Align屬性
property Align;
使用該屬性可在窗體或面板上將元件排列到頂端、底端、左邊或右邊,並且即使窗體、面板或包含元件的大小發生變化,也仍然會保持對齊方式。可以使窗體以某種方式對齊,下面是所選對齊方式的說明。
所選內容 | 說明 |
---|---|
alBottom | 元件被移到容器的底端 |
alClient | 使元件填充整個容器 |
alCustom | 以自定義方式顯示窗體 |
alLeft | 元件被移到容器的左端 |
alNone | 元件仍然在其原來的位置 |
alRight | 元件被移到容器的右端 |
alTop | 元件被移到容器的頂端 |
# 1.3. AutoSize屬性
property AutoSize;
說明元件是否可以根據其內容確定自己的大小。將窗體的AutoSize屬性設定為True時,窗體可根據窗體中的內容確定自己的大小,作為該窗體的預設打開的大小。
# 1.4. BoundRect屬性
property BoundRect: TRect read GetBoundsRect write SetBoundsRect;
定義元件矩形連框(運行時用)。通過程式來設定元件的位置和大小。
procedure TMyHandler.BUTTON1CLICK;
var
Rect: TRect;
begin
Rect.Left := 0;
Rect.Top := 0;
Rect.Right := 200;
Rect.Bottom := 200;
FThis.Button1.BoundsRect := Rect;
end;
2
3
4
5
6
7
8
9
10
窗體初始化后,點選Button1按鈕,窗體中的元件將按照指定的設定顯示。
# 1.5. ComponentCount屬性
property ComponentCount: Integer;
使用該屬性查詢或檢查元件擁有的子元件數,或當Components列表重複執行該元件的一些行為時使用該屬性。該屬性由反覆執行程式內部使用。注意,該元件的ComponentCount包含的專案數與該元件Components屬性列表中的專案數相同。
- 應用
ComponentCount屬性用於確定滾動框所擁有的元件數。在程式中,可以使用該屬性利用循環的方式訪問所有者為滾動框的所有元件。下面的程式碼演示瞭如何訪問滾動框所具有的元件。
procedure TMyHandler.BUTTON1CLICK;
var
i: Integer;
begin
FThis.Memo1.Lines.Add('滾動框中的元件數為:' + IntToStr(FThis.ScrollBox1.ComponentCount));
for i := 0 to FThis.ScrollBox1.ComponentCount - 1 do
begin
FThis.Memo1.Lines.Add(FThis.ScrollBox1.Components[i].Name);
end;
end;
procedure TMyHandler.BUTTON2CLICK;
//點選顯示按鈕動態建立元件並顯示
var
i: Integer;
temp: TEdit;
begin
for i := 0 to 5 do
begin
temp := TEdit.Create(FThis.ScrollBox1);
temp.Parent := FThis.ScrollBox1;
temp.Left := 5;
temp.Name := 'Edit' + IntToStr(i);
temp.Top := temp.Height * i + 5;
temp.Text := '屬於滾動框';
temp.Visible := True;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 1.6. ComponentIndex屬性
property ComponentIndex: Integer;
該屬性用於指定元件在其自己的Components屬性陣列中的位置。當重複通過元件的Components列表的擁有者執行某些元件行為時使用該屬性。使用這個屬性可以直接與元件建立聯繫,該熟悉也可以在重複分配過程中內部使用。元件列表中第一個元件的ComponentIndex屬性值為0,第2個元件為1……,當和ComponentIndex一起使用時,ComponentCount屬性的值總是最高的ComponentIndex的值。
# 1.7. Components屬性
property Components[Index: Integer]: TComponent;
使用該屬性可訪問元件內擁有的任何子元件,包含滾動框所擁有的元件。通過該屬性可以訪問到滾動框所擁有的任意一個元件。在介紹ComponentCount屬性及ComponentIndex屬性時,都使用了Components屬性得到相應的元件資訊。Component屬性時一個陣列屬性,包含滾動框所擁有的元件。通過該屬性可以訪問到滾動框所擁有的任意一個元件。在介紹ComponentCount屬性及ComponentIndex屬性時,都使用了Components屬性得到相應的元件資訊。
# 1.8. ControlCount屬性
property ControlCount: Integer;
該屬性用於指定窗體元件的子元件的數量,在重複便利元件的所有子元件時被讀取。元件的所有子元件列在Controls屬性陣列中。該屬性為只讀。
- 應用
ControlCount屬性用於獲得子元件(滾動框中)的數量。在開發程式時,經常需要清空一些文字數據,可以使用該屬性利用循環的方法清空一組數據,程式碼如下:
procedure TMyHandler.BUTTON1CLICK;
var
i: Integer;
begin
for i := 0 to FThis.ScrollBox1.ControlCount - 1 do
begin
if FThis.ScrollBox1.Controls[i] is TEdit then
TEdit(FThis.ScrollBox1.Controls[i]).Text := '';
end;
end;
2
3
4
5
6
7
8
9
10
單擊Button1按鈕,清空編輯框中的文字,如圖所示。
# 1.9. Controls屬性
property Controls[Index: Integer]: TControl;
該屬性時一個包含視窗元件的所有子元件的陣列,便於用數字指定視窗元件的子元件。這個屬性便於用數字指定視窗元件的子元件,在重複遍歷視窗元件的所有子元件時將被用到。該屬性列出了元件的所有子元件,而Components屬性列出了元件所擁有的所有元件。所有放置在窗體中的元件為窗體所擁有,因此即使這些元件是窗體中某一元件的子窗體,也會出現在窗體的Components屬性列表中。該屬性為只讀,使用InsertControl或RemoveControl方法也可以增加或刪除子元件。若要從一個父元件中移動子元件到另外的元件中,則設定子元件的Parent,將在原父元件中處理RemoveControl,在新父元件中處理InsertControl。
- 應用
Control屬性用於列舉所有子元件。在開發程式的過程中,當需要訪問一組元件時,如果直接使用元件名稱訪問元件,既不方便也不靈活。可以使用元件父親(Parent)的Controls屬性訪問元件,程式碼詳見1.1.8節。
# 1.10. Color屬性
property Color nodefault;
目前元件的表面背景顏色。
# 1.11. Ctl3D屬性
property Ctl3D: Boolean;
該屬性用於確定元件是否具有3D或2D外觀,它提供了向後相容性,在32位Windows或NT4.0以上版本中無效。在早期的平臺上,該屬性控制組件是平坦的,還是有傾角的。
# 1.12. Cursor屬性
property Cursor: TCursor read FCursor write SetCursor default crDefault;
顯示目前元件上的游標形狀。
# 1.13. DragCursor屬性
property DragCursor: TCursor read FDragCursor write FDragCursor default crDrag;
目前元件接受拖動時游標的形狀。
# 1.14. Enabled屬性
property Enabled;
確定元件是否啟用。
- 應用
設定元件的可用度,程式碼如下:
procedure TMyHandler.BITBTN1CLICK;
begin
if i = 0 then
begin
FThis.Edit1.Enabled := False;
i := i + 1;
FThis.BitBtn1.Caption := '可用';
end
else
begin
FThis.Edit1.Enabled := True;
i := i - 1;
FThis.BitBtn1.Caption := '不可用';
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1.15. Focused屬性
function TWinControl.Focused: Boolean;
確定元件是否被聚焦。
# 1.16. Font屬性
property Font;
確定元件內顯示的文字字型。
- 應用
單擊Font屬性右邊的「...」按鈕,打開「字型對話方塊」,在「字型」對話方塊中可以對文字的字型、大小、顏色、字形等進行設定。
# 1.17. Handle屬性
property Handle: HWND;
Handle屬性未滾動框提供了訪問底層的Windows螢幕對象的控制代碼。
# 1.18. Height屬性
property Height: Integer read FHeight write SetHeight;
對元件的高度進行設定。
# 1.19. Hint屬性
property Hint: string read FHint write FHint stored IsHintStored;
元件顯示提示的字串。當ShowHint屬性為True時該屬性才可用。對一些無文字的按鈕進行說明。在SpeedButton按鈕的Hint屬性中輸入「獲取檔案的路徑」,將ShowHint屬性設定為True。在運行程式之後,將游標移到SpeedButton按鈕上停留3秒鐘,這時就會顯示一個黃色的說明框。
# 1.20. Left屬性
property Left: Integer read FLeft write SetLeft;
元件左上角的水平座標。
# 1.21. Name屬性
property Name: TComponentName read FName write SetName stored False;
預設時,IDE根據元件的型別設定連續的名稱。該屬性必須是一個有效的識別符號。只能在程式設計時修改元件名稱。在設計程式時,程式設計人員可以根據自己的喜好設定元件的唯一名稱。
# 1.22. Owner屬性
property Owner: TComponent;
使用該屬性可獲得元件的擁有者。當一個元件擁有另一個元件時,釋放其他擁有者記憶體時,也釋放其擁有的記憶體。當刪除一個窗體時,也刪除窗體中的所有元件。建立元件時,元件擁有者由傳遞到建構函式的參數確定。對於在窗體設計器上建立的元件,窗體將自動作為擁有者分配。
- 應用
Owner屬性用於確定元件的所有者,元件的所有者(Owner)主要 有兩個作用:一是當元件釋放時,所有者會釋放掉其擁有的所有元件,二是用於載入和儲存所有者所擁有的所有元件的Published屬性。在預設情況下,窗體擁有其上的所有元件,應用程式 擁有窗體,當窗體釋放時,其上的所有元件均被釋放,,應用程式結束時,它所擁有的記憶體空間被全部釋放。當窗體被載入到記憶體中時,它也將載入其上的所有元件。元件的所有者由建構函式中的參數指定。 下面的例子在窗體建立時構造了一個滾動框元件,其所有者是一個面板,然後通過單擊按 鈕釋放掉面板元件。在試圖訪問滾動框時,程式將出現地址訪問錯誤,其程式碼如下:
procedure TMyHandler.BUTTON1CLICK;
//釋放面板
begin
FThis.Panel1.Free;
end;
procedure TMyHandler.BUTTON2CLICK;
//訪問滾動框
begin
FThis.ScrollBox1.AutoSize := True;
end;
2
3
4
5
6
7
8
9
10
11
單擊「訪問滾動框」按鈕,程式出現地址訪問錯誤。
# 1.23. Parent屬性
property Parent: TWinControl read FParent write SetParent;
使用該屬性可獲得或設定元件的父體,即包含元件的視窗,包含元件稱為父體的子元件。 在程式運行時建立一個新元件時,為其分配該屬性值。父元件通常為窗體面板、組合框或一些可包含元件的元件。
- 應用
將圖示放在狀態列的最左面。
procedure TMyHandler.BUTTON1CLICK;
//將圖示放入狀態列
begin
FThis.Image1.Parent := FThis.StatusBar1;
FThis.Image1.Left := 2;
FThis.Image1.Top := 3;
FThis.Image1.Width := 32;
FThis.Image1.Visible := True;
end;
2
3
4
5
6
7
8
9
運行結果如下圖所示。
# 1.24. ParentFont屬性
property ParentFont;
元件要使用與其父元件相同的字型,則將該屬性設定為True;如果為False,則元件使用自己的Font屬性。將所有的元件的ParentFont屬性設定為True,可確保窗體的元件具有統一性。
# 1.25. ParentCtl3D屬性
property ParentCtl3D: Boolean read FParentCtl3D write SetParentCtl3D default True;
元件要使用與其父元件相同的3D效果。則將該屬性設定為True;如果為False,則元件使用自己的Ctl3D屬性。將所有的元件的ParentCtl3D屬性設定為True,可確保窗體的形狀具有統一性。
# 1.26. PopupMenu屬性
property PopupMenu: TPopupMenu;
為該屬性分配一個值,可使右擊元件后顯示彈出式功能表。如果TPopupMenu對象的這個屬 性為True,則動顯示彈出式功能表;否則從元件的OnContextPopup事件處理粒序中呼叫功能表的Popup方法顯示功能表。
- 應用
PopupMenu屬性確定滾動框關聯的彈出式功能表。如果為該屬性指定一個彈出式功能表,並且彈出式功能表的AutoPopup屬性為True,那麼當用戶用滑鼠右鍵單擊滾動框時將顯示一個彈出式功能表(需在PopupMenu元件中設定右鍵功能表選項),程式碼如下:
begin
This.ScrollBox1.PopupMenu := This.PopupMenu1;
end.
2
3
# 1.27. ShowHint屬性
property ShowHint;
當滑鼠指針在元件上停頓片刻時,可以使用該屬性確定元件是否顯示一個幫助提示。幫助提示是Hint屬性值,在元件旁邊的一個框內顯示。若要允許一個特定元件顯示幫助提示,則應用程式和元件的ShowHint屬性必須為True,或元件的ParentShowHint屬性和其父元件的 ShowHint屬性必須為True。ShowHint屬性用於對一些無文字的按鈕進行說明。在SpeedButton按鈕的Hint屬性中輸入提示資訊,將ShowHint屬性設為True。在運行程式后,將游標移到SpeedButton按鈕上停留3秒鐘,會顯示一個黃色的說明框。
# 1.28. TabOrder屬性
type TTabOrder = -1...32767;
property TabOrder: TTabOrder;
2
該屬性用於在其父元件的標籤順序中指定子元件的位置。當用戶按下Tab鍵后,該屬性是訪問子視窗的順序。當窗體第1次顯示時,該屬性值為0的元件是有焦點的元件。開始,標籤順序總是元件被新增到視窗中的順序。第1次新增到視窗中的元件的該屬性值為0,第2次為1, 依次類推。改變該屬性值可改變標籤順序。在父元件視窗中,每一元件具有惟一的標籤順序值。 如果使用者改變某一元件的TabOrder屬性值使之等於另一元件的TabOrder屬性值,則其他元件的TabOrder值也將改變。如果指定某元件的TabOrder屬性值大於父元件包含的元件數,則移動該元件至標籤順序最後。
僅當元件的TabStop屬性值為True且該元件有父元件時,該屬性才有效(除非窗體沒有父元件,因此不能通過按下Tab鍵訪問該元件。如果要在Tab順序中刪除父元件,則設定父元件的該屬性為False)。
# 1.29. Visible屬性
property Visible;
使用該屬性可控制組件在運行時的可視性。在設計程式時,有時候需要放置元件但不是實時顯示,只有在特定事件觸發的情況下才顯示,這時可使用該屬性進行設定。
# 1.30. Tag屬性
property Tag: Longint;
該屬性沒有預先確定的含義,是為開發人員的使用方便而提供的。可用T儲存另外的整型數值,或輸入32位值,例如元件參數或指針。
Tag屬性足為元件提供的一個附加整數值。該屬性沒有確定的意義,只足爲了方便開發者 而設計的一個整型屬性,能夠儲存一個附加的整數值。在開發程式時,可以為每個元件指定一 個不同的Tag值,在運行程式時,可以根據不同的Tag值區分元件。
# 1.31. Top屬性
property Top: Integer read FTop write SetTop;
使用該屬性可定位元件的頂部位置或將元件重新放罝到一個不同的Y座標位置。
# 1.32. Width屬性
property Width;
使用屬性可讀取或修改元件的寬度。
# 1.33. Caption屬性
property Caption stored IsCustomCaption;
該屬性用於指定標註元件的文字字串,通常作為顯示視窗標題或標註的文字。