В этом уроке я расскажу вам о функции перемещения оконных элементов управления
Оконные компоненты во время выполнения приложения можно перемещать не используя технологию drag-and-drop. Мы будем использовать связанное с нажатием кнопки мыши событие OnMouseDown.
Расположим на форме компонент Memo. И напишем код обработчика этого компонента OnMouseDown как показано ниже.
procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button <> mbLeft then exit; ReleaseCapture; Memo1.Perform(WM_SYSCOMMAND,$F012,0); end;
Первоначально мы должны проверить нажата ли левая клавиша мыши? И если нет то выйти из процедуры. При утвердительном ответе вызывается API-функция ReleaseCapture, она обеспечивает компоненту получение потока сообщений связанных с мышью. Конкретно перемещение компонента Memo1 выполняет метод Perform, используя посылку системного сообщения с кодом $F012.
Если нам необходимо чтобы несколько оконных элементов могли быть перенесены, то возможно сделать общую процедуру и вызывать ее посредством метода OnMouseDown.
Разместим на форме компоненты Edit и Memo. Добавим строку процедуры в разделе interface (выделенная строка).
type TForm1 = class(TForm) Edit1: TEdit; Memo1: TMemo; procedure MoveWindControl(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Далее в разделе implementation запишем код данной процедуры.
procedure TForm1.MoveWindControl(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button <> mbLeft then exit; ReleaseCapture; (Sender as TWinControl).Perform(WM_SysCommand, $F012,0) end;
В инспекторе объектов добавляем ранее записанную процедуру для наших компонентов (компонент Edit и Memo), как показано на рисунке через Инспектор Объектов.
Итог: мы ознакомились на практике с перетаскиванием оконных компонентов.