如何更改表单的ClientRect?

时间:2011-12-05 23:43:14

标签: delphi delphi-7

请参阅此处的其他问题:Resizing borderless form from different constraints than far edges?

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

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

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

1 个答案:

答案 0 :(得分:5)

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,因为我不确定这是什么想。但这是你的信息..