Показать сообщение отдельно
  #5  
Старый 29.10.2007, 16:15
wildshaman wildshaman вне форума
Прохожий
 
Регистрация: 13.10.2007
Сообщения: 21
Репутация: 10
По умолчанию

Объявляешь перменные
Код:
var
x0, y0: integer;
move: boolean;

Теперь напишем обработчик OnMouseDown для картинки:


Код:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
begin
Shift: TShiftState; X, Y: Integer);
   move:=true;
   x0:=x; //запоминаем начальные координаты
   y0:=y; //запоминаем начальные координаты

end;


Теперь напишем обработчик OnMouseMove длякартинки:




Код:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if move then
begin
   image1.Left:=image1.Left+x-x0; // Изменяем позицию левого края
   image1.Top:=image1.Top+y-y0; // Изменяем позицию верхнего края
end;
end;


Ну и наконец обработчик OnMouseUp для картинки будет таким:

Код:
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
move := false;
end;


Но такой же алгоритм перемещения можно реализовать немного красивее. У некоторых компонентов, в том числе и Image, есть такая классная процедура SetBounds(Left,Top,Width,Height), которая может изменять сразу все четыре параметра. Таким образом событие OnMouseMove можно изменить так:


Код:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if move then
   image1.SetBounds(image1.Left+x-x0, image1.Top+y-y0,
   image1.width, image1.height);
end;
Ответить с цитированием