6

可以在 TForm 上设置对齐方式,例如将一个表单设置为 alTop,将另一个表单设置为 alClient - 这两种表单以明显的方式占据了整个屏幕区域。这是在应用程序中做的明智之举吗?

我还注意到锚点暴露在表单上——但我想不出它们有什么用处(分辨率变化?MDI 应用程序?)有什么想法吗?

编辑:我制作了一个关于这篇文章的视频,以使事情更清楚。

4

4 回答 4

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 版本中不可用,因此使用了父窗体。您可以在遗留代码中找到它们。

于 2012-10-10T05:06:13.020 回答
3

您可以将一个表单放在另一个表单中。不知道这会有多好。在 Delphi1 时代,有特殊的 3rd-party 控件来路由事件。今天,除了模态对话框之外,它似乎或多或少是开箱即用的。试试这样:

procedure TMainForm.Button1Click(...);
begin
  with TForm.Create(Self) do begin
       Caption := 'Internal one';
       Parent := Self;
       Visible := True;
  end;    
end;    

也许锚点和对齐在这个设置中是有意义的。毕竟,这似乎是如何实现新的“单窗口”IDE 布局的。

于 2012-10-10T06:57:41.667 回答
2

一个简单的例子是无标题的表单(例如 win-8 metropolis 样式),您可以将退出按钮锚定在右上角。

但最好的用途是简化制作响应大小变化的复杂表单...使用 akLeft 和 akRight,您可以使水平控件水平填充空间。使用所有 4 个锚点类似于将客户端设置为 alclient,只是不需要用其他面板包围它。

你可以用锚做的大部分事情也可以用许多面板来完成,但是随着表单变得越来越复杂,它会变得很乱,有时需要面板上的几个级别的面板。

当然,使用面板和锚点的组合通常是最好的答案。

于 2012-10-24T17:33:25.220 回答
1

您可以将表单放置在任何其他容器组件中。

这对于停靠很有用,您可以将表单停靠在页面控件选项卡或任何地方。

作为 TFrame 的替代品,这也很有用:如果您将框架设计为 TForm 而不是 TFrame,则它在设计时将不可嵌入,因此无法被设计时编辑器编辑/破坏。

嵌入式 TFrame 可以以它们嵌入的形式重新定义它们的属性或事件,这并不总是可取的或实用的,尤其是当您希望框架易于升级或重构时。更改的嵌入框架属性最终出现在 DFM 中,而不是 PAS 中,因此在编译时看不到,并且重构/重命名/等并不简单。

于 2012-10-24T09:15:23.070 回答