| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > Custom ScrollBar своими руками |
| Автор: Psychosis 11.8.2005, 23:26 |
| Уже 6 дней мучаюсь, никак не могу написать... Этот scrollbar должен быть расширяемым. Имеется ввиду, что верний предел (Max), на самом деле не является пределом. Просто, при перемещении ползунка до этого Max, и далее, это значении Max будет увеличиваться пропорционально тому, насколько мы этот ползунок удвинули дальше. При последующем обратном движении, Max будет уменьшаться, но не опустится менее первоначального Max. Т.е. здесь есть как бы два предела первоначальный (OriginalMax) и текущий (CurrentMax). Смысл этого. Представте, что у вас прокручиваемой областью является какая-либо диаграмма, на которой находяться разные прямоугольнички. Множество этих прямоугольничков можно "вписать" в большой ограничивающий прямоугольник (BoundsRect). Высота и ширина этого прямоугольника и будет задавать пределы изменения двух scrollbar'ов. Только вое если, пользователю захочется прокрутить на чистое место, что бы положить туда новый прямоугольничек, он с обычным scrollbar'ом этого не сделает. Ответ желательно в форме обработчиков для трех событий: - MouseDown - MouseMove - MouseUp Язык C++ или ObjectPascal.... |
| Автор: sergejzr 11.8.2005, 23:30 | ||
?? Почему бы не ловить событие onchange. Там запоминать значение и сравнивать его с новым. Затем менять соответсвенно MaxValue и двигать бегунок на новое значение setValue() |
| Автор: Guest 11.8.2005, 23:45 | ||
Position у стандартного Scrollbar'а не может выходить за [min; max] никогда!
Будет от 0 (min) до 100 (max).... |
| Автор: sergejzr 12.8.2005, 01:33 |
| Надо значит ввести фактор и перерешивать координаты канвас = scrollbar_value*factor scrollbar_value=канвас/factor faсtor меняется в зависимости от "настоящего" размера канваса и составляет настоящий_макс/100 Чтото вроде этого. Единственно что тебе надо - вычислять настоящий макс в зависимости от предидущего значения скрола. |
| Автор: Psychosis 12.8.2005, 03:25 | ||||||||
| Нет, совсем не то! Умножить 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" и есть основная "Ж"
|