Если вы решили создать форму программы без заголовка окна, то нужно подумать о том, как будет реализована возможность перетаскивания этой формы в нужное место. Ведь перемещение окна происходит именно благодаря панели заголовка, по которой можно щелкнуть левой кнопкой мыши, и удерживая её зажатой, перетащить окно в нужное место экрана.
Если же панели заголовка окна не будет, то пользователь не сможет захватить окно программы и переместить его туда, где ему будет удобно с ним работать.
Потому сейчас я покажу вам один из вариантов решения данной проблемы.
Створення візуальної частини програми

Создайте форму без заголовка окна:
- В компиляторе Delphi выберите File → New → VCL Forms Application – Delphi.
- Установите свойство созданной формы Border Style → bsNone.
Поместите на форму компонент для отображения текста (например Label):
- В палитре инструментов, в блоке компонентов Standart, сделайте клик левой кнопкой мыши по TLabel.
- Щелкните левой кнопкой мыши на форме, чтобы разместить на ней компонент Label.
Переходим к программированию
Нажмите F12,, чтобы открыть редактор кода и в разделе Private объявите две переменные:
- FDragging: Boolean – эта переменная булевого типа будет нужна нам для отслеживания того, происходит ли процесс перетаскивания формы в данный момент.
- FStartDragPos: TPoint – эта переменная необходима для хранения начальных координат мыши в момент начала перетаскивания формы.
В инспекторе объектов выберите Label, ведь программный код мы будем писать именно для этого компонента.
Перейдите на вкладку Events, создайте событиеOnMouseDown и для этого события введите следующий код:
if Button = mbLeft then
begin
FDragging := True;
FStartDragPos := Point(X, Y);
end;
Этим кодом, когда пользователь щелкнет мышкой по компоненту Label, мы проверяем, щелкнул он левой или правой кнопкой. Если он сделал клик левой кнопкой мыши, то для переменной FDragging устанавливается значение True и происходит запись текущих координат формы в переменную FStartDragPos.
Теперь создайте событие OnMouseMove и введите для него следующий код:
if FDragging then
begin
Left := Left + (X - FStartDragPos.X);
Top := Top + (Y - FStartDragPos.Y);
end;
Этим кодом, если пользователь перемещает курсор мышки, мы проверяем значение переменной FDragging. Если FDragging имеет значение True, то происходит изменение свойств формы Left и Top:
- Разница между X и FStartDragPos.X определяет, на сколько пикселей переместилась мышь влево или вправо.
- Разница между Y и FStartDragPos.Y определяет, на сколько пикселей переместилась мышь вверх или вниз.
- Значение Left и Top формы обновляются на величину этих разниц, что приводит к движению формы вслед за курсором мыши.
И последнее событие, которое нужно создать – OnMouseUp. Для неё напишите следующий код:
FDragging := False;
Здесь мы устанавливаем значение переменной FDragging – False. Ведь когда пользователь не удерживает зажатой кнопку мыши (отпустил её), нам не нужно отслеживать координаты формы и перемещать её вслед за курсором.
Примечание 1.
Не для всех компонентов можно создать события OnMouseDown, OnMouseMove и OnMouseUp.
Примечание 2.
Вы можете реализовать перетаскивание окна, если пользователь зажал левую кнопку не на компоненте, а на самом окне. Для формы можно создать события OnMouseDown, OnMouseMove и OnMouseUp.
Важно!
Поскольку наша форма не имеет панели заголовка окна, то соответственно она не имеет и кнопки с помощью которой можно закрыть программу. Поэтому для закрытия приложения используйте сочетание клавиш Alt+F4. Или же создайте кнопку при нажатии которой приложение будет закрываться.
