Здравствуйте, 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>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>вынести всю отрисовку и логику в отдельный класс который уже подключать как декоратор. Ну, а контрол сделать нанальным совмещением декоратора и простого пустого кортрола.
Хорошая идея. По-моему вполне реализуемая.
... << Anywhere but home :: Hello, I'm your mind >>
Здравствуйте, 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>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.