动态创建表单 - 边框行为

问题描述 投票:0回答:0

我需要动态创建具有固定宽度和高度的 FMX 表单,但是当删除边框或设置为 BorderStyle=Single 时,我的尺寸变大了。

BorderStyle 设置为 NoneSingle 时,即使设置固定的 ClientWidthClientHeight,窗体的大小仍保持原始 Windows 边框,因此如果我创建一个 Sizeable(默认)窗体,两者表格的大小保持相同,但不正确。

请查看图片以更好地理解:

使用Delphi 10.4和Windows 11,但我在其他环境下测试过,也有同样的问题。

var
  Form: TForm;
  Shape: TRectangle;
begin
  //Form with Border Sizeable
  Form := TForm.CreateNew(Application);
  Form.BorderStyle := TFmxFormBorderStyle.Sizeable;
  Form.Fill.Color := TAlphaColors.Yellow;
  Form.Fill.Kind := TBrushKind.Solid;

  Form.ClientWidth := 300;
  Form.ClientHeight := 300;

  Shape := TRectangle.Create(Form);
  Shape.Parent := Form;
  Shape.SetBounds(0, 0, 300, 300);

  Form.Show;

  //Form with Border Single
  Form := TForm.CreateNew(Application);
  Form.BorderStyle := TFmxFormBorderStyle.Single;
  Form.Fill.Color := TAlphaColors.Yellow;
  Form.Fill.Kind := TBrushKind.Solid;

  Form.ClientWidth := 300;
  Form.ClientHeight := 300;

  Shape := TRectangle.Create(Form);
  Shape.Parent := Form;
  Shape.SetBounds(0, 0, 300, 300);

  Form.Show;

  //Form with Border None
  Form := TForm.CreateNew(Application);
  Form.BorderStyle := TFmxFormBorderStyle.None;
  Form.Fill.Color := TAlphaColors.Yellow;
  Form.Fill.Kind := TBrushKind.Solid;

  Form.ClientWidth := 300;
  Form.ClientHeight := 300;

  Shape := TRectangle.Create(Form);
  Shape.Parent := Form;
  Shape.SetBounds(0, 0, 300, 300);

  Form.Show;
end;

在表单设计器中做同样的事情,问题不会发生。

如果我在 BorderStyle = None 时设置 Width 和 Height 而不是 ClientWidth 和 ClientHeight,它会起作用,但是当我设置 BorderStyle = Single 时,问题就出现了,在这种情况下我无法设置 Width 和 Height,因为我仍然有表格边框。

在 VCL 环境中,这完全符合预期,其中实际窗口大小(考虑边框)通过更改边框而不同,始终保持 ClientRect(ClientWidth 和 ClientHeight)相同。

预期(在具有相同大小的 VCL 中运行): 无论边框如何变化,所有表单都具有相同的 ClientRect。

forms delphi firemonkey
© www.soinside.com 2019 - 2024. All rights reserved.