Якщо ви вирішили створити форму програми без заголовку вікна, то потрібно подумати про те, як буде реалізована можливість перетягування цієї форми в потрібне місце. Адже, переміщення вікна відбувається саме завдяки панелі його заголовку, по якій можна клацнути лівою кнопкою миші, і утримуючи її затиснутою, перетягнути вікно в потрібне місце екрану.
Якщо ж панелі заголовку вікна не буде, то користувач не зможе захопити вікно програми і перемістити його туди де йому буде зручно з ним працювати.
Тому зараз я покажу вам один з варіантів вирішення даної проблеми.
Створення візуальної частини програми

Створіть форму без заголовку вікна:
- В компіляторі 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. Або ж створіть кнопку при натисканні якої програма буде закриватися.
