公共方法
# 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。