请参阅此处的其他问题:Resizing borderless form from different constraints than far edges?
此前一个问题已经解决,但我有另一个类似的问题。由于我正在构建具有不同客户区的自定义形状表单,因此我需要更改此表单的ClientRect区域。表格有一些特殊的曲线边缘等等,但那部分是无关紧要的。我需要更改表单的ClientRect以表示允许删除组件的新客户区域,并忽略放在这些区域之外的任何内容。
(我有一个无边框的形式,我正在绘制自己的边框,这是一个与标准窗口边框大不相同的尺寸。)
这个解决方案会改变我之前的问题的工作方式,但这将是另一个我敢肯定我会自己解决的话题,应该很简单。我只需要能够在第一时间正确设置它。
答案 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
,因为我不确定这是什么想。但这是你的信息..