如何在FireMonkey中限制最小格式的宽度?它曾经在VCL中如此简单 – 它只是在表单属性中有Max和Min约束.
解决方法
这是一个更复杂(但更优雅)的替代解决方案,定义一个完全自定义的Form类,您可以从中继承自己的…
unit FMX.ConstrainedForm; interface uses System.Classes,System.Types,System.UITypes,FMX.Forms,FMX.Platform,FMX.Types; type TFormConstraints = class(TPersistent) private FMaxHeight: Integer; FMaxLeft: Integer; FMaxWidth: Integer; FMaxTop: Integer; FMinHeight: Integer; FMinLeft: Integer; FMinWidth: Integer; FMinTop: Integer; public constructor Create; published property MaxHeight: Integer read FMaxHeight write FMaxHeight default 0; property MaxLeft: Integer read FMaxLeft write FMaxLeft default 0; property MaxWidth: Integer read FMaxWidth write FMaxWidth default 0; property MaxTop: Integer read FMaxTop write FMaxTop default 0; property MinHeight: Integer read FMinHeight write FMinHeight default 0; property MinLeft: Integer read FMinLeft write FMinLeft default 0; property MinWidth: Integer read FMinWidth write FMinWidth default 0; property MinTop: Integer read FMinTop write FMinTop default 0; end; TConstrainedForm = class(TCustomForm) private FConstraints: TFormConstraints; protected procedure StartwindowResize; override; procedure StartwindowDrag; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure SetBounds(ALeft,ATop,AWidth,AHeight: Integer); override; published property Constraints: TFormConstraints read FConstraints write FConstraints; property BiDiMode; property Caption; property Cursor default crDefault; property BorderStyle default TFmxFormBorderStyle.bsSizeable; property BorderIcons default [TBorderIcon.biSystemMenu,TBorderIcon.biMinimize,TBorderIcon.biMaximize]; property ClientHeight; property ClientWidth; property Left; property Top; property Margins; property Position default TFormPosition.podefaultPosOnly; property Width; property Height; property ShowActivated default True; property StaysOpen default True; property Transparency; property TopMost default False; property Visible; property WindowState default twindowState.wsnormal; property OnCreate; property OnDestroy; property OnClose; property OnCloseQuery; property OnActivate; property OnDeactivate; property OnResize; property Fill; property StyleBook; property ActiveControl; property StyleLookup; property OnPaint; end; procedure Register; implementation { TFormConstraints } constructor TFormConstraints.Create; begin inherited; FMaxHeight := 0; FMaxLeft := 0; FMaxWidth := 0; FMaxTop := 0; FMinHeight := 0; FMinLeft := 0; FMinWidth := 0; FMinTop := 0; end; { TConstrainedForm } constructor TConstrainedForm.Create(AOwner: TComponent); begin FConstraints := TFormConstraints.Create; inherited; end; destructor TConstrainedForm.Destroy; begin FConstraints.Free; inherited; end; procedure TConstrainedForm.SetBounds(ALeft,AHeight: Integer); begin if (FConstraints.FMinWidth > 0) and (AWidth < FConstraints.FMinWidth) then AWidth := FConstraints.FMinWidth; if (FConstraints.FMaxWidth > 0) and (AWidth > FConstraints.FMaxWidth) then AWidth := FConstraints.FMaxWidth; if (FConstraints.FMinHeight > 0) and (AHeight < FConstraints.FMinHeight) then AHeight := FConstraints.FMinHeight; if (FConstraints.FMaxHeight > 0) and (AHeight > FConstraints.FMaxHeight) then AHeight := FConstraints.FMaxHeight; if (FConstraints.FMinLeft > 0) and (ALeft < FConstraints.FMinLeft) then ALeft := FConstraints.FMinLeft; if (FConstraints.FMaxLeft > 0) and (ALeft > FConstraints.FMaxLeft) then ALeft := FConstraints.FMaxLeft; if (FConstraints.FMinTop > 0) and (ATop < FConstraints.FMinTop) then ATop := FConstraints.FMinTop; if (FConstraints.FMaxTop > 0) and (ATop > FConstraints.FMaxTop) then ATop := FConstraints.FMaxTop; Platform.SetwindowRect(Self,RectF(ALeft,ALeft + AWidth,ATop + AHeight)); inherited SetBounds(ALeft,AHeight); end; procedure TConstrainedForm.StartwindowDrag; begin inherited; end; procedure TConstrainedForm.StartwindowResize; begin inherited; end; procedure Register; begin RegisterClass(TConstrainedForm); end; end.
将此文件存储为FMX.ConstrainedForm.pas,将其添加到表单的“使用”部分,并修改表单的声明,以便代替:
TForm1 = class(TForm)
它说:
TForm1 = class(TConstrainedForm)
由于缺乏自定义设计(此时无论如何,这是一个“快速解决方案”),您需要挂钩表单的OnCreate事件,如下所示:
procedure TForm1.FormCreate(Sender: TObject); begin Constraints.MinWidth := 400; Constraints.MinHeight := 400; end;
同样,如果没有对FireMonkey平台本身进行一些改变,这是您现在最好的选择!
原文地址:https://www.jb51.cc/delphi/102466.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。