公共方法
# Smart 公共方法
# 1. 公用方法
元件的對象方法是指可呼叫的過程和函式,可以用它們來執行相應的操作。有的對象方法 在所有的元件中都能使用,而有些只能被少陣列件使用。
對像方法 | 適用範圍 | 功能簡述 |
---|---|---|
BeginDrag | 所有元件 | 開始手工拖動 |
BringToFront | 所有元件 | 將元件放在其他所有元件的前面 |
CanFocus | 所有元件 | 確定元件是否接受焦點 |
Create | 所有元件 | 建立一個新實體 |
Destroy | 所有元件 | 解除實體(程式),實際應呼叫Free方法 |
EndDrag | 所有元件 | 手動終止拖動 |
Free | 所有元件 | 從記憶體中清除對像(窗體應呼叫Release方法) |
GetTextLen | 所有元件 | 返回元件的文字(或標題)長度 |
Hide | 所有元件 | 隱藏元件(與Visible的False取值效果相同) |
InsertControl | 所有元件 | 向當前元件的子元件列表新增新元件 |
SetFocus | 所有元件 | 賦予元件輸入焦點 |
SetTextBuf | 所有元件 | 設定元件的輸入焦點 |
Show | 所有元件 | 顯示元件(與Visible的True取值效果相同) |
Focused | 視窗元件 | 確定元件是否具有焦點 |
# 1.1. BeginDrag方法
procedure BeginDrag(Immediate: Boolean; Threshold: Integer = -1);
只有元件的DragMode屬性值為dmManual時,應用程式才需要呼叫該方法開始拖動操作。
如果Immediate參數為True,則滑鼠指針變為DragCursor屬性值並開始拖動;如果為False, 則滑鼠指針並不變為DragCursor屬性的值且在使用者將滑鼠指針移動一個由Threshold參數指定的畫素數量前沒有開始拖動,並且允許元件在沒有開始拖動或拖靠操作時接受單擊。如果呼叫者傳遞的值小於 0 (該參數的預設值),則該方法將使用全域性變景Mouse的DragThreshold 屬性。
# 1.2. BringToFront方法
procedure BringToFront;
該方法將元件放置在其父元件內所有其他元件的前面。呼叫該方法可確保窗體可見,或重新安排窗體中重疊的元件。元件層疊在每一個其他元件上的(也稱為Z)順序依賴於將元件放置在窗體中的順序。
兩個有視窗元件的層疊順序與兩個無視窗元件相同,例如在一個窗體中放置一個Memo元件,然後在其上放置一個覈取方塊,則覈取方塊保持在上面。對Memo元件呼叫該方法,將移動 Memo元件以使其顯示在覈取方塊之上。層疊順序不能混雜,例如若在一個窗體中放罝一個有視窗的Memo元件,然後在其上放置一個列視窗的標籤元件,則標籤元件在Memo元件後面不顯 示。有視窗元件始終層疊在無視窗元件之上。在該例中,對標籤元件呼叫該方法不會執行任何操作,這個元件將保持在Memo元件后。
# 1.3. CanFocus方法
function CanFocus: Boolean; dynamic;
呼叫該方法可判斷元件是否接收使用者的輸入。如果設定元件和其父元件的Visible和Enabled屬性均為True,則該方法返回True;否則返回False。
- 應用
CanFocus方法用於確定元件能杏獲得焦點。如果視窗元件及其父視窗可見,並且處於啟用狀態,則該方法將返回True,程式碼如下:
constructor TMyHandler.Create(AOwner: TComponent);
begin
FThis :=TBaseForm(AOwner);
FThis.Edit1.Enabled := False;
end;
{方法實現 MODULE-REAL}
procedure TMyHandler.BUTTON1CLICK;
//開始拖動
begin
if FThis.Edit1.CanFocus = False then
ShowMessage('目前元件不能獲得焦點!');
end;
2
3
4
5
6
7
8
9
10
11
12
13
單擊「開始」按鈕,因為Edit1處於未啟用的狀態,所以無法獲得焦點。
# 1.4. Create方法
constructor Create(AOwner: TComponent);
該方法用丁建立並初始化一個實體。在程式運行時,呼叫該方法可以實體化一 個對象;在程式設計時,在窗體中放置元件後會自動動建立該元件的實體。
- 應用
Create方法用於建立並初始化滾動框對象。下面的程式碼是用於手工建立一個滾動框對象。
procedure TMyHandler.BUTTON1CLICK;
//產生滾動框
var
ScrollBox1 : TScrollBox;
begin
ScrollBox1 := TScrollBox.Create(FThis);
ScrollBox1.Align := alClient;
ScrollBox1.Parent := FThis;
end;
2
3
4
5
6
7
8
9
運行結果如圖,點選按鈕後生成一個ScrollBox。
# 1.5. Destroy方法
destructor Destroy; override;
該方法用於從記憶體中刪除對象。在應用程式中不能直接呼叫該方法, 而應先呼叫Free,以檢驗呼叫Destroy前該對像不為空,然後自動呼叫該方法。
# 1.6. EndDrag方法*
procedure EndDrag(Drop: Boolean);
使用該方法可結束一個呼叫BeginDrag方法開始的拖動操作。如果Drop參數為True,則放下或停靠正在拖動的元件;否則不能放下或停靠元件並且取消拖動操作。
# 1.7. GetTextLen方法*
function GetTextLen: Integer;
呼叫該方法可查明元件文字長度,這個大小是GetTextBuf方法需要使用的一個文字緩衝區。
# 1.8. Hide方法*
procedure Hide;
呼叫該方法可隱藏元件,它將元件的Visible屬性設罝為False。雖然隱藏后的元件不可見,但可繼續使用其屬性和方法。
# 1.9. InsertControl方法
procedure InsertControl(AControl: TControl);
該方法用於將元件插入到視窗元件的Controls陣列屬性中,應用程式不需要直接呼叫這個方法。在設計程式時,當新增或刪除時,子元件自動被插入和刪除。在程式運行時,使用子元件的Parent屬性將其插入到Controls陣列中。如果子元件己經是另一視窗元件的子元件,設定其Parent屬性,以保證該子元件從原來的父元件的Controls陣列中刪除。AControl參數用於指定插入到Controls陣列中的子元件。
- 應用
InsertControl方法用於將指定元件插入到目前元件的元件陣列中。在應用程式中不能直接呼叫InsertControl方法將子元件插入到元件中,而應設定子元件的Parent屬性,因為如果子元件已經是某個視窗元件的子元件,使用Parent屬效能夠保證子元件從其原來的父視窗中刪除。
procedure TMyHandler.BUTTON1CLICK;
begin
FThis.RemoveControl(FThis.Edit1);
FThis.ScrollBox1.InsertControl(FThis.Edit1);
end;
2
3
4
5
# 1.10. SetFocus方法
procedure SetFocus; virtual;
使用該方法可改變視窗元件的焦點。當元件有焦點時,可接收鍵盤事件。
- 應用
SetFocus方法的作用是使視窗元件獲得焦點,以下顯示的是點選按鈕切換焦點的程式。
procedure TMyHandler.BITBTN1CLICK;
//點選輪流切換焦點
begin
if i = 0 then
begin
FThis.Edit1.SetFocus;
i := i + 1;
end
else
begin
FThis.Edit2.SetFocus;
i := i - 1;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1.11. SetTextBuf方法*
procedure SetTextBuf(BufYer: PChar);
該方法將元件的文字設定為在指定緩衝區內的文字,文字被設定為由Buffer參數指向的緩衝區內文字。這個方法用於發送WM_SETTEXT和CM_TEXTCHANGED訊息。要使用AnsiString設定元件的文字,可用Text屬性代替。
# 1.12. Show 方法*
procedure Show;
該方法用於將一個隱藏元件的Visible屬性設定為True使其可見,並確保其父元件也可見。
# 1.13. Focused方法*
function Focused: Boolean; dynamic;
該方法用於確定視窗元件是否具有輸入焦點,即是否為啟用元件。返回True時,有輸入焦點;否則沒有,即使用者與該元件不能互動。Focused方法用於確定視窗紐件是杏有輸入焦點,如果視窗元件為目前元件,則該方法返回True。