В этом уроке будем учиться с помощью мышки перетаскивать по
форме компонент Image.
- Создаем новый проект на форму кидаем компонент Image с
закладки Additional. Сразу загрузите в image какую ни будь картинку!
- Для начала давайте определимся с тем каким образом
пользователь будет перемещать объект по форме. Я предлагаю сделать так: если
нажата кнопка мышки и удерживается клавиша Ctrl то можем перетаскивать. Для
этого на компоненте Image создаем обработчик событий OnMouseDown, в котором
пропишем вот такую строку
if ssCtrl in Shift then Image1.BeginDrag(True) ;
Т.Е при нажатии кнопки мышки проверяем условие: если нажата
клавиша CTRL то можем перетаскивать
Во время перетаскивания компонента Image над формой, а также при
отпускании кнопки, у Формы возникает событие:
OnDragOver - В котором мы должны сказать форме примет ли она
данный элемент(В нашем случае Image)
Итак, создадим на форме обработчик событий OnDragOver и в нем
пропишем вот такую строку
Accept:= (Source is TImage) ; // Разрешаем принимать компонент Image
- Теперь нам осталось лишь сообщить программе что нужно делать,
когда пользователь отпустил кнопку т.е завершил перетаскивание. Для этих целей
существует событие OnDragDrop В обработчик этого события передаются параметры
Source (объект-источник) и X и Y координаты курсора. В общем создаем обработчик
событий OnDragDrop на форме и между begin .. end пишем:
if Source is TImage then // Если перетаскиваем компонент Image то
begin
TImage(Source).Left := X; //Переместить компонент Image в координаты //курсора по X
TImage(Source).Top := Y; //Переместить компонент Image в координаты //курсора по Y
end;
Вот и все можите запускаться!!!
P.S. Полный код примера:
procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if Source is TImage then
begin
TImage(Source).Left := X;
TImage(Source).Top := Y;
end;
end;
procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Source is TImage) ;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ssCtrl in Shift then Image1.BeginDrag(True) ;
end;
|