![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Psychosis |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 12.8.2005 Репутация: нет Всего: нет |
Уже 6 дней мучаюсь, никак не могу написать...
Этот scrollbar должен быть расширяемым. Имеется ввиду, что верний предел (Max), на самом деле не является пределом. Просто, при перемещении ползунка до этого Max, и далее, это значении Max будет увеличиваться пропорционально тому, насколько мы этот ползунок удвинули дальше. При последующем обратном движении, Max будет уменьшаться, но не опустится менее первоначального Max. Т.е. здесь есть как бы два предела первоначальный (OriginalMax) и текущий (CurrentMax). Смысл этого. Представте, что у вас прокручиваемой областью является какая-либо диаграмма, на которой находяться разные прямоугольнички. Множество этих прямоугольничков можно "вписать" в большой ограничивающий прямоугольник (BoundsRect). Высота и ширина этого прямоугольника и будет задавать пределы изменения двух scrollbar'ов. Только вое если, пользователю захочется прокрутить на чистое место, что бы положить туда новый прямоугольничек, он с обычным scrollbar'ом этого не сделает. Ответ желательно в форме обработчиков для трех событий: - MouseDown - MouseMove - MouseUp ================================================= Я пишу свой собственный ScrollBar, но не от TComponent, у меня есть свой собственный класс TArea (от TObject), от него порожден TCustomRectArea, затем TRectArea. У TArea основные функциональные методы:
Отрисовка производиться на канву формы через буфферный битмап, события от мыши, так же, поступают от формы и передаются самой парентной TArea. У TArea есть список дочерних TArea.... and so on Так вот я хочу написать нормальный TScrollBar (TScrollBarArea), а не такой глючный как стандартный виндовский и с доп. возможностями. У стандартного есть например такой глюк, когда тянуть ползунок далеко вправо, за пределы ScrollBar'а, то ползунок перескакивает на позицию 0. Или если предварительно поместить ползунок на середину, а затем аналогично далеко потянуть его влево, то он перескочит на середину... Так вот, TScrollBar у меня называется TScrollBarAreaNew, но он нам не интересен, т.к. реализует только расположение кнопок для прокрутки и "TSliderBarArea", кот. нас и интересует.
TSliderBarArea - по сути, просто контейнер, кот. определяет в каких пределах может ездить "TSliderArea".
Вот с "TSliderArea" и есть основная "Ж"
================================================ Чего хочу (объясняю на примерах): 1) Тащу ползунок вправо. Он уперся в край (в смысле дошел до максимума). А я все равно тащу, и хочу, что бы он продалжал скролить. И хочу, что бы он делал это посредством увеличения верхнего предела (максимума). Т.е. дошел ползунок до максимума, видит, что я дальше двигаю, увеличивает свой максимум. ПРОБЛЕМА: при реализации вышеизложенного напрямую, после достижения максимума (и начала его увеличения), скролить начинает не _линейно_, а _нелинейно_. 2) Тащу обратно, максимум начинаяет уменьшаться, и так до первоначального значения максимума.
================================================ Если есть у кого !!!сорцы!!! классных ScrollBar'ов с разными фишками (как в AudioMulch [если кто знаком с такой прогой] )(например: изменение размеров ползунка мышкой - для масштабирования отображаемой области) кинте на мэйл плиз, или дайте ссылки... Плиз... А то повешусь... Уже сигарета за сигаретой... Это сообщение отредактировал(а) Girder - 12.8.2005, 14:42 |
||||||||||
|
|||||||||||
Y-Vladimir |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 16.7.2004 Где: Казань Репутация: нет Всего: 6 |
А почему в раздел Алгоритмы?
Сразу несколько вопросов:
А что мешает сделать линейно?
Подробнее обьясни, как при этом должен вести себя ползунок, т.е. либо ползунок не смещается, до тех пор, пока не достигнем первоначального максимума, либо еще как. |
||||
|
|||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: нет Всего: 62 |
Модератор: тема перенесена из раздела "Алгоритмы"
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |