可以在 TForm 上设置对齐方式,例如将一个表单设置为 alTop,将另一个表单设置为 alClient - 这两种表单以明显的方式占据了整个屏幕区域。这是在应用程序中做的明智之举吗?
我还注意到锚点暴露在表单上——但我想不出它们有什么用处(分辨率变化?MDI 应用程序?)有什么想法吗?
编辑:我制作了一个关于这篇文章的视频,以使事情更清楚。
可以在 TForm 上设置对齐方式,例如将一个表单设置为 alTop,将另一个表单设置为 alClient - 这两种表单以明显的方式占据了整个屏幕区域。这是在应用程序中做的明智之举吗?
我还注意到锚点暴露在表单上——但我想不出它们有什么用处(分辨率变化?MDI 应用程序?)有什么想法吗?
编辑:我制作了一个关于这篇文章的视频,以使事情更清楚。
你可以通过设置它的属性来使用一个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 版本中不可用,因此使用了父窗体。您可以在遗留代码中找到它们。
您可以将一个表单放在另一个表单中。不知道这会有多好。在 Delphi1 时代,有特殊的 3rd-party 控件来路由事件。今天,除了模态对话框之外,它似乎或多或少是开箱即用的。试试这样:
procedure TMainForm.Button1Click(...);
begin
with TForm.Create(Self) do begin
Caption := 'Internal one';
Parent := Self;
Visible := True;
end;
end;
也许锚点和对齐在这个设置中是有意义的。毕竟,这似乎是如何实现新的“单窗口”IDE 布局的。
一个简单的例子是无标题的表单(例如 win-8 metropolis 样式),您可以将退出按钮锚定在右上角。
但最好的用途是简化制作响应大小变化的复杂表单...使用 akLeft 和 akRight,您可以使水平控件水平填充空间。使用所有 4 个锚点类似于将客户端设置为 alclient,只是不需要用其他面板包围它。
你可以用锚做的大部分事情也可以用许多面板来完成,但是随着表单变得越来越复杂,它会变得很乱,有时需要面板上的几个级别的面板。
当然,使用面板和锚点的组合通常是最好的答案。
您可以将表单放置在任何其他容器组件中。
这对于停靠很有用,您可以将表单停靠在页面控件选项卡或任何地方。
作为 TFrame 的替代品,这也很有用:如果您将框架设计为 TForm 而不是 TFrame,则它在设计时将不可嵌入,因此无法被设计时编辑器编辑/破坏。
嵌入式 TFrame 可以以它们嵌入的形式重新定义它们的属性或事件,这并不总是可取的或实用的,尤其是当您希望框架易于升级或重构时。更改的嵌入框架属性最终出现在 DFM 中,而不是 PAS 中,因此在编译时看不到,并且重构/重命名/等并不简单。