Поскольку я изучаю наш старый код для пользовательского компонента StatusBar, который является потомком TWinControl, чтобы обеспечить изменение размера формы с помощью ручки StatusBar, мы обрабатываем WM_NCHITTEST в элементе управления, а не в форме и возвращаем HTBOTTOMRIGHT:
procedure TElStatusBar.WMNCHitTest;
var
P : TPoint;
function InGrip(Point : TPoint) : boolean;
var
r : TRect;
begin
R := ClientRect;
R.Left := R.Right - R.Bottom + hMargin;
result := PtInRect(R, Point);
end;
begin
if not FSizeGrip then
begin
inherited;
exit;
end;
P := ScreenToClient(Point(Message.XPos, Message.YPos));
if InGrip(P) and (TForm(Parent).WindowState = wsNormal)
and (TForm(Parent).BorderStyle in [bsSizeable, bsSizeToolWin]) then
Message.Result := HTBOTTOMRIGHT
else
inherited;
end;
Это означает, что вам нужно реализовать потомок компонента панели (или перехватить его обработку сообщений) и обработать там WM_NCHITTEST.
Кроме того, я бы пошел по пути обработки сообщений WM_NCCALCSIZE и WM_NCPAINT в форме, чтобы обеспечить собственную область заголовка и избежать использования TPanel или другого элемента управления. Но это только мое предпочтение.