? Я доьрался-таки до скроллинга и без разрешения этого вопроса не могу двигаться дальше.
HD>Я видать что то не просекаю.. А чем тебе MinValue и MaxValue как long не понравились? Скролеру ведь должно быть фиолетово что значит к примеру 150 — пиксели, метры или попугаи.
А чем по-вашему оперирует декорируемый? А если проскроллить окошко колесом мыши? Должно проскроллиться 3 строки, а не 3 пикселя! (3 строки — стандартное значение в настройках винд)
Я сегодня опять почти все немного переделал . Перенес скроллы в новый проект, который по рпзмерам почти сравнялся со StyledControls.
А ведь довольно гибкая система получается. Можно, например сделать скроллы а-ля MacOS X (скролл + под ним 2 кнопки) или как в MS Word добавить к ним какие-нить доп. кнопки. Ну и стили отображения
Здравствуйте, Badenweiler, Вы писали:
B>А чем по-вашему оперирует декорируемый? А если проскроллить окошко колесом мыши? Должно проскроллиться 3 строки, а не 3 пикселя! (3 строки — стандартное значение в настройках винд)
А если я твой скролер хочу применить в графическом редакторе? Ты собираешься скролить картинку на 3 строки?
Мне кажется телега катится не в ту сторону.
В общем я себе представлял это так себе:
Скролер меняет значения Value в пределах MinValue, MaxValue.
При изменении пуляется евент. И приложение, которое использует эти скролеры должным образом реагирует.
Иначе ты напишеь сролер который заточен только на текстовый редактор и не на что более.
Ну или возможно я уже потерял нить дискуссии и речь идет именно о текстовом скролере, тогда заранее прошу прощения.
Здравствуйте, HotDog, Вы писали:
HD>Мне кажется телега катится не в ту сторону.
HD>В общем я себе представлял это так себе: HD>Скролер меняет значения Value в пределах MinValue, MaxValue.
Ни value, ни MinValue, MaxValue там нет HD>При изменении пуляется евент. И приложение, которое использует эти скролеры должным образом реагирует.
Декорируемы пусть будет изолирован он декоратора и не должен заниматься делами декоратора — на то он и декорируемый HD>Иначе ты напишеь сролер который заточен только на текстовый редактор и не на что более.
А какая проблема в, например, граф редакторе за единицу контента применить тот же пиксель? Или десять?
HD>Ну или возможно я уже потерял нить дискуссии и речь идет именно о текстовом скролере, тогда заранее прошу прощения.
Да нет, он подойдет для любого контента
Здравствуйте, Badenweiler, Вы писали:
B>А чем по-вашему оперирует декорируемый? А если проскроллить окошко колесом мыши? Должно проскроллиться 3 строки, а не 3 пикселя! (3 строки — стандартное значение в настройках винд)
А если это значение изменено? Должно скролироваться столько сколько хочет пользователь, а не 3.
... <<My edition based on RSDN@Home 1.2.0 alpha rev. 618>>
В задаче спрашивается:
Сколько вытечет портвейна из открытого бассейна?
Здравствуйте, stele, Вы писали:
B>>А чем по-вашему оперирует декорируемый? А если проскроллить окошко колесом мыши? Должно проскроллиться 3 строки, а не 3 пикселя! (3 строки — стандартное значение в настройках винд)
S>А если это значение изменено? Должно скролироваться столько сколько хочет пользователь, а не 3.
SystemInformation.MouseWheelScrollLines
и этим все сказано
Сегодня на лекции по мат. логике сообразил вот такой логотипчик для скроллов. Только что вот нарисовал. И не говорите, что не похоже на цвяточек (я не любитель флоры, но так вышло):
Здравствуйте, VladD2, Вы писали:
VD>Попробую еще раз.
[skip]
VD>Таким боразом, для контрола это убдет чистый паттерн декоратор. А для меня еще и объект-скроллбар.
А зачем все это, если не секрет?
Для того, чтобы отобразить скролл-бары без создания отдельных окошек для них надо просто выставить стили окна WS_VSCROLL, WS_HSCROLL, при этом само окно выделит необходимое место в неклиентской части окна.
Затем, чтобы по-своему рисовать эти скроллбары надо всего-навсего самому обрабатывать WM_NCPAINT сообщение.
Далее, с логикой скролл-баров возиться тоже не надо, эта логика выполняется автоматически окном при выставленных стилях WS_VSCROLL или WS_HSCROLL. Мы можем устанавливать параметры скролл-баров через SetScrollInfo, SetScrollPos, SetScrollRange. Само окно должно реагировать на WM_HSCROLL и WM_VSCROLL.
Т.е., всего-то требуется самому нарисовать неклиентскую часть окна, текущие параметры скролл-баров можно получать зеркальными ф-иями GetScrollBarInfo, GetScrollInfo, GetScrollPos и т.д., как удобно (достаточно одного из GetScrollBarInfo или GetScrollInfo).
Далее. Если ты, Влад, пишешь на 2-й версии, то там есть ControlRenderer, который умеет рендерить контролы "в тему", т.е. надо просто вызвать его методы с нужными параметрами для отрисовки элементов скролл-баров.
Здравствуйте, vdimas, Вы писали:
V>А зачем все это, если не секрет? V>Для того, чтобы отобразить скролл-бары без создания отдельных окошек для них надо просто выставить стили окна WS_VSCROLL, WS_HSCROLL, при этом само окно выделит необходимое место в неклиентской части окна.
К сожалению, не на всех платформах поддерживаются все возможности скролбаров. К тому же рисованные скролбары будут очень удобны.
V>Затем, чтобы по-своему рисовать эти скроллбары надо всего-навсего самому обрабатывать WM_NCPAINT сообщение.
V>Далее, с логикой скролл-баров возиться тоже не надо, эта логика выполняется автоматически окном при выставленных стилях WS_VSCROLL или WS_HSCROLL. Мы можем устанавливать параметры скролл-баров через SetScrollInfo, SetScrollPos, SetScrollRange. Само окно должно реагировать на WM_HSCROLL и WM_VSCROLL.
Это все завязки на Виндовс. А такая библиотека может быть с успехом испльзована как на других платформах, так и на том же виндовс, но с собственным "Лук энд фил" (ну, там скролбары в Маковском стиле...).
V>Далее. Если ты, Влад, пишешь на 2-й версии, то там есть ControlRenderer, который умеет рендерить контролы "в тему", т.е. надо просто вызвать его методы с нужными параметрами для отрисовки элементов скролл-баров.
Об этом я уже говорил. Но он делает (по-умолчанию) "Цветные контролы" потому речь и ведется о выделении логики отрисовке.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, stele, Вы писали:
S>Здравствуйте, Badenweiler, Вы писали:
B>>
S>Только кольцо, в смыле бутончик, надо в "ленту Мёбиуса" завернуть.
Какое кольцо?
Здравствуйте, VladD2, Вы писали:
VD>Но он делает (по-умолчанию) "Цветные контролы" потому речь и ведется о выделении логики отрисовке.
по-умолчанию теперь раз rectangle, два rectangle, три rectangle и SystemColors.Control. Хотя "цветными" их сделать не сложно.
Получается двойная изоляция:
Control //декорируемый
^ //изоляция раз
ScrollDecorator //декоратор. В последнее время значительно похудел за счет нижеследующих
^ //изоляция два
ScrollBarImage //образ скроллбара (одного - H или V). Предоставляет отдельный стиль/порядок/отрисовку
^
ScrollElement //Наследники - ScrollButton, ScrollThumb - элементы скроллера.
Должен ли декорируемый предоставлять инфу про эту единицу (размер в экранных единицах, например)?
Если да, то как? Она должна быть единой для всего контрола или же варьироваться в зависимости от позиции (имеется ввиду, что высота шрифтов может быть разной)? Я посмотрел, как это сделано в ворде (сделал такую "лесенку") — там, похоже, эта единица постоянна и равна высоте шрифта стиля Normal.
На ScrollDecorator уже можно посмотреть (только смотреть, сбилдить не выйдет ). Конечно, все получилось как-то разрозненно, родственный код раскидан по разным местам. Но уже можно что0то понять.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Badenweiler, Вы писали:
VD>Контрол должен измерять все в попугаях, а уж интерпретация этих попугаев — это проблема прикладного программиста.
И что?
Я уже добавил в интерфейс декорируемого свойства HUnitSize и VUnitSize.