我正在测试这个Q&A 组件创建的例子 - 将组件连接在一起?了解如何创建自定义/复合组件.
虽然示例中安装的组件可以拖动到表单,但我似乎无法在运行时创建它.
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;
Run Code Online (Sandbox Code Playgroud)
我尝试了自己和Form1作为所有者.使用面板和图像的属性.
只是不确定我做错了什么.没有错误,除非我忘记添加pngimage到我的用途.完成代码的步骤很好,运行时创建没有任何可视化.
您需要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;
Run Code Online (Sandbox Code Playgroud)
您问题中的代码不会导致控件显示普通香草TPanel,或实际上任何控件.
从文档中,我强调:
指定控件的父级.
使用Parent属性来获取或设置控件的父级.控件的父级是包含它的控件.例如,如果应用程序在组框中包含三个单选按钮,则组框是三个单选按钮的父级,单选按钮是组框的子控件.
要充当父级,控件必须是TWinControl后代的实例.
在运行时创建新控件时,为新控件指定Parent属性值.通常,这是一个表单,面板,组框或旨在包含另一个的控件.更改控件的父级会在屏幕上移动控件,以便在新父级中显示它.当父控件移动时,子控件随父控件一起移动.