可以在TForm上设置对齐,比如将一个表单设置为alTop,将另一个表单设置为alClient - 这两个表单以明显的方式占据整个屏幕区域。这在申请中是否合理?
我还注意到锚点暴露在表格上 - 但我不能想到它们会对它们有用(分辨率变化?MDI应用程序?)任何想法?
编辑: 我做了一个video about this post来让事情变得更清楚。
答案 0 :(得分:15)
您可以通过设置TForm
属性来像普通控件一样使用Parent
:
procedure TForm1.Button1Click(Sender: TObject);
begin
frmEmbed:= TForm.Create(Self);
frmEmbed.Parent:= Self;
frmEmbed.Width:= 50;
frmEmbed.Height:= 50;
frmEmbed.Align:= alRight;
frmEmbed.Anchors:= [akLeft, akBottom];
frmEmbed.Visible:= True;
end;
您应该对frmEmbed.Align:= alRight;
行发表评论,以了解Anchors
属性的工作原理。
如果您对使用上述内容感兴趣:没有标题栏的父级表格可以替代TFrame
;早期的Delphi版本没有框架,因此使用了父级表格。您可以在遗留代码中找到它们。
答案 1 :(得分:3)
您可以将表单放在另一个表单中。不知道那会有多好。在Delphi1次中,有特殊的第三方控件来路由事件。今天,除了模态对话框之外,它似乎或多或少都是开箱即用的。试试这样:
procedure TMainForm.Button1Click(...);
begin
with TForm.Create(Self) do begin
Caption := 'Internal one';
Parent := Self;
Visible := True;
end;
end;
也许锚点和对齐在这个设置中是有意义的。 毕竟这似乎是如何实现新的“单窗口”IDE布局。
答案 2 :(得分:2)
一个简单的例子是无标题形式(例如win-8都市风格)你可以将一个退出按钮固定在右上角。
但最好的用途是简化制作符合尺寸变化的复杂形式...... 使用akLeft和akRight,可以水平设置水平控制填充空间。使用所有4个锚类似于将客户端设置为alclient,而无需将其包围在其他面板中。
你可以用许多面板做很多关于锚点的事情,但随着形状变得越来越复杂,有时需要在面板上需要几层面板。
当然,使用面板和锚点的组合通常是最好的答案。
答案 3 :(得分:1)
您可以将表单放在任何其他容器组件中。
这对于对接有用,f.i。您可以将表单停靠在页面控制选项卡中,也可以在任何地方停靠。
这也可以作为TFrame的替代品:如果你将一个帧设计为TForm而不是TFrame,它将不会在设计时嵌入,因此无法通过设计时间进行编辑/破坏编辑器。
嵌入式TFrame可以将它们的属性或事件重新定义为嵌入它们的形式,并且这并不总是理想或实用,尤其是当您希望框架易于升级或可重构时。更改的嵌入框架属性最终在DFM中,而不是PAS中,因此在编译时不会出现,并且重构/重命名/等等并不简单。