Cała sztuka w odpowiedniej obsłudze komunikatu WM_NCHITTEST tak jak chciałeś masz przykład panelu który ma aktywną tylko dolną krawędź. Zasada działania jest prosta gdy kursor myszy znajdzie się nad dolną krawędzią zwracamy HTBOTTOM (czyli dolna krawędź) a wiec powoduje to zmianę kursora i umożliwia zmianę rozmiaru panela natomiast w pozostałych przypadkach zwraca HTCLIENT (czyli obszar klienta) a więc wtedy "normalne" zachowanie czyli po prostu nie można zmieniać rozmiaru.
Właściwie gdybyś dobrze popatrzył to pod podanym przez Ciebie linkiem można było znaleźć kod panelu nawet z możliwością poruszania nim wystarczyło popatrzyć jak to tam jest zrobione i trochę przerobić kod.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TMyPanel = class(TPanel)
private
protected
procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;
published
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
fMyPanel: TMyPanel;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TMyPanel.WMNCHitTest(var Msg: TWMNCHitTest);
var
p: TPoint;
begin
inherited;
p:= ScreenToClient(Point(Msg.Xpos, Msg.Ypos));
if (p.y >= Height - BevelWidth) then
Msg.Result:= HTBOTTOM
else
Msg.Result:= HTCLIENT;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
fMyPanel:= TMyPanel.Create(Self);
fMyPanel.Parent := Self;
fMyPanel.Top := 20;
fMyPanel.Left := 20;
fMyPanel.Caption:= fMyPanel.ClassName;
end;
end.