Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2010, 10:19   #1
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию Видимость скроллбаров

Есть два скроллбара (TScrollBar), один вертикальный, другой горизонтальный. Управляются полностью вручную. Возникла задача - когда нужно показывать их, а когда не нужно прятать. Но есть один нюанс, бывают случаи когда появление одного приводит к тому, что необходим становится и другой, хотя до этого он вроде как был и не нужен. Как бы получше это сделать? Не то чтобы я совсем не могу это написать, но получается много когда, много проверок, как-то некрасиво, чувствую что можно лучше. Хочется найти оптимальное и красивое решение.

К примеру, есть процедура ShowScrollBars в к-рой этот код, доступны габариты (ширина, высота) области прокрутки, и габариты (ширина, высота) объекта, к-рый может в эту область влазить или не влазить. Позиция объекта всегда 0,0.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 10.09.2010 в 10:23.
mutabor вне форума Ответить с цитированием
Старый 10.09.2010, 12:05   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А не проще ли воспользоваться услугами ScrollBox'a?
Или тогда обьясни поточнее критерии когда показывать когда скрывать Скроллы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.09.2010, 12:19   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А не проще ли воспользоваться услугами ScrollBox'a?
Или тогда обьясни поточнее критерии когда показывать когда скрывать Скроллы.
Не, скроллбокс не подходит, с ним хуже, он вручную плохоуправляемый (а нужно вручную), если под мою задачу, то нужно все его поведение переделывать, неохота. Я остановился на скроллбарах, собственно все уже сделал, осталась эта мелочь, причем интересен способ каким другие программисты это бы сделали, своим кривым способом я знаю как сделать.

Объясняю поточнее:
Объект - картинка.
Показывать скроллы нужно тогда, когда картинка не влазит в прямоугольник на экране, вокруг к-рого стоят эти скроллы (вернее они внутри, были бы вокруг - вопроса бы этого не было). Суть задачи - появление одного скролла делает клиентскую область прямоугольника меньшей на размер этого скролла, и теперь и другой будет нужен, хотя на момент входа в процедуру (до появления первого скролла) он не был нужен. Процедура решает, а нужно ли показывать скроллы, и какой показывать, а какой не показывать, и когда интересует этот вопрос, она вызывается. Так понятно?

Я понимаю что очевидное решение - юзать скроллбокс, это так кажется, потому что я упростил чтобы было понятнее.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 10.09.2010 в 12:30.
mutabor вне форума Ответить с цитированием
Старый 10.09.2010, 12:45   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тогда еще один глупый вопрос - почему бы не вынести их наружу? (скролбоксы всмысле). Тогда клиентская область не будет меняться.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.09.2010, 12:48   #5
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Тогда еще один глупый вопрос - почему бы не вынести их наружу? (скролбоксы всмысле). Тогда клиентская область не будет меняться.
Ты все пытаешься мне другое решение предложить, а я хочу получить ответ на этот конкретный поставленный вопрос

Представьте что вы на передаче Что гДе когда (только тут денег не платят =), вопрос от телезрителя
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 10.09.2010, 13:08   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ладно. Вот как бы сделал я если бы наглотался твоих грибов:
Код:
  ScrollBar1.Top:=Panel1.Height-byte((Image1.Width+Image1.Left)>Panel1.Width)*ScrollBar2.Width;
  ScrollBar2.Left:=Panel1.Width-byte((Image1.Height+Image1.Top)>Panel1.Height)*ScrollBar1.Height;
Здесь:
ScrollBar2 - вертикальный
ScrollBar1 - Горизонтальный
Panel - Контейнер на котором лежит Картинка

Идея ясна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.09.2010, 13:12   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Прошу прощения, может я не правильно объяснил, мне нужно Visible свойство определять, а не Left и Top.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 10.09.2010, 13:23   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не я все понял. Но ты же сказал как бы я сделал? Вотя и решил что сворачивание скролов за пределы видимости даст тот же эффект что и установка Visible
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.09.2010, 14:04   #9
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Не я все понял. Но ты же сказал как бы я сделал?
Ааа, ну тогда другой компот. Сейчас попробую понять, на вид неплохо, компактно, у меня намного больше кода вышло.

Идею понял, интересное решение, с интерпретацией булева значения как цифры. А если бы тебе нужно было все же Visible задавать?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось Stilet; 10.09.2010 в 15:08.
mutabor вне форума Ответить с цитированием
Старый 10.09.2010, 15:11   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А если бы тебе нужно было все же Visible задавать?
А если бы бабушка была дедушкой...
Дружище. На Что Где Когда один вопрос
Да и потом я бы уж точно не стал морочить голову таким - СкроллБокс кинул бы.
Но раз ты уж спрашиваешь:
Код:
 ScrollBar1.Visible:=(Panel1.Height-byte((Image1.Width+Image1.Left)>Panel1.Width)*ScrollBar2.Width)>Panel1.Height;
  ScrollBar2.Visible:=(Panel1.Width-byte((Image1.Height+Image1.Top)>Panel1.Height)*ScrollBar1.Height)>Panel1.Width;
Соответственно не проверял ибо грибы отпустили...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
видимость переменных и методов в c# Sparky Помощь студентам 5 26.07.2010 20:20
видимость данных. запутался navi2 Общие вопросы C/C++ 4 05.04.2010 21:34
Видимость MDI формы. Ital1cs Помощь студентам 0 29.03.2010 14:00
Видимость констант tae1980 Microsoft Office Excel 5 23.11.2009 12:06
Видимость переменных tae1980 Microsoft Office Excel 3 26.03.2009 18:34