Но есть еще один очень интересный выход: по экрану можно перемещать не саму картинку, а только ее рамку, когда пользователь выберет место для картинки и отпустит кнопку - она туда переместиться. Для этого нам понадобится еще одна глобальная переменная: 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, то при повторном вызове этой функции с теми же параметрами, рамка стирается. Этот очень красивый метод добавит в ваши программы много интересного.
- << Назад
- Вперёд
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!