Dan*_*ski 66
这取决于它是视觉还是非视觉组件.原理是相同的,但每种组件都有一些额外的考虑因素.
对于非可视组件
var
C: TMyComponent;
begin
C := TMyComponent.Create(nil);
try
C.MyProperty := MyValue;
//...
finally
C.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
对于可视组件:
本质上,可视组件的创建方式与非可视组件的创建方式相同.但是您必须设置一些其他属性才能使它们可见.
var
C: TMyVisualComponent;
begin
C := TMyVisualComponent.Create(Self);
C.Left := 100;
C.Top := 100;
C.Width := 400;
C.Height := 300;
C.Visible := True;
C.Parent := Self; //Any container: form, panel, ...
C.MyProperty := MyValue,
//...
end;
Run Code Online (Sandbox Code Playgroud)
以上代码的一些解释:
Parent
属性使组件可见.如果忘了它,您的组件将不会显示.(很容易错过那个:))如果你想要很多组件,你可以像上面那样做,但是循环:
var
B: TButton;
i: Integer;
begin
for i := 0 to 9 do
begin
B := TButton.Create(Self);
B.Caption := Format('Button %d', [i]);
B.Parent := Self;
B.Height := 23;
B.Width := 100;
B.Left := 10;
B.Top := 10 + i * 25;
end;
end;
Run Code Online (Sandbox Code Playgroud)
这将在表单的左边框添加10个按钮.如果您想稍后修改按钮,可以将它们存储在列表中.(TComponentList最适合,但也可以看看评论中的建议到这个答案)
如何分配事件处理程序:
您必须创建一个事件处理程序方法并将其分配给event属性.
procedure TForm1.MyButtonClick(Sender: TObject);
var
Button: TButton;
begin
Button := Sender as TButton;
ShowMessage(Button.Caption + ' clicked');
end;
B := TButton.Create;
//...
B.OnClick := MyButtonClick;
Run Code Online (Sandbox Code Playgroud)
gab*_*abr 24
要简化运行时组件创建过程,可以使用GExperts.
示例(以这种方式生成的TButton创建代码):
var
btnTest: TButton;
btnTest := TButton.Create(Self);
with btnTest do
begin
Name := 'btnTest';
Parent := Self;
Left := 272;
Top := 120;
Width := 161;
Height := 41;
Caption := 'Component creation test';
Default := True;
ParentFont := False;
TabOrder := 0;
end;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
66166 次 |
最近记录: |