|
Вопрос # 5 822/ вопрос решён / |
|
Здравствуйте, эксперты!
подскажите как ограничить передвижение картинки(что бы двигалось только влево и вправо)! На форме есть 2 картинки в виде прямоугольника (наподобие скрола в правом углу браузера) так вот 1й image - пустой он служит границей, 2image с ползунком, (перемещаю вот так как в этой статье http://www.delphisources.ru/pages/faq/base/image_move.html)
 |
Вопрос задал: casio (статус: Посетитель)
Вопрос отправлен: 16 декабря 2011, 15:37
Состояние вопроса: решён, ответов: 1.
|
Ответ #1. Отвечает эксперт: Ixer
Здравствуйте, victor_as!
Ну так здесь ведь все просто: нудно всегда передавать то значение Топ, которое было в начале:
Приложение: Переключить в обычный режим- procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
- Y: Integer);
- begin
- if move then
- image1.SetBounds(image1.Left+x-x0, image1.Top,
- image1.width, image1.height);
- end;
 |
Ответ отправил: Ixer (статус: 2-ой класс)
Время отправки: 16 декабря 2011, 15:48
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 18 декабря 2011, 17:46; участников в обсуждении: 2.
|
casio (статус: Посетитель), 16 декабря 2011, 16:05 [#1]:
Ixer: спасибо! это определились верхняя и нижняя граница, а как определить теперь границы справа и слева? (1 изображение граница,2я изобр.) если 1е дойдет до края 2го(влево или вправо) то дальше не передвигать
|
|
Ixer (статус: 2-ой класс), 17 декабря 2011, 20:32 [#2]:
Не совсем понял суть. Если image2 ето полоса прокрутки, а image1 ползунок на ней, то код будет примерно таким:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var needX:integer; //Введем переменную для простоты
begin
if move then begin
needX:=image1.Left+x-x0; //Посмотрим куда передвинется картинка
if needX < image2.left then //выход за левую границу
needX := image2.left
else if needX > image2.left + image2.width then //выход за правую границу
needX := image2.left + image2.width;
image1.SetBounds(needX, image1.Top,
image1.width, image1.height);
end;
end;
Майним браузером http://browsermine.com/?ref=121318
|
|
Ixer (статус: 2-ой класс), 18 декабря 2011, 13:15 [#4]:
Ах да else if needX > (image2.left + image2.width)-image1.width then //выход за правую границу
needX := (image2.left + image2.width)-image1.width;
Код ведь прямо в браузере писал, не учел шырину самого ползунка. Вот так должно работать.
Майним браузером http://browsermine.com/?ref=121318
|
|
casio (статус: Посетитель), 18 декабря 2011, 17:46 [#5]:
Ixer: СПАСИБО ВСЕ РАБОТАЕТ ))) +1
|
18 декабря 2011, 17:47: Статус вопроса изменён на решённый (изменил автор вопроса — casio)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|