我需要动态创建具有固定宽度和高度的 FMX 表单,但是当删除边框或设置为 BorderStyle=Single 时,我的尺寸变大了。
将 BorderStyle 设置为 None 或 Single 时,即使设置固定的 ClientWidth 和 ClientHeight,窗体的大小仍保持原始 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。