Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 822

/ вопрос решён /

Здравствуйте, эксперты!

подскажите как ограничить передвижение картинки(что бы двигалось только влево и вправо)! На форме есть 2 картинки в виде прямоугольника (наподобие скрола в правом углу браузера) так вот 1й image - пустой он служит границей, 2image с ползунком, (перемещаю вот так как в этой статье http://www.delphisources.ru/pages/faq/base/image_move.html)

casio Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: casio (статус: Посетитель)
Вопрос отправлен: 16 декабря 2011, 15:37
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: Ixer

Здравствуйте, victor_as!
Ну так здесь ведь все просто: нудно всегда передавать то значение Топ, которое было в начале:

Приложение:
  1. procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  2. Y: Integer);
  3. begin
  4. if move then
  5. image1.SetBounds(image1.Left+x-x0, image1.Top,
  6. image1.width, image1.height);
  7. end;


Ответ отправил: Ixer (статус: 2-ой класс)
Время отправки: 16 декабря 2011, 15:48
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 18 декабря 2011, 17:46; участников в обсуждении: 2.
casio

casio (статус: Посетитель), 16 декабря 2011, 16:05 [#1]:

Ixer: спасибо! это определились верхняя и нижняя граница, а как определить теперь границы справа и слева? (1 изображение граница,2я изобр.) если 1е дойдет до края 2го(влево или вправо) то дальше не передвигать
Ixer

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
casio

casio (статус: Посетитель), 17 декабря 2011, 23:20 [#3]:

Ixer: да работает :) но не до конца :-( , за правую границу выходит изображение2
вот как на картинке
http://radikal.ru/F/s001.radikal.ru/i196/1112/87/fa7d7981c941.png.html
Ixer

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

casio (статус: Посетитель), 18 декабря 2011, 17:46 [#5]:

Ixer: СПАСИБО ВСЕ РАБОТАЕТ ))) +1 :-)

18 декабря 2011, 17:47: Статус вопроса изменён на решённый (изменил автор вопроса — casio)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.03 сек.