如何更改表单的ClientRect?

问题描述 投票:-4回答:1

请参考这里的另一个问题:Resizing borderless form from different constraints than far edges?

之前的问题已经解决,但我有另一个类似的问题。由于我正在构建具有不同客户区的自定义形状表单,因此我需要更改此表单的ClientRect区域。表格有一些特殊的曲线边缘等等,但那部分是无关紧要的。我需要更改表单的ClientRect以表示允许删除组件的新客户区域,并忽略放在这些边界之外的任何内容。

(我有一个无边框的形式,我正在绘制自己的边框,这个边框与标准的窗口边框大不相同。)

这个解决方案会改变我之前的问题的工作方式,但这将是另一个我敢肯定我会自己解决的话题,应该很简单。我只需要能够在第一时间正确设置它。

delphi delphi-7
1个回答
6
投票
type
  TForm1 = class(TForm)
    ..
  private
    procedure WmNCCalcSize(var Msg: TWMNCCalcSize); message WM_NCCALCSIZE;
    ..

..

procedure TForm1.WmNCCalcSize(var Msg: TWMNCCalcSize);
begin
  inherited;
  if Msg.CalcValidRects then begin
    InflateRect(Msg.CalcSize_Params.rgrc[0], -10, -6);
    Msg.Result := 0;
  end;
end;

请仔细阅读WM_NCCALCSIZE的文档,包括备注部分和NCCALCSIZE_PARAMS,因为我不确定这是你想要的。但这是你的信息..

© www.soinside.com 2019 - 2024. All rights reserved.