我正在测试来自此Q& A Component Creation - Joining Components Together?的示例,以了解如何创建自定义/复合组件。
虽然示例中安装的组件可以拖动到表单上,但我似乎无法在运行时创建它。
procedure TForm1.Button1Click(Sender: TObject);
var
MyPanel2 : TMyPanel;
begin
MyPanel2 := TMyPanel.Create(Form1);
With MyPanel2 do
begin
Left := 10;
Top := 10;
Width := 400;
Height := 400;
Visible := True;
Image.Picture.LoadFromFile('C:\test.png');
end;
end;
我尝试将self和Form1作为所有者。使用面板和图像的属性。
不确定我做错了什么。没有错误,除非我忘记添加pngimage到我的用途。完成代码的步骤很好,运行时创建没有任何可视化。
答案 0 :(得分:7)
您需要在运行时代码中设置Parent
。
MyPanel2 := TMyPanel.Create(Self);
with MyPanel2 do
begin
Parent := Self;//oops, you forgot to set this
SetBounds(10, 10, 400, 400);
Image.Picture.LoadFromFile('C:\test.png');
end;
您问题中的代码不会导致控件显示普通的香草TPanel
,或者实际上是任何控件。
来自documentation,强调:
指定控件的父级。
使用Parent属性获取或设置控件的父级。该 控件的父级是包含它的控件。例如,如果 应用程序包括组框中的三个单选按钮 box是三个单选按钮和单选按钮的父级 是组框的子控件。
要作为父级,控件必须是TWinControl的实例 后代。
在运行时创建新控件时,请指定Parent属性 新控件的值。通常,这是一个表单,面板,组合框, 或旨在包含另一个的控件。改变父母 控件在屏幕上移动控件以便在其中显示 新的父母。当父控件移动时,孩子移动 父母。