Содержание материала

 

Но есть еще один очень интересный выход: по экрану можно перемещать не саму картинку, а только ее рамку, когда пользователь выберет место для картинки и отпустит кнопку - она туда переместиться. Для этого нам понадобится еще одна глобальная переменная: rec: TRect, которая будет хранить параметры картинки. Теперь слегка изменим обработчики событий для картинки. Таким образом все в целом будет выглядеть так:

 

Code:

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if button<>mbLeft then

   move:=false

else

begin

   move:=true;

   x0:=x;

   y0:=y;

   rec:=image1.BoundsRect; //запоминаем контур картинки

end;

end;

 

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

if move then

begin

   Form1.Canvas.DrawFocusRect(rec); //рисуем рамку

   with rec do

   begin

     left:=Left+x-x0;

     top:=Top+y-y0;

     right:=right+x-x0;

     bottom:=bottom+y-y0;

     x0:=x;

     y0:=y; // изменяем координаты

   end;

   Form1.Canvas.DrawFocusRect(rec); // рисуем рамку на новом месте

end;

end;

 

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Form1.Canvas.DrawFocusRect(rec);

with image1 do begin

   setbounds(rec.left+x-x0,rec.top+y-y0,width,height); //перемещаем картинку

   move:=false;

end;

end;

 

Поскольку DrawFocusRect рисует рамку методом Xor, то при повторном вызове этой функции с теми же параметрами, рамка стирается. Этот очень красивый метод добавит в ваши программы много интересного.

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить