Здравствуйте, VladD2, Вы писали:
V>>А зачем все это, если не секрет? V>>Для того, чтобы отобразить скролл-бары без создания отдельных окошек для них надо просто выставить стили окна WS_VSCROLL, WS_HSCROLL, при этом само окно выделит необходимое место в неклиентской части окна.
VD>К сожалению, не на всех платформах поддерживаются все возможности скролбаров. К тому же рисованные скролбары будут очень удобны.
Ясен. Я о многоплатформенности GUI на дотнет тоже думал и экспериментировал (есть кое-какие наработки, если интересно — велкам). Единственно приемлимый способ выходит — это собственная windows-less библиотека контролов, которая умеет использовать некий нативный windows как банальный canvas. Иначе же получаются кучи роперов на каждый интересный контрол.
Кстати, windowsless либа с т.з. моего ИМХО должна дать приличное ускорение рендеринга сложных форм на дотнет, ибо сейчас там такааааая жопа происходит при обработке всяких WM_PAINT... В общем, как выяснилось, GUI в дотнет тормозит не из-за характера самого дотнета, а от способа реализации кишков Windows.Forms...
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Badenweiler, Вы писали:
B>>А как тогда сделать? В виде контрола и добавить в его коллекцию Controls эти подконтролы (стрелки, ползунок)?
VD>А зачем вообще делать стрелки и ползунок котролами? Их нужно просто нарисовать.
Народ, на мой взгляд было бы гораздо разумнее вынести логику отрисовки элементов управления в отдельный класс, реализующий некий интерфейс а-ля themeAPI. Затем спокойно создавать full-managed котнролы, использующие этот класс для отрисовки своих частей.
Здравствуйте, stele, Вы писали:
B>>А чем по-вашему оперирует декорируемый? А если проскроллить окошко колесом мыши? Должно проскроллиться 3 строки, а не 3 пикселя! (3 строки — стандартное значение в настройках винд)
S>А если это значение изменено? Должно скролироваться столько сколько хочет пользователь, а не 3.
SystemInformation.MouseWheelScrollLines
и этим все сказано
Так я об этом и говорю. H(V)ScrollBar это просто врапперы над системными контролами и полностью перекрыть их отрисовку в managet коде не получается. Я в инете видел пару кастомных скролеров, но они были написаны полностью с нуля (наследуемся от Control и вперед) и со многими ошибками, не говоря уже о компатибельности с обычными скролами.
Здравствуйте, VladD2, Вы писали:
VD>вынести всю отрисовку и логику в отдельный класс который уже подключать как декоратор. Ну, а контрол сделать нанальным совмещением декоратора и простого пустого кортрола.
Хорошая идея. По-моему вполне реализуемая.
... << Anywhere but home :: Hello, I'm your mind >>
? Я доьрался-таки до скроллинга и без разрешения этого вопроса не могу двигаться дальше.
Я видать что то не просекаю.. А чем тебе MinValue и MaxValue как long не понравились? Скролеру ведь должно быть фиолетово что значит к примеру 150 — пиксели, метры или попугаи.
Я сегодня опять почти все немного переделал . Перенес скроллы в новый проект, который по рпзмерам почти сравнялся со StyledControls.
А ведь довольно гибкая система получается. Можно, например сделать скроллы а-ля MacOS X (скролл + под ним 2 кнопки) или как в MS Word добавить к ним какие-нить доп. кнопки. Ну и стили отображения
Здравствуйте, Adopt, Вы писали:
A>Здравствуйте, daredevilcs, Вы писали:
D>>Есть сабж: D>>
D>>Исходники здесь
A>где можно взять манулы или туториалы A>по созданию подобных контролов?
Читай MSDN, GDI+
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, daredevilcs, Вы писали:
D>Здравствуйте, Adopt, Вы писали:
A>>Здравствуйте, daredevilcs, Вы писали:
D>>>Есть сабж: D>>>
D>>>Исходники здесь
A>>где можно взять манулы или туториалы A>>по созданию подобных контролов?
D>Читай MSDN, GDI+
в принципе идея ясна: пользоваться градиентной кистью,
но не понятно как делать блики на кнопках,
то есть чтобы градиент заливался по кругу...?
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, daredevilcs, Вы писали:
D>>>>Исходники здесь
IT>>>Чьё это такое чудо?
D>>Да мое это все
IT>Куль, мне нравится. А зелёненьким можно?
Да хоть розовым
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, Adopt, Вы писали:
A>в принципе идея ясна: пользоваться градиентной кистью, A>но не понятно как делать блики на кнопках, A>то есть чтобы градиент заливался по кругу...?
Блик — это отдельный GraphicsPath, заливаемый LinearGradientBrush
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, Anton Batenev, Вы писали:
AB>Фига се домен "www.marselsolutions.russia.webmatrixhosting.net" — напоминает известное выражение "с таким логином можно е-censored"
AB>Ну а по делу — "The page cannot be displayed — Cannot find server or DNS Error"
Странно У меня то же самое. Полчаса назад все было в порядке.
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, Anton Batenev, Вы писали:
AB>Фига се домен "www.marselsolutions.russia.webmatrixhosting.net" — напоминает известное выражение "с таким логином можно е-censored"
AB>Ну а по делу — "The page cannot be displayed — Cannot find server or DNS Error"
Здравствуйте, daredevilcs, Вы писали:
D>Есть TextBox и Label: D> D>Все здесь
Недочетик один, когда ставишь белый цвет, то получается забавно
(мечтательно) эххх... еще бы комбо/чекбоксики, тулбарчик, да меню, да гридик какой-нибудь простенкий без особых изысков, но чтобы можно было самому дорисовать требуемое...
Здравствуйте, Anton Batenev, Вы писали:
AB>Недочетик один, когда ставишь белый цвет, то получается забавно
А зачем тебе белый цвет? Они не расчитаны на светлые цвета.
AB>(мечтательно) эххх... еще бы комбо/чекбоксики, тулбарчик, да меню, да гридик какой-нибудь простенкий без особых изысков, но чтобы можно было самому дорисовать требуемое...
Согласен. Эх бы... Да еще-б в карман чего-нибудь упало... Эх... А то ведь и стипендии лишили
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, daredevilcs, Вы писали:
AB>>Недочетик один, когда ставишь белый цвет, то получается забавно D>А зачем тебе белый цвет? Они не расчитаны на светлые цвета.
Да мне не нужен — просто было интересно как поведут себя контролы в этой ситуации Оказывается, они на это не расчитаны...
AB>>(мечтательно) эххх... еще бы комбо/чекбоксики, тулбарчик, да меню, да гридик какой-нибудь простенкий без особых изысков, но чтобы можно было самому дорисовать требуемое... D>Согласен. Эх бы... Да еще-б в карман чего-нибудь упало... Эх... А то ведь и стипендии лишили
Здравствуйте, daredevilcs, Вы писали:
D>Хотел сделать ListBox, но там какая-то хERня получается D>Как обычно, здесь
Класс!!! Можно как тестеру попридираться? Ну совсем чуть чуть...
Когда щелкаешь по чекбоксу, визуально происходит как бы нажатие кнопки (области под чекбоксом) и чекбокс включается. Повторное нажатие мышью, визуально опять как нажатие кнопки и чекбокс выключается — все ОК, все более чем логично. А теперь смотрим на радиокнопки:
нажатие машью -> визуальное нажатие области радиокнопки -> состояние включено
повторное нажатие мышью по той же радиокнопке -> опять визуальное нажатие области радиокнопки -> состояние по прежнему включено.
Т.е. вроде как не совсем логично — визуальное нажатие кнопки есть, а состояние не поменялось. ИМХО, было бы логичнее, если состояние не меняется, то и визуального нажатия области тоже не делать.
Здравствуйте, Anton Batenev, Вы писали:
AB>Здравствуйте, Adopt, Вы писали:
D>>>Если серьезно: дерево-то зачем, чего там украшать-то? A>>плюсики/минусы, node A>>а вообще можно еще ComboBox, ListBox
AB>... MainMenu, PopupMenu, ScrollBar, GroupBox, Panel, ToolBar, Grid, etc ... Эх... ляпота бы была!!! ))
Это с самого начала было, не заметил? Насчет остального — до начала семестра неделя , постараюсь ... а потом — как получится
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, Anton Batenev, Вы писали:
AB>Класс!!! Можно как тестеру попридираться? Ну совсем чуть чуть...
Только приветствуется
AB>Т.е. вроде как не совсем логично — визуальное нажатие кнопки есть, а состояние не поменялось. ИМХО, было бы логичнее, если состояние не меняется, то и визуального нажатия области тоже не делать.
А помоему создастся впечатление, что она вообще disabled. Сделаю это настраиваемым.
Сделал, еще чего-нибудь добавлю и выложу завтра.
AB>А так просто супер!!!
Thanx
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, daredevilcs, Вы писали:
AVK>>Если ты всерьез решил заняться, можно сделать проект на rsdn. D>Отлично. Что для этого нужно?
Заявка
Если вы считаете, что проект уже созрел для разработки, то омжете отправлять заявку на адрес moderator@rsdn.ru. В заявке должно быть указано:
Короткое имя проекта. Должно соответствовать правилам идентификатора в языках программирования
Полное имя проекта.
Краткое описание проекта. Одно предложение, максимально полно характеризующее суть проекта.
Аннотация. Несколько предложений, кратко описывающих цели проекта
Статья, подробно описывающая проект в формате шаблона RSDN
Дополнительные материалы в том же формате с описанием того, как их следует разместить в дереве.
Здравствуйте, daredevilcs, Вы писали:
D>Есть тулбар: D>
* Когда нажимаешь на кнопку на тулбаре, то она визуально приподнимается, хотя, логичнее было бы, если бы она опускалась.
* При нажатии на крайние кнопки на тулбаре, она становится какой-то квадратной в верхних углах — не совсем красиво.
Здравствуйте, Anton Batenev, Вы писали:
AB>* Когда нажимаешь на кнопку на тулбаре, то она визуально приподнимается, хотя, логичнее было бы, если бы она опускалась. AB>* При нажатии на крайние кнопки на тулбаре, она становится какой-то квадратной в верхних углах — не совсем красиво.
Все поправил
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, daredevilcs, Вы писали:
AB>>* Когда нажимаешь на кнопку на тулбаре, то она визуально приподнимается, хотя, логичнее было бы, если бы она опускалась. AB>>* При нажатии на крайние кнопки на тулбаре, она становится какой-то квадратной в верхних углах — не совсем красиво. D>Все поправил
Здравствуйте, HotDog, Вы писали:
HD>Здравствуйте, daredevilcs, Вы писали:
D>>т.е. нет. не работают. D>>Искать здесь: http://marselsolutions.russia.webmatrixhosting.net/projects/
HD>А к SVN можно как то прицепиться? Или где то уже пробегал адрес а я прозевал?
Здравствуйте, daredevilcs, Вы писали:
D>Здравствуйте, HotDog, Вы писали:
HD>>А к SVN можно как то прицепиться? Или где то уже пробегал адрес а я прозевал?
D>адрес репозитория вот: svn://rsdn.ru/StyledControls/trunk
Здравствуйте, daredevilcs, Вы писали:
D>Нужно над имеющимися поработать : тулбар усовершенствовать и т.п. D>Можно сделать статусбар. Потом и меню. И еще чего-нибудь нестандартного...
Здравствуйте, HotDog, Вы писали:
HD>Здравствуйте, daredevilcs, Вы писали:
D>>Нужно над имеющимися поработать : тулбар усовершенствовать и т.п. D>>Можно сделать статусбар. Потом и меню. И еще чего-нибудь нестандартного...
HD>Надо сроллеры
HScrollBar и VScrollBar? Это можно.
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, HotDog, Вы писали:
HD>Здравствуйте, daredevilcs, Вы писали:
HD>>>Надо сроллеры D>>HScrollBar и VScrollBar? Это можно.
HD>Хех, там не так то все просто будет. У них не перегружается OnPaint.
Здравствуйте, HotDog, Вы писали:
HD>Здравствуйте, daredevilcs, Вы писали:
HD>>>Хех, там не так то все просто будет. У них не перегружается OnPaint. D>>Это я решил, но есть еще проблема
HD>Так я об этом и говорю. H(V)ScrollBar это просто врапперы над системными контролами и полностью перекрыть их отрисовку в managet коде не получается. Я в инете видел пару кастомных скролеров, но они были написаны полностью с нуля (наследуемся от Control и вперед) и со многими ошибками, не говоря уже о компатибельности с обычными скролами.
В Framework 2.0 я нашел кучу классов, обслуживающих ScrollBar и его отображение. ТАМ, похоже, эта проблема решаема. Вот, только, у меня нет VS 2005. Так что, наверное, напишу, как ты выразился, с нуля. Сегодня первый учебный день, так что займучь этим в выходные.
... << Anywhere but home :: Hello, I'm your mind >>
Так как со скроллбарами, наследуемыми от H/VScrollBar не вышло, имеет ли смысл делать их из Control или UserControl? Или это пустая трата времени? Написано уже 500 строк (12.5кб). Бросить? Или взять готовое, например, с CodeProject, и просто украсить в общем стиле? Вот только я этого не хочу.
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, daredevilcs, Вы писали:
D>Так как со скроллбарами, наследуемыми от H/VScrollBar не вышло, имеет ли смысл делать их из Control или UserControl? Или это пустая трата времени? Написано уже 500 строк (12.5кб). Бросить? Или взять готовое, например, с CodeProject, и просто украсить в общем стиле? Вот только я этого не хочу.
Попробовал скомпилировать все в 2.0, но вышло то же самое.
[в_отчаянии]
Дык там же куча классов и пр., обслуживающих скроллбар, так что он совсем не напоминает обертку над windows-контролом.
[/в_отчаянии]
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, daredevilcs, Вы писали:
D>Так как со скроллбарами, наследуемыми от H/VScrollBar не вышло, имеет ли смысл делать их из Control или UserControl? Или это пустая трата времени? Написано уже 500 строк (12.5кб). Бросить? Или взять готовое, например, с CodeProject, и просто украсить в общем стиле? Вот только я этого не хочу.
Думаю, что имеет смысл их добавить в библиотеку. А уж каким образом, так это дело второе. Смотри что будет лучше с точки зрения цена / качество. Если требуемый тебе скрол где-то уже есть и там не против того, что ты возьмешь их исходнички, то зачем изобретать велосипед? Возьми исходнички, подработай напильником...
Здравствуйте, Anton Batenev, Вы писали:
D>>Или взять готовое, например, с CodeProject, и просто украсить в общем стиле? Вот только я этого не хочу.
AB>Если требуемый тебе скрол где-то уже есть и там не против того, что ты возьмешь их исходнички, то зачем изобретать велосипед? Возьми исходнички, подработай напильником...
Если за основу брать то, что лежит на CodeProject, то подрабатывать напильником там придется столько же, сколько чтобы из болванки стали выточить Су-27.
Здравствуйте, HotDog, Вы писали:
HD>Если за основу брать то, что лежит на CodeProject, то подрабатывать напильником там придется столько же, сколько чтобы из болванки стали выточить Су-27.
А что, все так плохо?
Можете посоветовать что-нибудь более подходящее?
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, HotDog, Вы писали:
D>>А что, все так плохо? HD>...да...
Ну раз так, ммм... забросить это дело и заняться гридом? Но, думаю это не легче.
Чем же заняться?
Может, голосование устроем на РСДН, типа кому чего больше не хватает
не предлагать
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, daredevilcs, Вы писали:
D>Ну раз так, ммм... забросить это дело и заняться гридом? Но, думаю это не легче. D>Чем же заняться?
В гриде тоже скролеры надо будет... да и грид это вещь сама в себе, не проще скролеров.
Да и в скролерах ты уже давно код пишешь, зачем останаливаться?
Делай дальше, только при написании поглядывай на стандартный и старайся остаться при стандартном интерфейсе (я имею ввиду не GUI, а свойства, методы и т.д)
Здравствуйте, HotDog, Вы писали:
HD>Здравствуйте, daredevilcs, Вы писали:
D>>Ну раз так, ммм... забросить это дело и заняться гридом? Но, думаю это не легче. D>>Чем же заняться?
HD>В гриде тоже скролеры надо будет... да и грид это вещь сама в себе, не проще скролеров. HD>Да и в скролерах ты уже давно код пишешь
Давно? 1 день. На прошлой неделе. Только недавно вот вспомнил ().
HD>зачем останаливаться?
Да, согласен. Как-нибудь на следующей неделе. На выходных надо над сайтом потрудиться, придется, наверное, переписывать почти всего с нуля.
HD>Делай дальше, только при написании поглядывай на стандартный и старайся остаться при стандартном интерфейсе (я имею ввиду не GUI, а свойства, методы и т.д)
Конечно, я так и делаю.
... << Anywhere but home :: Hello, I'm your mind >>
Закинул на svn все, что сделал: недоделанные скроллы, в текстбокс добавил отступы,..
Нормально заняться бы скроллами, да времени нет.
Хочется заняться еще какими-нибудь нестандартными контролами. Может, кто посоветует?
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Badenweiler, Вы писали:
B>>Хочется заняться еще какими-нибудь нестандартными контролами. Может, кто посоветует?
AVK>ProgressBar
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Badenweiler, Вы писали:
B>>Есть еще предложения?
А я всегда ищу новые идеи. Меня часто в этом упрекают, что я бросаю один за другим проекты. У меня бездыханно лежат десятки тысяч строк брошенного кода.
VD>А скробраб то ты реализовал?
[интересное предложение]
Делаю. Решил сделать его в виде юзерконтрола. Стрелки у же готовы. Выложил.
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, VladD2, Вы писали:
VD>Здр B>>Делаю. Решил сделать его в виде юзерконтрола. Стрелки у же готовы. Выложил.
VD>Зачем юзерконтрола? Он тогда будет иметь возможность получать фокус и вставлять в себя другие контролы.
А как тогда сделать? В виде контрола и добавить в его коллекцию Controls эти подконтролы (стрелки, ползунок)?
Или обойтись только одним контролом? Это наилучший вариант — один контрол вместо четырех, но геморно
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, Badenweiler, Вы писали:
B>А как тогда сделать? В виде контрола и добавить в его коллекцию Controls эти подконтролы (стрелки, ползунок)?
А зачем вообще делать стрелки и ползунок котролами? Их нужно просто нарисовать.
B>Или обойтись только одним контролом? Это наилучший вариант — один контрол вместо четырех, но геморно
Геморойного там только рассчеты для отрисовки, так как ты уже и так собирашся их сам рисовать, то особого оверхэда не будет.
ЗЫ
Я собственно, сам несколько заинтересован в хорошом скролбаре с исходниками. Дело в том, что МС-ный довольно странно реализован. Пользоваться им как контролом не удобно. Так что если у тебя получится контрол который кроме цветного вида еще может отрисовываться и в системных цветах (что не сложно, так как в дотенете есть бибилиотека для этого), то я стану одним из твоих первых потребителей . Конкретно мне нужны скроблары для Rsdn.Editor.
... << RSDN@Home 1.2.0 alpha rev. 611>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, pearlie, Вы писали:
P>Здравствуйте, VladD2, Вы писали:
VD>>Здравствуйте, Badenweiler, Вы писали:
B>>>А как тогда сделать? В виде контрола и добавить в его коллекцию Controls эти подконтролы (стрелки, ползунок)?
VD>>А зачем вообще делать стрелки и ползунок котролами? Их нужно просто нарисовать.
P>Народ, на мой взгляд было бы гораздо разумнее вынести логику отрисовки элементов управления в отдельный класс, реализующий некий интерфейс а-ля themeAPI. Затем спокойно создавать full-managed котнролы, использующие этот класс для отрисовки своих частей.
Угадываете мои мысли.
Мое видение:
Компонент, управляющий отображением всех таких контролов.
Метод(ы), рисующие контролы (параметры: Graphics g, GraphicsPath p, Color c1, Color c2,.. ). Он(и) будут одни на все контролы и делегаты, их вызывающие будут предлагаться компоненту-управляющему.
Надеюсь, понятно объяснил.
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, pearlie, Вы писали:
P>Здравствуйте, VladD2, Вы писали:
VD>>Здравствуйте, Badenweiler, Вы писали:
B>>>А как тогда сделать? В виде контрола и добавить в его коллекцию Controls эти подконтролы (стрелки, ползунок)?
VD>>А зачем вообще делать стрелки и ползунок котролами? Их нужно просто нарисовать.
P>Народ, на мой взгляд было бы гораздо разумнее вынести логику отрисовки элементов управления в отдельный класс, реализующий некий интерфейс а-ля themeAPI. Затем спокойно создавать full-managed котнролы, использующие этот класс для отрисовки своих частей.
Угадываете мои мысли.
Мое видение:
Компонент, управляющий отображением всех таких контролов.
Метод(ы), рисующие контролы (параметры: Graphics g, GraphicsPath p, Color c1, Color c2,.. ). Он(и) будут одни на все контролы и делегаты, их вызывающие будут предлагаться компоненту-управляющему.
Надеюсь, понятно объяснил.
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Badenweiler, Вы писали:
B>>А как тогда сделать? В виде контрола и добавить в его коллекцию Controls эти подконтролы (стрелки, ползунок)?
VD>А зачем вообще делать стрелки и ползунок котролами? Их нужно просто нарисовать.
Так и было с самого начала
B>>Или обойтись только одним контролом? Это наилучший вариант — один контрол вместо четырех, но геморно
VD>Геморойного там только рассчеты для отрисовки, так как ты уже и так собирашся их сам рисовать, то особого оверхэда не будет.
Отрисовка вся уже давно есть, нет только самой скролльной логики
VD>ЗЫ
VD>Я собственно, сам несколько заинтересован в хорошом скролбаре с исходниками. Дело в том, что МС-ный довольно странно реализован.
А какое преимущество может быть у моего скролла?
VD>Пользоваться им как контролом не удобно. Так что если у тебя получится контрол который кроме цветного вида еще может отрисовываться и в системных цветах
Что имеется ввиду? SystemColors?
VD>(что не сложно, так как в дотенете есть бибилиотека для этого)
И что за библиотека такая?
VD>, то я стану одним из твоих первых потребителей . Конкретно мне нужны скроблары для Rsdn.Editor.
Крайне признателен
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, Badenweiler, Вы писали:
B>А какое преимущество может быть у моего скролла?
Нличие исходников которые можно править. Плюс скролбары можно просто рисовать на окне. А то котролы вызывают дрожание при изменении размеров окна.
VD>>Пользоваться им как контролом не удобно. Так что если у тебя получится контрол который кроме цветного вида еще может отрисовываться и в системных цветах B>Что имеется ввиду? SystemColors?
Темы ХРэ и стиль System. Ну, в общем как нормальные скролбары винды. Не все же приемлят цветные изыски?!
VD>>(что не сложно, так как в дотенете есть бибилиотека для этого) B>И что за библиотека такая?
Сейчас не помню, но есть классы для отрисовки ХР-эшных тем.
... << RSDN@Home 1.2.0 alpha rev. 611>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Badenweiler, Вы писали:
B>Здравствуйте, jonny210, Вы писали:
D>>>тулбар: J>>Может он у тебя еще и работает быстрей? B>Не понял. Быстрей? Быстрей чего?
Быстрее того что на скриншоте.. Ты же говориш что твой лучше, я и подумал что он и тормозит и глючит меньше чем у мелкомягких.
Здравствуйте, jonny210, Вы писали:
J>Здравствуйте, Badenweiler, Вы писали:
B>>Здравствуйте, jonny210, Вы писали:
D>>>>тулбар: J>>>Может он у тебя еще и работает быстрей? B>>Не понял. Быстрей? Быстрей чего?
J>Быстрее того что на скриншоте.. Ты же говориш что твой лучше, я и подумал что он и тормозит и глючит меньше чем у мелкомягких.
Тулбар тот же, просто на глаз приятнее
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, Badenweiler, Вы писали:
B>Пока только горизонтальный. Поэтому вопрос: вертикальный делать здесь же или в виде отдельного контрола?
Без разницы. Наверно проще будет оформить двумя контролами.
Вот что действительно нужно было бы, так это заполучить функциональность скролера без наличия самого контрола. Ну, чтобы был класс которому где-нить при инициализации передовали контрол и размеры в нем, а этот класс уже перехватывал бы нажатия и производил отрисовку прямо в этот родительский контрол. Тогда, например, я бы мог отрисовывать скорбары прямо в редакторе не создавая лишних контролов.
Вомжможно ли такое? Т.е. в двух словах вынести всю отрисовку и логику в отдельный класс который уже подключать как декоратор. Ну, а контрол сделать нанальным совмещением декоратора и простого пустого кортрола.
... << RSDN@Home 1.2.0 alpha rev. 611>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Badenweiler, Вы писали:
B>Здравствуйте, VladD2, Вы писали:
VD>>вынести всю отрисовку и логику в отдельный класс который уже подключать как декоратор. Ну, а контрол сделать нанальным совмещением декоратора и простого пустого кортрола.
B>Хорошая идея. По-моему вполне реализуемая.
Декоратор — это хорошо. А как декорируемый контрол будет сообщать скроллу о необходимости изменить положение ползунка, размер ползунка и т.п.?
Здравствуйте, pearlie, Вы писали:
P>Здравствуйте, Badenweiler, Вы писали:
B>>Здравствуйте, VladD2, Вы писали:
VD>>>вынести всю отрисовку и логику в отдельный класс который уже подключать как декоратор. Ну, а контрол сделать нанальным совмещением декоратора и простого пустого кортрола.
B>>Хорошая идея. По-моему вполне реализуемая.
P>Декоратор — это хорошо. А как декорируемый контрол будет сообщать скроллу о необходимости изменить положение ползунка, размер ползунка и т.п.?
А разве он сам не сможет их изменить?
Value — положение ползунка
Maximum, Minimum — размер ползунка
Или я не понял вопроса?
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, Badenweiler, Вы писали:
P>>Декоратор — это хорошо. А как декорируемый контрол будет сообщать скроллу о необходимости изменить положение ползунка, размер ползунка и т.п.?
B>А разве он сам не сможет их изменить? B>Value — положение ползунка B>Maximum, Minimum — размер ползунка B>Или я не понял вопроса?
Сможет. Но для этого он должен знать, кто его декорирует, или кидать специализированные события. Я так понял Владу интересен именно вариант, когда контрол не знает о том, что его декорируют, нет?
...Ты никогда не решишь проблему, если будешь думать так же, как те, кто ее создал.
Здравствуйте, pearlie, Вы писали:
P>Здравствуйте, Badenweiler, Вы писали:
P>>>Декоратор — это хорошо. А как декорируемый контрол будет сообщать скроллу о необходимости изменить положение ползунка, размер ползунка и т.п.?
B>>А разве он сам не сможет их изменить? B>>Value — положение ползунка B>>Maximum, Minimum — размер ползунка B>>Или я не понял вопроса?
P>Сможет. Но для этого он должен знать, кто его декорирует, или кидать специализированные события. Я так понял Владу интересен именно вариант, когда контрол не знает о том, что его декорируют, нет?
Контрол (е'дитор в данном случае ) сам управляет скроллами. Ну, например, если ему нужно показать оба (вертикальный и горизонтальный) скролла, откуда скролл сможет об этом узнать? Да ниоткуда. Контрол сам подстроит его (здесь еще нужно определенный размер выставить для такого случая? чтобы припасти место для пустого прямоугольничка:
B>Да и как контрол не может знать, что его декорируют?
Легко. см. паттерн "декоратор" Я понял слова Влада буквально, раз "декоратор" — то в терминологии "Банды четырех"
B>Откуда-ж скроллы будут получать значения value, max, min, etc.?
Здравствуйте, pearlie, Вы писали:
P>Здравствуйте, Badenweiler, Вы писали:
B>>Да и как контрол не может знать, что его декорируют?
P>Легко. см. паттерн "декоратор" Я понял слова Влада буквально, раз "декоратор" — то в терминологии "Банды четырех"
Наверное, дело в том, что я их не читал (Mission Statement: форум "Образование и наука"
+1)
B>>Откуда-ж скроллы будут получать значения value, max, min, etc.? P>Это был мой вопрос
Ну да. А это был мой ответ. Читай: НИКАК
B>>Хотя, слово Владу P>ок, ждем Влада.
Мож приглашение в RSDN.Editor запостить? Все-ж по теме.
... << Anywhere but home :: Hello, I'm your mind >>
Есть только отрисовка, пока нужно повозиться с этим декораторством.
VD>вынести всю отрисовку и логику в отдельный класс который уже подключать как декоратор.
Вынес. А что, этот декоратор — это паттерн такой
? Я-то такого не знаю и понял как есть.
VD>Ну, а контрол сделать нанальным совмещением декоратора и простого пустого кортрола.
Совместил, работает. Но я как сделал: класс, наследуемый от Контрол и включающий этот самый класс-декоратор, передающий ему все данные (себя и прямоугольник скролла (в данном случае весь ClientRectangle), как ты и говорил) и содержащий все свойства СкроллБара, соответствующие таким же свойтсвам декоратора.
Или нужна возможность подключения декораторов налету, в дизайн-тайм?
А может интерфейс (interface IHasScrollBars) сделать, чтобы декоратор брал оттуда свойства Rectangle, Value, Maximum, Minimum, etc. и события их изменения, на которые он мог бы подписаться. Тогда ручного управления декоратором не понадобилось бы.
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, Badenweiler, Вы писали:
VD>>вынести всю отрисовку и логику в отдельный класс который уже подключать как декоратор. B>Вынес. А что, этот декоратор — это паттерн такой
Ну, он как есть видимо мало будет отличаться. Смысл то названием передается довольно полно.
B>Совместил, работает. Но я как сделал: класс, наследуемый от Контрол и включающий этот самый класс-декоратор, передающий ему все данные (себя и прямоугольник скролла (в данном случае весь ClientRectangle), как ты и говорил) и содержащий все свойства СкроллБара, соответствующие таким же свойтсвам декоратора.
Ага. То что нужно.
B>Или нужна возможность подключения декораторов налету, в дизайн-тайм?
Лично мне нет. Но сделать это не сложно. Нужно только чтобы декоратор был оформлен как интерфейс, и у контрола было свойство с типом этого интерфейса. Тогда можно будет подсовывать этот самый декоратор когда угодно. Например, сделать в дизантайме комбик и выбирать вариант декоратора из имеющихся.
B>А может интерфейс (interface IHasScrollBars) сделать, чтобы декоратор брал оттуда свойства Rectangle, Value, Maximum, Minimum, etc. и события их изменения, на которые он мог бы подписаться. Тогда ручного управления декоратором не понадобилось бы.
Можно и так. Но чем меньше о нем нужно думать, тем лучше. Подключаться он все равно будет только к контролам. Так что возможно лучше было бы задать некую информацию и забыть о нем. А он пусть уж сам подключаетя на события и отслеживает что нужно.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, pearlie, Вы писали:
P>Декоратор — это хорошо. А как декорируемый контрол будет сообщать скроллу о необходимости изменить положение ползунка, размер ползунка и т.п.?
Дык декорируему может и не нужно это знать. Так что однозначно событиями. По одному на каждое изменение. Тогда я смогу подключить декоратор к одному контролу, а обрабатывать события где угодно в другом месте.
У меня в редакторе, например, скролбары находятся во внешнем контроле-декораторе. Этот контрол только и делает, что реализует логику скролирования. Вот в него бы и влепить данный класс. Веренее два. А там глядишь и от него можно избавиться... В общем, гибкость.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, pearlie, Вы писали:
P>Сможет. Но для этого он должен знать, кто его декорирует, или кидать специализированные события. Я так понял Владу интересен именно вариант, когда контрол не знает о том, что его декорируют, нет?
Да, это желательно. Но при этом нет проблем отлавливать события скроллинга явно. Так что декоратор должен сам пасти контрол к которому его прикрепили, но при этом предоставлять события чтобы можно было реагировать на скроллинг где угодно и как угодно.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Badenweiler, Вы писали:
B>>>Хотя, слово Владу P>>ок, ждем Влада. B>Мож приглашение в RSDN.Editor запостить? Все-ж по теме.
Попробую еще раз.
Итак, у меня есть с одной стороны просто контрол к которому я привязываю этот объект. При этом я не хочу дергать этот объект при каждом нажатии мыши или перемещении курсора. Объект должен будучи подключенным к любому контролу подключиться к его событиям и работать как строенные скролбары.
Но при этом, у меня еще есть логика редактора. Она, кстати, находится не в этом контроле! Она находится в классе представления и т.п. Так вот этому коду нужно передать ссылку на виртуальные скролбары как на полноценный интерфейс (причем лучше именно как интерфейс, чтобы не заморачиваться с реализацией). От этого интерфейса нужна функциональность вроде:
* Задание количества едениц прокрутки (строк/клонок/пикселе, в общем, попугаев) в документе.
* Задание количества едениц прокрутки влезающих в представление (окно видимое на экране).
* Задание текущей верхней еденицы прокрутки (строки, например). Собственно это и есть программная прокрутка.
* Возможность подключиться к событиям вроде "прокрутка на дону строку", "прокрутка страницы", "переход в начало документа"...
* Возможность программной эмуляции прокрутки, т.е. методы вроде "ПерейтиНаСлудующуюСтраницу"...
Короче, интерфейс скроллбара.
Таким боразом, для контрола это убдет чистый паттерн декоратор. А для меня еще и объект-скроллбар.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>... VD>Таким боразом, для контрола это убдет чистый паттерн декоратор. А для меня еще и объект-скроллбар.
Я вот к чему пришел: если придется передавать декоратору кроме самого контрола еще и прямоугольник скроллбара, ИМХО никакой изолированности не будет.
Итак, этот декоратор теперь будет управлять не только одним скроллбаром, а обеспечивать скроллинг вообще: показывать (enable'ить) скроллбары при выходе содержимого контрола за пределы контрола, ловить, например, RightToLeftChanged, чтобы переместить скроллы на другую сторону контрола, и т.п.
Эх, а я еще хотел закончить всю эту возню со скроллами в эти выходные.
... << Anywhere but home :: Hello, I'm your mind >>
А кто-нибудь этими контролами действительно пользуется?
А то я ведь и сам их не юзаю (не потому-что "Фи", а потому-что привык писать все ручками и лишних библиотек в Referenc'ах не признаю, даже своих , если они из другого солюшена)
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, Badenweiler, Вы писали:
B>А кто-нибудь этими контролами действительно пользуется?
не я...
B>А то я ведь и сам их не юзаю (не потому-что "Фи", а потому-что привык писать все ручками и лишних библиотек в Referenc'ах не признаю, даже своих , если они из другого солюшена)
Хм... а я бы наверное признавал, сам всё не напишешь!
А контролы нравятся, но пока их решительно негде использовать.
Здравствуйте, fddima, Вы писали:
F>Здравствуйте, Badenweiler, Вы писали:
B>>А кто-нибудь этими контролами действительно пользуется? F> не я...
B>>А то я ведь и сам их не юзаю (не потому-что "Фи", а потому-что привык писать все ручками и лишних библиотек в Referenc'ах не признаю, даже своих , если они из другого солюшена) F> Хм... а я бы наверное признавал, сам всё не напишешь! F> А контролы нравятся, но пока их решительно негде использовать.
А если добавить им офисного стиля? Поменять отрисовку, не меняя формы не сложно.
... << Anywhere but home :: fb2k: Cass & Slide — Perception (Vocal Mix)>>
Здравствуйте, Badenweiler, Вы писали:
B>А если добавить им офисного стиля? Поменять отрисовку, не меняя формы не сложно.
А бог его знает... Если такими темпами и дальше пойду, то уйду в админы...
Офисный стиль... ммммммм... Скриншоты 12 офиса
Здравствуйте, Anton Batenev, Вы писали:
AB>Я жду завершения минимального количества контролов, которое мне требуется, дабы по 10 раз не переписывать все.
Здравствуйте, Badenweiler, Вы писали:
AB>>Я жду завершения минимального количества контролов, которое мне требуется, дабы по 10 раз не переписывать все. B>Оглсите весь списк пжлста
Ну... скроллеры, грид...
P.S. а с сайта проект не скачивается, по этому точнее сказать не могу...
Да, давно меня не было
AB>Ну... скроллеры,
В процессе (см. обсуждение выше)
AB>грид...
даже не планирую, в будущем
AB>P.S. а с сайта проект не скачивается, по этому точнее сказать не могу... svn://rsdn.ru/StyledControls/trunk
Здравствуйте, VladD2, Вы писали: VD>Таким боразом, для контрола это убдет чистый паттерн декоратор.
Чистый? Не уверен.
Прошла уже неделя, а я ни строчки не написал .
Короче, будет вот так:
HScrollBar и VScrollBar будут ловить события парента и брать всю необходимую инфу — max кол-во юнитов (наверное, пикселей, хотя, можно и букв), содержащихся в строке, ширину парента и т.п (для вертикального немного другое), подписываться на сообытия изменения этой инфы и будут полностью управлять собой (в том числе показывааться/скрываться или енаблиться/дизаблиться).
Все! Начну сегодня же.
... << Anywhere but home :: fb2k: Cass & Slide — Perception>>
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Badenweiler, Вы писали:
B>>Получается куча интерфейсов: три на декорируемого + по 2 на декораторов.
VD>А зачем по два то? Приведи их описание...
//Один - для любого скролла (верт. и гориз.)public interface IScrollBarDecorator
{
int Maximum { get; }
int Minimum { get; }
int LargeChange { get; }
int SmallChange { get; }
int Value { get; }
event EventHandler ValueChanged;
}
//Второй = На каждогоpublic interface IHScrollBarDecorator : IScrollBarDecorator
{
//Именно так, потому-что не всем требуются оба скролла
IHScrollableControl Parent { get; set; }
//Можно еще чего-нибудь добавить
}
... << Anywhere but home :: Hello, I'm your mind >>
Забыл про самое главное:
Раз уж декоратор будет управлять скроллингом, ему нужно позволить "проскроллить" парента до нужной точки:
public interface IScrollableControl
{
void ScrollToPoint(Point p);
//...
Исходники Editor'а не смотрел, поэтому спрашиваю: Никаких препятствий для этого не будет?
И еще:
Как насчет изменения размера видимой области (VisibleContentSize) при показе/скрытии скроллов (понятно, что имеется ввиду? Скроллы должны скрываться, когда ContentSize <= VisibleContentSize)? Кто это будет делать, декоратор или декорируемый?
И на этот раз не поленись ответить
P.S. Бл., уже месяц торчу на этих скроллерах
... << Anywhere but home :: fb2k: Moby — Why Does My Heart Feel So Bad >>
Здравствуйте, Badenweiler, Вы писали:
B>Здравствуйте, VladD2.
B>Забыл про самое главное: B>Раз уж декоратор будет управлять скроллингом, ему нужно позволить "проскроллить" парента до нужной точки: B>
Эээ... какие точкми-мчки? Ты про сдвиг изображения? Дык это делается подругому. См. ScrollWindow.
B>Исходники Editor'а не смотрел, поэтому спрашиваю: B> Никаких препятствий для этого не будет?
В нем вообще сдвига изображения нет. Там при прокрутке просто меняется верхняя видимая строка и происходит полная перерисовка окна.
B>И еще: B>Как насчет изменения размера видимой области (VisibleContentSize) при показе/скрытии скроллов (понятно, что имеется ввиду? Скроллы должны скрываться, когда ContentSize <= VisibleContentSize)? Кто это будет делать, декоратор или декорируемый?
Декоратор конечно. Но поведение должно быть разным. Возможно два варианта:
1. Скрытыть скролбар.
2. Сделать скролбар неактивным (задизаблить его).
В Rsdn.Editor я делаю их неактивными. Это и проще, и изображение не дергается.
B>И на этот раз не поленись ответить
B>P.S. Бл., уже месяц торчу на этих скроллерах
Дык вещь непростая. Особая полезность этого дела в том, что на КомпактФрэймворке скроллеры практически не поддерживаются. Так что чистая реализация позволит перносить контролы на КПК.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Эээ... какие точкми-мчки? Ты про сдвиг изображения? Дык это делается подругому. См. ScrollWindow. B>>... VD>В нем вообще сдвига изображения нет. Там при прокрутке просто меняется верхняя видимая строка и происходит полная перерисовка окна.
VD>Декоратор конечно. Но поведение должно быть разным. Возможно два варианта: VD>1. Скрытыть скролбар. VD>2. Сделать скролбар неактивным (задизаблить его).
Ну я и сам так задумывал. Но должен ли на это реагировать декорируемый? Хотя, это мелочи. Пока забьем.
И еще: как быть с единицами скроллинга? Может, я туплю, но выходит, что их должно быть две:
одна — строка/символ (единица контента), другая — пиксель (экранная единица). Некрасиво, однако.
Здравствуйте, VladD2.
B>>Забыл про самое главное: B>>Раз уж декоратор будет управлять скроллингом, ему нужно позволить "проскроллить" парента до нужной точки: B>>
? Я доьрался-таки до скроллинга и без разрешения этого вопроса не могу двигаться дальше.
HD>Я видать что то не просекаю.. А чем тебе MinValue и MaxValue как long не понравились? Скролеру ведь должно быть фиолетово что значит к примеру 150 — пиксели, метры или попугаи.
А чем по-вашему оперирует декорируемый? А если проскроллить окошко колесом мыши? Должно проскроллиться 3 строки, а не 3 пикселя! (3 строки — стандартное значение в настройках винд)
Здравствуйте, 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>>
В задаче спрашивается:
Сколько вытечет портвейна из открытого бассейна?
Сегодня на лекции по мат. логике сообразил вот такой логотипчик для скроллов. Только что вот нарисовал. И не говорите, что не похоже на цвяточек (я не любитель флоры, но так вышло):
Здравствуйте, 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.
Здравствуйте, VladD2, Вы писали:
B>>Я уже добавил в интерфейс декорируемого свойства HUnitSize и VUnitSize.
VD>И что в них помещать?
VD>Давай представим реальную ситуацию. Вот у меня редактор кода который скролирует текст по строкам. Что я должен буду указать в эти свойства?
VUnitSize = высота строки (разве, это так сложно?) HUnitSize = ширина символа (как в студии, хотя, в ворде я не понял, что это за величина)
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Badenweiler, Вы писали:
VD>Контрол должен измерять все в попугаях, а уж интерпретация этих попугаев — это проблема прикладного программиста.]
В попугаях? Что имеется ввиду под контролом? Декоратор? Т.е. попугаи == пиксели? Так кто должен скроллить окно? Декорируемый?
Есть вот такой enum:
enum ScrollValue
{
Line, //Ну, это
Page, // понятно
All //Проскролть до конца
}
Т.к. я выделил многое из декоратора, ему передается вот такой параметр и его интерпретирует именно он. А теперь, значит, нудно передавать его выше — декорируему. До этого декорируемый ничего не выполнял, а теперь — заставить его самогму скроллиться?
А прикладной программист — это тот, что прикручивает декоратор себе к контролу? А как же изоляция? (см. выше)
Здравствуйте, Badenweiler, Вы писали:
B>Здравствуйте, VladD2, Вы писали:
B>>>Я уже добавил в интерфейс декорируемого свойства HUnitSize и VUnitSize.
VD>>И что в них помещать?
VD>>Давай представим реальную ситуацию. Вот у меня редактор кода который скролирует текст по строкам. Что я должен буду указать в эти свойства?
B>VUnitSize = высота строки (разве, это так сложно?) B>HUnitSize = ширина символа (как в студии, хотя, в ворде я не понял, что это за величина)
А зачем они?
B>А если не так, то как?
Есть два варианта работы со скролингом. Причем живут они параллельно и один другой не исключает.
1. Когда высота строк одинаковая. При этом можно определить сколько строк влезает в представлении (читай окне) и сколько строк есть в документе (тоже самое и по горизонтали). При этом можно задать эти два параметра (количество строк в представлении и сколько строк в документе (т.е. всего)) и получить скроллеры отражающие не только козицию но и приблизительный размер документа. Обрати внимание на то, что большинство скролбаров в виндовс имеют движок переменного размера. Его размер как раз и отражает отношение количества строк в документе к количеству строк в предствлении.
2. Когда строка имеет переменный размер. При этом скролинг ведется построчно, а точное количество строк влезающих в представление определить невоможно (оно варьируется от страницы к странице). При этом обычно или забивают на количество строк на странице, или указывают приблизительное их число и мучаются (так как при этом отображение движков сроллера получается не очень точным). Вот я, например, мучаюсь в Rsdn.Editio-е, так как строки могут быть разного размера.
Собственно оба варианта не требуют определения размера одной строки, хотя в первом его можно рассчитать.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Badenweiler, Вы писали:
B>В попугаях?
Ну, в неких абстрактных еденицах. Это и не пиксели и не строки... это нечто с чем удобно работать коду взаимодействующему со скроллерами.
B> Что имеется ввиду под контролом?
Ну, скроллбар.
B> Декоратор? Т.е. попугаи == пиксели?
Не факт. Это просто не должно волновать скролбары. Им сказали что всего в документе Х попугаев, а в представление влезает У который меньше или равен Х.
B> Так кто должен скроллить окно? Декорируемый?
Нет. Скролировать должен прикладной код. Это не забота скролбаров. Они должны только отрабатывать мат.модель. Ну, то есть, выдавать текущую позицию, выдавать события вроде перелистывания страницы/строки и позволят изменить текущую позицию (как напрямую, так и эмуляцией событий скролирования).
B>А прикладной программист — это тот, что прикручивает декоратор себе к контролу? А как же изоляция? (см. выше)
Изоляция от чего?
Смотри... у меня есть модель документа и представление с его состоянием. Покрутка — это изменение состояния преставления. Мне нужно иметь возможность:
1. Отразить текущее состояние представления. Для этого я должен иметь возможность задать текущую верхнюю строку (строку условно) представления. Это должно отразиться на скроллере путем сдвижки его движка. Например, если строка равна 0, то движок должен оказаться в самом верху. Если же значение равно 50, а общее количество строк 100, то движок должен оказаться в середите. Ну, и так делее...
2. Я должен иметь возможность получения событий скролинга (перемещение на страницу в верх, перемещение на строку вниз, и т.п.).
3. Я должен иметь возможность сэмулировать скролинг. То есть мне нужны методы вроде PageDown(), LineUp() и т.п.
Собственно все. А логика работы такая. Когда я получаю событие PageDown я произвожу нужные рассчеты, изменяю состояние представления и отражаю его в скроллбаре. Когда мне нужно выполнить программный переход на страницу вниз я вызываю метод PageDown() который генерирует событие...
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
B>>В попугаях? VD>Ну, в неких абстрактных еденицах. Это и не пиксели и не строки... это нечто с чем удобно работать коду взаимодействующему со скроллерами.
Ну себя-то скроллы в экранных единицах измеряют (пикселях). Ну да ладно.
B>>попугаи == пиксели? VD>Не факт. Это просто не должно волновать скролбары.
Ну да, сейчас так оно есть
VD>Скролировать должен прикладной код. Это не забота скролбаров.
Да я просто подумал, что скроллы должны ловить такие события (MouseWheel, Up, Down, PageUp, PageDown,..) и сами скроллить окно. Ну а раз так — тогда понятно.
Здравствуйте, VladD2, Вы писали:
VD>Есть два варианта работы со скролингом. Причем живут они параллельно и один другой не исключает. VD>1. Когда высота строк одинаковая. VD>2. Когда строка имеет переменный размер.
Вот об этом я и говорил
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Badenweiler, Вы писали:
VD>>>1. Когда высота строк одинаковая. VD>>>2. Когда строка имеет переменный размер. B>>Вот об этом я и говорил
Кто-нибудь это использует? Как скорость отрисовки? Я тут почитал топик, вроде используется GDI+, а он не очень шустрый. Если контролов много, скажем штук 50, это всё не превращается в большой мигающий тормоз?
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, daredevilcs, Вы писали:
A>Кто-нибудь это использует?
Меня и самого когда-то это очень интересовало
A>Как скорость отрисовки? Я тут почитал топик, вроде используется GDI+, а он не очень шустрый. Если контролов много, скажем штук 50, это всё не превращается в большой мигающий тормоз?
Эх, лениво, конечно, но на неделе попробую.
Здравствуйте, Badenweiler, Вы писали:
A>>Как скорость отрисовки? Я тут почитал топик, вроде используется GDI+, а он не очень шустрый. Если контролов много, скажем штук 50, это всё не превращается в большой мигающий тормоз? B>Эх, лениво, конечно, но на неделе попробую.
Попробовал. Кнопки в количестве 48 штук "выглядят" вполне комфортно. Отрисовка занимает у меня 265 мс (Celeron-Willamette 1.7Ghz). Многие остальные контролы ненамного сложнее кнопок, так что, можно сказать, что ситуация несовсем плачевна.
Пробовал множить тулбары: штук двадцать с общим количеством кнопок более 300 — это же время уходит только на отрисовку каждого (тулбара) — но их отрисовка непроста, да и в таком количестве они не часто нужны.