Delphi 怎么重新创建非客户区

Delphi 如何重新创建非客户区
Delphi创建了一个窗体,样式为bsNone,也就是没有客户区,但是我想创建一些非客户区,使用以下代码,无效,请问如何解决。
procedure WMNCCalcSize(var Message:TWMNCCalcSize);message WM_NCCALCSIZE;
。。。。。。。。。。。。。。。

procedure TPopWin.WMNCCalcSize(var Message: TWMNCCalcSize);
var
  lpncsp:PNCCalcSizeParams;
begin
  if Message.CalcValidRects and (BorderStyle=bsNone) then
  begin
    lpncsp :=Message.CalcSize_Params;
    if lpncsp=nil then exit;
    lpncsp^.rgrc[0].Left := lpncsp^.rgrc[0].Left+20;
    lpncsp^.rgrc[0].Top :=lpncsp^.rgrc[0].Top+20;
    lpncsp^.rgrc[0].Right :=lpncsp^.rgrc[0].Right-20;
    lpncsp^.rgrc[0].Bottom :=lpncsp^.rgrc[0].Bottom-20;
    Move(lpncsp^.rgrc[0],lpncsp^.rgrc[1],sizeof(TRect));
    //调试发现rdrc[0]和rdrc[1]一样,都是客户区,我要创建宽、高为20的非客户区
    Message.Result :=DefWindowProc(Handle,WM_NCCALCSIZE,//无效
      WPARAM(Message.CalcValidRects),LPARAM(Message.CalcSize_Params));
    Message.Result :=WVR_VALIDRECTS;//无效
    //使用CallWindowProc更惨,报"stack overlow"错误
//    CallWindowProc(Pointer(GetWindowLong(Handle,GWL_WNDPROC)),Handle,WM_NCCALCSIZE,
//      WPARAM(Message.CalcValidRects),LPARAM(Message.CalcSize_Params));
  end
  else
    inherited;
end;

------解决方案--------------------
用你的代码稍微加改进,在D7,XE5(Win32,Win64)上都能成功呀

  public
    procedure WMNCCalcSize(var Message:TWMNCCalcSize);message WM_NCCALCSIZE;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMNCCalcSize(var Message: TWMNCCalcSize);
var
  lpncsp:PNCCalcSizeParams;
begin
  if Message.CalcValidRects and (BorderStyle=bsNone) then begin
    lpncsp := Message.CalcSize_Params;
    if lpncsp=nil then exit;
    Inc(lpncsp^.rgrc[0].Left   , 20);
    Inc(lpncsp^.rgrc[0].Top    , 20);
    Dec(lpncsp^.rgrc[0].Right  , 20);
    Dec(lpncsp^.rgrc[0].Bottom , 20);
  end;
  inherited;
end;