Передать форму можно использовать свойства Left и Top, которые указывают на позицию верхнего левого угла формы на экране.
Вот пример:
procedure TfrmMain.OnMove(var Msg: TWMMove);
begin
inherited;
if (OldPosition.Left <> Left) or (OldPosition.Top <> Top) then
ShowMessage('Форма была перемещена!');
end;
В этом коде OldPosition - это приватная переменная, которая хранит предыдущую позицию формы. В обработчике события OnMove, мы сравниваем текущую позицию (Left и Top) с предыдущей позицией. Если они отличаются, то это означает, что форма была перемещена, и мы выводим сообщение об этом пользователю.
Также можно использовать свойство PosChanged класса TForm, которое истинно, если позиция формы изменилась с момента последнего измерения.
procedure TfrmMain.OnMove(var Msg: TWMMove);
begin
inherited;
if PosChanged then
ShowMessage('Форма была перемещена!');
end;
Эта APPROACH более компактна и эффективна, чем сравнение свойств Left и Top.
Альтернативное решение - использовать сообщение WM_MOVED, которое отправляется форме при ее перемещении или изменении размера. Вы можете обработать это сообщение в обработчике события OnMessage.
procedure TfrmMain.OnMessage(var Msg: TMessage);
begin
if Msg.Msg = WM_MOVED then
ShowMessage('Форма была перемещена!');
end;
Эта APPROACH позволяет обнаруживать, когда форма была перемещена, без сравнения свойств позиции.
Статья описывает способ обнаружения перемещения формы в приложении Delphi, используя обработчик события WM_MOVE и переменную TfrmMain.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.