Перетаскиваем окна в 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 шаг
запускаем программу
Советы и предупреждения:
- следите, чтобы имена переменных не совпадали с именами процедур или функций
Перетаскиваем окна в Delphi