Вступление

Технология Drag&Drop давно стала стандартом пользовательского интерфейса. Рассмотрим несколько примеров её использования, основанных на использовании метода Perform. Обратите внимание, что перемещение контролов всегда происходит относительно родительских контролов.

Задача 1

Перетаскивание формы без заголовка. Актуально для форм, построенных на регионах.

Решение

procedure TForm1.FormMouseDown(Sender: TObject; button: tmousebutton;
  shift: tshiftstate; x, y: integer);
const
  sc_dragmove = $F012;
begin
  releasecapture;
  twincontrol(application.mainform).perform(wm_syscommand, sc_dragmove, 0);
end;Code language: Delphi (delphi)

Комментарий

Назначив обработчик формы с приведённым кодом мы получаем возможность перетаскивать форму, кликая по самой форме приложения. Если на форме находятся другие компоненты (например TLabel, TImage), добавьте им тот же самый обработчик события (ОnMouseDown), чтобы перетягивать форму, кликая по этим компонентам.

Задача 2

Перетягивание контролов на форме

Решение

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
const
  SC_DragMove = $F012;  { a magic number }
begin
  ReleaseCapture;
  panel1.perform(WM_SysCommand, SC_DragMove, 0);
end;Code language: PHP (php)

Комментарий

В этом примере перетягивается панелька с картинкой. Обработчик назначен как самой панели, так и её дочернему контролу.

Верификация

Delphi XE5, Win7

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *