Перетаскивание имейджа

Ответить
Dennis777
Сообщения: 5
Зарегистрирован: 06 ноя 2009, 15:23

Здравствуйте. Нам в школе задали сделать одну задачу, но я совершенно не представляю себе, как это реализовать( Помогите, пожалуйста. Задача состоит в следующем: предположим, что с левой стороны формы расположены три имейджа, а в левой стороне формы расположены к примеру 3 панели с подписями. необходимо перетащить имейдж на соответствующую панель. И если эта панель подходит - то изображение остается на ней, если же нет, то возвращается на исходное положение. ну к примеру, одна из картинок - Ниагарский водопад и ее надо разместить на панель с подписью Ниагарски водопад и т.д. ТОлько во время перетасквания, имейдж привязывается к курсору и движется за ним.
Помогите пожалуйста, буду очень благодарен
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

это называется drag'n'drop
Изображение
Dennis777
Сообщения: 5
Зарегистрирован: 06 ноя 2009, 15:23

Как это называется, я знаю) Как реализовать, чтобы имейдж привязывался к курсору?)
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

На OnMouseDown на имаге поставить какой-нибудь флаг, на OnMouseUp - сбросить. На OnMouseMove - если флаг установлен, менять координаты имаги в соответствии с координатами Mouse.CursorPos. Когда флаг сбрасывается, проверять координаты имаги по отношению к панелям - если поверх какой-нибудь панели, обработать и сказать, верно или нет.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

Dennis777 писал(а):Как это называется, я знаю) Как реализовать, чтобы имейдж привязывался к курсору?)
Исходники: http://rapidshare.com/files/303534676/rr.zip.html

[syntax='Delphi']
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);
TImage(Source).Left := X;
TImage(Source).Top := Y;
edit1.Text:=IntToStr(x);
edit2.Text:=IntToStr(y);
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Image1.BeginDrag(True) ;
end;
[/syntax]

Дальше думаю не составит труда дописать.
< L3X. (ICQ: 8721378, Mail - l3x@list.ru)
Dennis777
Сообщения: 5
Зарегистрирован: 06 ноя 2009, 15:23

Спасибо )))
Ответить