Перетягує вікна в Delphi.

Іноді виникає необхідність перетягнути вікно за будь-якої його елемент. Але коди, які я знайшов в інтернеті не працювали, тому я написав свій.

Інструкція Рівень складності: Нескладно 1 крок

Виберемо елемент за який будемо перетягувати. Їх може бути кілька, але всі обов'язково повинні бути нащадками класу TControl. Для прикладу я вибрав об'єкт Panel1 класу TPanel.

2 крок

Задамо змінні
var mouseX, mouseY: integer; {координати натиснутою миші}
DownMouse: boolean ; {ознака натискання миші}

3 крок

Виберемо об'єкт Panel1, в інспекторі об'єктів виберемо вкладку Events.
Створимо 2 процедури MouseDown і MouseUp і заповнимо їх щоб вони виглядали так :

procedure TForm1.Panel1MouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
downmouse: = true;
mousex: = x + panel1.Left +4; {+4 - якщо у вікна BorderStyle НЕ bsNone, якщо bsNone - нічого не додаємо}
mousey: = y + panel1.Top +28 {аналогічно} ;
end;

procedure TForm1.Panel1MouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
downmouse: = false;
end;

4 крок

створюємо процедуру MouseMove:

procedure TForm1.Panel1MouseMove (Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if downmouse then {якщо натиснута миша, то переміщаємо вікно}
begin
left: = mouse.CursorPos.


X-mousex;
top: = mouse.CursorPos.Y-mousey;
{mouse.CursorPos - динамічні координати покажчика миші}
end;
end;

5 крок

запускаємо програму

Поради та попередження:
  • стежте, щоб імена змінних не збігалися з іменами процедур або функцій