是否可以在没有*.dfm和*.pas文件的情况下动态创建表单?

Mar*_*ner 6 delphi dynamic createinstance tform delphi-xe2

是否可以创建和显示TForm而无需源文件?我想在运行时创建我的表单,并且空的*.dfm和*.pas文件对我来说似乎没用.

谢谢

And*_*and 10

你的意思是这样的吗?

procedure TForm1.Button1Click(Sender: TObject);
var
  Form: TForm;
  Lbl: TLabel;
  Btn: TButton;
begin

  Form := TForm.Create(nil);
  try
    Form.BorderStyle := bsDialog;
    Form.Caption := 'My Dynamic Form!';
    Form.Position := poScreenCenter;
    Form.ClientWidth := 400;
    Form.ClientHeight := 200;
    Lbl := TLabel.Create(Form);
    Lbl.Parent := Form;
    Lbl.Caption := 'Hello World!';
    Lbl.Top := 10;
    Lbl.Left := 10;
    Lbl.Font.Size := 24;
    Btn := TButton.Create(Form);
    Btn.Parent := Form;
    Btn.Caption := 'Close';
    Btn.ModalResult := mrClose;
    Btn.Left := Form.ClientWidth - Btn.Width - 16;
    Btn.Top := Form.ClientHeight - Btn.Height - 16;
    Form.ShowModal;
  finally
    Form.Free;
  end;

end;
Run Code Online (Sandbox Code Playgroud)

  • @Martin .dfm文件解析将.dfm文件转换为属性赋值,就像Andreas的优秀答案中的代码一样. (4认同)
  • @Jerry:我通常给控件显式变量,因为我倾向于需要那些.例如,我可能想做`Btn2.Left:= Btn1.Left + Btn1.Width + 16`. (3认同)
  • @MartinReiner请注意,在运行时实例化它们依赖于被调用的Loaded方法时,相当多的组件都不容易使用.这通常只通过流机制发生,即在设计时将组件放在表单上.这是我不仅仅看到"模糊"的鲜为人知的组件.许多组件开发人员都认为一切都是在设计时完成的. (3认同)
  • +1好答案.另外,您不必为添加到表单的每个控件使用变量.例如,您可以使用`with TLabel.Create(Form)do`添加标签并修改其属性.德尔福将为其分配一个唯一的名称,您可以根据需要进行更改. (2认同)