Преместване на изображение, DelphiSite

Най-четени

Движещо се изображение

процедура TForm1. Image1MouseDown( Подател: TObject ; Бутон: TMouseButton;

Shift: TShiftState; X, Y: Цяло число );

бутон ако <> mbНаляво тогава

move := false //ако не сте щракнали с левия бутон, тогава няма да се преместим!

x0:=x; //запомня първоначалните координати

y0:=y; //запомня първоначалните координати

В тази част на кода се проверява кой бутон е кликнат върху изображението. Ако останете, запомнете координатите и ако има други, тогава не можете да се движите. Сега нека напишем манипулатора OnMouseMove за нашето изображение:

процедура TForm1. Image1MouseMove( Подател: TObject ; Shift: TShiftState; X,

изображение1. Ляво:=изображение1. Ляво +x-x0; // Промяна на позицията на левия край

изображение1.:=изображение1.+y-y0; // Промяна на позицията на горния ръб

И накрая, манипулаторът OnMouseUp за нашето изображение ще изглежда така:

процедура TForm1. Image1MouseUp( Подател: TObject ; Бутон: TMouseButton;

Shift: TShiftState; X, Y: Цяло число );

Тук всичко е много просто. Когато бутонът бъде освободен, променливата за преместване е зададена на false, така че изображението да не може да бъде преместено до следващото щракване. Този метод е доста прост както за разбиране, така и за прилагане. Но същият алгоритъм на движение може да се реализира малко по-красиво. Някои компоненти, включително Image, имат толкова страхотна процедура SetBounds(Left,,Width,Height), която може да промени всичките четири параметъра наведнъж. Така че събитието OnMouseMove може да се промени по следния начин:

процедура TForm1. Image1MouseMove( Подател: TObject ; Shift: TShiftState; X,

изображение1. SetBounds( image1.left+x-x0, image1.+y-y0,

изображение1. ширина, изображение1. височина);

Но има още единмного интересен изход: можете да се движите по екрана не самата картина, а само нейната рамка, когато потребителят избере място за картината и пусне бутона, тя ще се премести там. За да направим това, имаме нужда от още една глобална променлива: rec: TRect, която ще съхранява параметрите на изображението. Сега нека леко променим манипулаторите на събития за картината. Така че всичко ще изглежда така:

процедура TForm1. Image1MouseDown( Подател: TObject ; Бутон: TMouseButton;

Shift: TShiftState; X, Y: Цяло число );

if button<>mbLeft then

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

процедура TForm1. Image1MouseMove( Подател: TObject ; Shift: TShiftState; X,

Формуляр1. платно. DrawFocusRect(rec); // начертайте рамка

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

Формуляр1. платно. DrawFocusRect(rec); // начертайте рамка на ново място

процедура TForm1. Image1MouseUp( Подател: TObject ; Бутон: TMouseButton;

Shift: TShiftState; X, Y: Цяло число );

Формуляр1. платно. DrawFocusRect(rec);

започнете с image1

setbounds (запис. ляво +x-x0,запис. отгоре +y-y0,ширина,височина); // преместете изображението

Тъй като DrawFocusRect рисува рамка с помощта на метода Xor, когато тази функция се извика отново със същите параметри, рамката се изтрива. Този много красив метод ще добави много интересни неща към вашите програми.