Страница 1 из 1

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

Добавлено: 06 ноя 2009, 15:30
Dennis777
Здравствуйте. Нам в школе задали сделать одну задачу, но я совершенно не представляю себе, как это реализовать( Помогите, пожалуйста. Задача состоит в следующем: предположим, что с левой стороны формы расположены три имейджа, а в левой стороне формы расположены к примеру 3 панели с подписями. необходимо перетащить имейдж на соответствующую панель. И если эта панель подходит - то изображение остается на ней, если же нет, то возвращается на исходное положение. ну к примеру, одна из картинок - Ниагарский водопад и ее надо разместить на панель с подписью Ниагарски водопад и т.д. ТОлько во время перетасквания, имейдж привязывается к курсору и движется за ним.
Помогите пожалуйста, буду очень благодарен

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

Добавлено: 06 ноя 2009, 16:05
Игорь Акопян
это называется drag'n'drop

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

Добавлено: 06 ноя 2009, 16:09
Dennis777
Как это называется, я знаю) Как реализовать, чтобы имейдж привязывался к курсору?)

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

Добавлено: 06 ноя 2009, 16:26
Хыиуду
На OnMouseDown на имаге поставить какой-нибудь флаг, на OnMouseUp - сбросить. На OnMouseMove - если флаг установлен, менять координаты имаги в соответствии с координатами Mouse.CursorPos. Когда флаг сбрасывается, проверять координаты имаги по отношению к панелям - если поверх какой-нибудь панели, обработать и сказать, верно или нет.

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

Добавлено: 07 ноя 2009, 11:40
BHy4ok
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]

Дальше думаю не составит труда дописать.

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

Добавлено: 07 ноя 2009, 20:14
Dennis777
Спасибо )))