| 
| 
 | Вопрос # 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |