Важная информация

User Tag List

Показано с 1 по 9 из 9

Тема: реализация scrollbar (полоса прокрутки)

  1. #1
    Guru Аватар для bigral
    Регистрация
    12.07.2006
    Адрес
    Kiev/Ukraine
    Сообщений
    2,089
    Спасибо Благодарностей отдано 
    22
    Спасибо Благодарностей получено 
    85
    Поблагодарили
    72 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию реализация scrollbar (полоса прокрутки)

    вопрос знающим и бывалым, как реализованны полосы прокрутки (какие бывают варианты реализации)?

    на сколько я смог сам представить себе то возможны 2 варианта
    1. рисовать изображение в большой буфер (который отражает всю картину происходящего), но выводить на экран только ту часть которая помещаеся в окно, и к эму всему дело дорисовывать сами полосы прокрутки размер и положение которых вычислять из соотношения размеров этого буфера и окна через которое видна его часть а также из положения высвечиваемой части в буфере.

    2. требовать от программы уметь выводить не весь буфер а именно только ту часть которая видна в окне (это наверно достигается заданием региона в воображаемой большой картине и также обрезание не попавших в окно частей графических примитивов вовремя рисования)

    3. ???

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Master
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    989
    Спасибо Благодарностей отдано 
    60
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    8 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если речь идёт про Спектрум - то обычно применяется вариант 2, так как вариант 1 очень затратный: и памяти надо много, и процессорное время расходуется на формирование невидимого изображения.

    На PC может применяться и вариант 1 в случае, если программисту лень или квалификация не позволяет сделать "по-умному". Памяти хватает, процессор быстрый. Но в критичных приложениях, играх, стараются этого не делать.

    Возможны варианты в зависимости от соотношения размеров полного изображения и видимой его части. Иногда вариант 1 может быть выгоден даже на Спектруме.

    Ну и требуются дополнительные данные. Что за изображение? Текст, графика? Как часто оно должно обновляться? Насколько велика мера обновления (обновляется всё или почти всё, или только малая часть).

    - - - Добавлено - - -

    Вообще сама полоса прокрутки (её реализация) - это несущественный элемент по сравнению с остальными упомянутыми тобой задачами.

  4. #3
    Veteran Аватар для Bedazzle
    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,091
    Спасибо Благодарностей отдано 
    47
    Спасибо Благодарностей получено 
    61
    Поблагодарили
    52 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Зависит от задачи, но ещё можно без буфера - делать сдвиг прямоугольника, и дорисовывать только верхнюю/нижнюю полосу в зависимости от направления прокрутки.
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  5. #4
    Guru Аватар для bigral
    Регистрация
    12.07.2006
    Адрес
    Kiev/Ukraine
    Сообщений
    2,089
    Спасибо Благодарностей отдано 
    22
    Спасибо Благодарностей получено 
    85
    Поблагодарили
    72 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ну давайте такой "элементарный" случай, есть прога которой надо показать картинку с диска, размер картинки ж не известен, как тут прикрутить это дело к окну с прокрутками?

  6. #5
    Guru Аватар для goodboy
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    11,957
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    444
    Поблагодарили
    298 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    тут ещё важно на сколько пикселей делать сдвиг

  7. Этот пользователь поблагодарил goodboy за это полезное сообщение:

    Barmaley_m (22.11.2020)

  8. #6
    Master
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    989
    Спасибо Благодарностей отдано 
    60
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    8 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    ну давайте такой "элементарный" случай, есть прога которой надо показать картинку с диска, размер картинки ж не известен, как тут прикрутить это дело к окну с прокрутками?
    Эта задача нуждается в уточнении:

    1) В каком формате картинка? Это спектрумовская графика или jpeg/png/bmp? Если второе - то как предполагается преобразовывать в спектрумовскую графику?
    2) Сжата ли картинка на диске? Какой алгоритм сжатия?
    3) Помещается ли картинка целиком, в распакованном или хотя бы сжатом виде, в оперативную память, или нужно делать подгрузки с диска?
    4) Требуется ли изменение масштабирования (Zoom)?

  9. #7
    Member Аватар для LW
    Регистрация
    05.09.2007
    Адрес
    Орск
    Сообщений
    80
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    14
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    размер картинки ж не известен
    Размер в любом случае должен быть известен перед выводом.

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Эта задача нуждается в уточнении:
    Эти уточнения к скроллбару отношения не имеют. Главное, процедура должна уметь выводить часть картинки с заданными координатами и размерами. Как автор это реализует, это вопрос второстепенный. А уже на основании этих данных (координаты, размеры выводимого куска картинки, размеры всей картинки) и ширины/высоты полосы прокрутки вычисляются координаты печати и ширина/высота бегунка в полосе прокрутки.

  10. #8
    Guru Аватар для bigral
    Регистрация
    12.07.2006
    Адрес
    Kiev/Ukraine
    Сообщений
    2,089
    Спасибо Благодарностей отдано 
    22
    Спасибо Благодарностей получено 
    85
    Поблагодарили
    72 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от LW Посмотреть сообщение
    Эти уточнения к скроллбару отношения не имеют. Главное, процедура должна уметь выводить часть картинки с заданными координатами и размерами. Как автор это реализует, это вопрос второстепенный. А уже на основании этих данных (координаты, размеры выводимого куска картинки, размеры всей картинки) и ширины/высоты полосы прокрутки вычисляются координаты печати и ширина/высота бегунка в полосе прокрутки.
    короче из этого я делаю вывод что прога выводящая графику просто ОБЯЗАННА уметь выводить не всю картинку а любой прямоугольный кусочек этой всей картинки, с другой стороны сама прога может действовать довольно тупо - выделить буфер в памяти для всей картинки и рисовать туда, а когда требуется вывести прямоугольную область просто выводить часть уже нарисованного ранее

  11. #9
    Member Аватар для LW
    Регистрация
    05.09.2007
    Адрес
    Орск
    Сообщений
    80
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    14
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так собственно использование скроллбара само по себе уже говорит о том, что в окно выводится часть массива, будь то графика, текст, карта уровня к игре и т.п. Так что да - программа обязана уметь выводить
    Цитата Сообщение от bigral Посмотреть сообщение
    любой прямоугольный кусочек этой всей картинки

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 0
    Последнее: 18.05.2020, 14:46
  2. Вертикальная полоса на экране.
    от Quest в разделе Ленинград
    Ответов: 22
    Последнее: 09.07.2017, 17:02
  3. Ответов: 3
    Последнее: 03.12.2014, 13:16
  4. ЮТ-88: Реализация на ПЛИС (uХ_Reverse)
    от Ewgeny7 в разделе ЮТ-88
    Ответов: 26
    Последнее: 31.03.2014, 22:14

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •