Application disable resize over Dock

From Lazarus wiki
Revision as of 10:58, 15 December 2021 by Trev (talk | contribs) (→‎See also: add entry)
Jump to navigationJump to search
macOSlogo.png

This article applies to macOS only.

See also: Multiplatform Programming Guide

On macOS it's often needed to disable app window's resize below OS Dock. But Lazarus forms always resize below it. How to disable this resize?

1) Create TForm.OnConstrainedResize handler for your form. Note, it was not "published" in LCL until LCL 1.7. Create it by hands:

  TfmMain = class(TForm)
    ... 
  private
    ...
    procedure FormConstrainedResize(Sender: TObject; var MinWidth, MinHeight,
      MaxWidth, MaxHeight: TConstraintSize);
    ...
  end;

procedure TfmMain.FormCreate(Sender: TObject);
begin
  ..
  Self.OnConstrainedResize:= @FormConstrainedResize; 
  ..
end;

2) Write code in handler to change MaxHeight, value must be workarea height minus current form's Top.

procedure TfmMain.FormConstrainedResize(Sender: TObject; var MinWidth, MinHeight,
  MaxWidth, MaxHeight: TConstraintSize);
const
  cMinHeight = 200;
var
  RWork: TRect;
begin
  {$ifndef darwin} exit; {$endif}
  RWork:= Screen.PrimaryMonitor.WorkareaRect;
  MaxHeight:= Max(cMinHeight, RWork.Bottom - RWork.Top - Top);
end;

3) Note: handler has side effect. On dragging window by its caption, handler is called too, so window will be resized on moving it too low, near the Dock.

See also

& Show Badge on Application Icon in Dock