Blokowanie przenoszenia formularza

Blokowanie przenoszenia formularza polega na uniemożliwieniu użytkownikowi zmiany jego położenia.

I sposób:

Po prostu usuwamy z menu systemowego formularza pozycję "Przesuń" co zablokuje możliwość zmiany jego położenia:

Unit1.cpp

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   HMENU hMenu = GetSystemMenu(Handle, FALSE);
   DeleteMenu(hMenu, SC_MOVE, MF_BYCOMMAND);
}

II sposób:

Przechwycimy komunikat WM_NCHITTEST (wysyłany do formularza, gdy wskaźnik myszy zmienia swoje położenie, albo gdy zostanie wciśnięty lub puszczony przycisk myszy) i w funkcji obsługującej go sprawdzimy, czy użytkownik kliknął na pasku tytułu formularza, a jeśli tak to "oszukamy" formularz i przekażemy mu, że użytkownik jednak kliknął w obszarze formularza, a nie na pasku tytułu. Tworzymy więc w pliku nagłówkowym formularza deklarację funkcji obsługującej komunikat i mapę komunikatu:

Unit1.h

public:
   void __fastcall DontMoveIt(TMessage &Msg);

BEGIN_MESSAGE_MAP
   MESSAGE_HANDLER(WM_NCHITTEST, TMessage, DontMoveIt)
END_MESSAGE_MAP(TForm)

a w pliku formularza piszemy funkcję obsługującą komunikat:

Unit1.cpp

void __fastcall TForm1::DontMoveIt(TMessage &Msg)
{
   TForm::Dispatch(&Msg);
   if (Msg.Result == HTCAPTION)
      Msg.Result = HTCLIENT;
}