|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Перемещение объекта курсором
Здравствуйте. Есть панель. На ней есть к примеру TShape.
Когда я жму на TShape я запоминаю координаты нажатия и перемещаю панель с её родителя, на другую плавающую форму FDrag. Далее при движении курсора по TShape я двигаю FDrag. И при отжатии перестаю следить за движением курсора. Код:
procedure TShape.MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FMoving := ssLeft in Shift; if not FMoving then Exit; FdX := X; FdY := Y; TControl(Sender).Parent.Parent := FDrag; FDrag.Show; FDrag.Left := Mouse.CursorPos.X - FdX; FDrag.Top := Mouse.CursorPos.Y - FdY; end; procedure TShape.MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if not FMoving then Exit; FDrag.Left := FDrag.Left + X - FdX; FDrag.Top := FDrag.Top + Y - FdY; end; procedure TShape.MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin msg(2340); if not FMoving then Exit; FMoving := False; end; |
#2
|
||||
|
||||
c:\>______
Цитата:
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Aptyp (10.03.2017)
|
#3
|
|||
|
|||
Супер, спасибо, а то я уже голову поломал.
Только наверное правильнее будет написать: Код:
SetCaptureControl(TControl(Sender)); Дабы следить непосредственно за объектом, а не за панелью, хотя в моём случае без разницы. |
#4
|
||||
|
||||
SetCaptureControl делает тоже самое, что и API SetCapture в примере, только большим количеством строк кода, вместо одной. В исходнике можно посмотреть. Потому что TShape не является окном!
Пишу программы за еду. __________________ |
#5
|
|||
|
|||
Цитата:
|
#6
|
||||
|
||||
SetCaptureControl это VCL обертка над SetCapture. Поэтому работает и то и другое.
Пишу программы за еду. __________________ |