![]() |
|
Модераторы: Poseidon |
![]()
|
|
| Psychosis |
|
|||
|
Unregistered |
Уже 6 дней мучаюсь, никак не могу написать...
Этот scrollbar должен быть расширяемым. Имеется ввиду, что верний предел (Max), на самом деле не является пределом. Просто, при перемещении ползунка до этого Max, и далее, это значении Max будет увеличиваться пропорционально тому, насколько мы этот ползунок удвинули дальше. При последующем обратном движении, Max будет уменьшаться, но не опустится менее первоначального Max. Т.е. здесь есть как бы два предела первоначальный (OriginalMax) и текущий (CurrentMax). Смысл этого. Представте, что у вас прокручиваемой областью является какая-либо диаграмма, на которой находяться разные прямоугольнички. Множество этих прямоугольничков можно "вписать" в большой ограничивающий прямоугольник (BoundsRect). Высота и ширина этого прямоугольника и будет задавать пределы изменения двух scrollbar'ов. Только вое если, пользователю захочется прокрутить на чистое место, что бы положить туда новый прямоугольничек, он с обычным scrollbar'ом этого не сделает. Ответ желательно в форме обработчиков для трех событий: - MouseDown - MouseMove - MouseUp Язык C++ или ObjectPascal.... |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 11 Всего: 360 |
?? Почему бы не ловить событие onchange. Там запоминать значение и сравнивать его с новым. Затем менять соответсвенно MaxValue и двигать бегунок на новое значение setValue() |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Position у стандартного Scrollbar'а не может выходить за [min; max] никогда!
Будет от 0 (min) до 100 (max).... |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 11 Всего: 360 |
Надо значит ввести фактор и перерешивать координаты
канвас = scrollbar_value*factor scrollbar_value=канвас/factor faсtor меняется в зависимости от "настоящего" размера канваса и составляет настоящий_макс/100 Чтото вроде этого. Единственно что тебе надо - вычислять настоящий макс в зависимости от предидущего значения скрола. |
|||
|
||||
| Psychosis |
|
||||||||
|
Unregistered |
Нет, совсем не то!
Умножить TScrollBar.Position на какой-либо фактор я могу, только мне не это надо... Я пишу свой собственный ScrollBar, да и к тому же не от TComponent, у меня есть свой собственный класс TArea (от TObject), от него порожден TCustomRectArea, затем TRectArea. У TArea основные функциональные методы:
Отрисовка производиться на канву формы через буфферный битмап, события от мыши, так же, поступают от формы и передаются самой парентной TArea. У TArea есть список дочерних TArea.... and so on Так вот я хочу написать нормальный TScrollBar (TScrollBarArea), а не такой глючный как стандартный виндовский и с доп. возможностями. У стандартного есть например такой глюк, когда тянуть ползунок далеко вправо, за пределы ScrollBar'а, то ползунок перескакивает на позицию 0. Или если предварительно поместить ползунок на середину, а затем аналогично далеко потянуть его влево, то он перескочит на середину... Так вот, TScrollBar у меня называется TScrollBarAreaNew, но он нам не интересен, т.к. реализует только расположение кнопок для прокрутки и "TSliderBarArea", кот. нас и интересует.
TSliderBarArea - по сути, просто контейнер, кот. определяет в каких пределах может ездить "TSliderArea".
Вот с "TSliderArea" и есть основная "Ж"
|
||||||||
|
|||||||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |