Тянем-потянем...

Вступление

Технология 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;

Комментарий

Назначив обработчик формы с приведённым кодом мы получаем возможность перетаскивать форму, кликая по самой форме приложения. Если на форме находятся другие компоненты (например 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;

Комментарий

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

Верификация

Delphi XE5, Win7

Комментариев нет:

Отправить комментарий