TForm上的Align和Anchor属性有什么用?

时间:2012-10-10 03:45:14

标签: forms delphi alignment

可以在TForm上设置对齐,比如将一个表单设置为alTop,将另一个表单设置为alClient - 这两个表单以明显的方式占据整个屏幕区域。这在申请中是否合理?

我还注意到锚点暴露在表格上 - 但我不能想到它们会对它们有用(分辨率变化?MDI应用程序?)任何想法?

编辑: 我做了一个video about this post来让事情变得更清楚。

4 个答案:

答案 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中,因此在编译时不会出现,并且重构/重命名/等等并不简单。