Преместване на изображение, 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, когато тази функция се извика отново със същите параметри, рамката се изтрива. Този много красив метод ще добави много интересни неща към вашите програми.