FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9210
Вход
Scroller (1.2)

Класс для скроллинга контейнера на форме. Можно использовать в дизайнере. Поддерживает многослойность, скроллинг колесом мыши, автоскроллирование на активный элемент.


 
Прислал: Prototype   Категория: Интерфейс


Scroller 1.2- класс для скроллинга контейнера на форме.

Можно использовать в дизайнере.
Поддерживает многослойность (несколько контейнеров для скроллинга), скроллинг колесом мыши, автоскроллирование на активный элемент.

Внимание!
Используется ActiveX: Microsoft Flat Scrollbar Control 6.0 (SP4)
Находится в файле mscomct2.ocx
 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.231) Вложение [62.18]kb
Дополнения пользователей
Scroller (1.2)
[+][?]
rubens
23.08.06 11:48:18

Хорошо. А есть ли scrollbar, который поддерживал темы XP?
Среди стандартных поставок XP я не видел.
А еще лучше класс фокса с поддержкой тем XP! Может где-то пробегало?
Nikolai Kremko
31.08.06 18:45:38

пробегало...
http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,df3cb71d-588f-4bc6-b63e-9c94017edd7f.aspx
Prototype
31.08.06 19:12:12

Указанный класс я тоже скачивал, хотел использовать в своих задачах. У него один хороший плюс, он
без ActiveX :), и хороший минус - пока еще сырой, есть определенные глюки с интерфейсом :(
В итоге так и пришлось свое написать. Время было ограниченно, поэтому и использовал ActivX.
rubens
04.09.06 19:05:45

Ясно. Указанный по ссылке скролируемый контейнер посмотрел. Жаль, что он работает только с 8-го.
Идея понятная. Но увы.
Интересно бы иметь пусть ActivX, но такой чтобы скроллинг его работал в runtime и поддерживал бы 6
и 7 VFP.
rubens
26.10.06 10:53:08

Привет!
Какую высоту скроллинга поддерживает этот объект?
Prototype
27.10.06 00:18:49

Честно сказать, не проверял :)
А что, проблемы возникли?
rubens
30.10.06 18:53:37

Нет, проблемы с твоим скроллером не возникли. 
Иногда приходится делать окно со скроллингом. Но у него ограничение скроллинга, если не ошибаюсь,
равно удвоенному разрешению экрана (в зависимости от того какой скроллинг- вертикальному или
горизонтальному соответственно).
В 7 был глюк при использовании ViewPort. В 8 исправили. Но все равно неприятно, что от текущего
разрешения экрана могут обрезаться объекты при скроллинге окна.

Prototype
30.10.06 22:10:17

Понятно. Я с таким пока не сталкивался, поэтому не в курсе :)
Zakharov_slava
11.07.07 15:33:03

Вопрос, чего то не совсем разобрался каким образом я могу "пересмотреть" положение Scroll'ов. Есть
метод RefreshScrollBars, который, если до этого ScrollBar были невидны прекрасно их отрисовывает и
ставит их в соответствие с содержимым контейнера. Но если ScrollBar до этого уже был в Scroller1
то он не пересматривает свое положение в зависимости от размера содержимого. Например в начале у
меня содержимое было в 0,5 от размера контейнера. Я вызвал RefreshScrollBars и естественно никакие
ScrollBar не появились. Я меняю содержимое Scroller на "в два раза большее" чем размер Scroller.
Вызвал RefreshScrollBars естественно ScrollBar появляются и я могу рассмотреть его полностью. Если
теперь(при имеющихся ScrollBar) я увеличу размер содержимого еще на 50%, то scrollBar остается как
для предыдущего размера содержимого контейнера. То есть я могу увидеть только 2/3 от его размера.
Остальное находится "ниже". Где можно пофиксить?
Prototype
26.07.07 00:28:00

Действительно, есть такой глюк :)
Пофиксил и обновил до версии 1.1
Zakharov_slava
01.08.07 22:39:05

Огромное спасибо за быстрое реагирование.
Очень мне помогло.:)
Еще вопрос, можно ли в скроллере как нить обрабатывать внутренне MouseWheel, то Есть скролл
колесиком. Чтобы ничего не трогая во внутреннем контейнере, а руля только свойствами
WheelType
0-Disabled
1-Horizontal
2-Vertical
и 
WheelSpeed
Можно что нить снаружи приделать, но очень не хочется...:)
Prototype
01.08.07 22:49:43

Думаю можно, но потребует времени :)
Как нибудь проверю. 
Спасибо за идею :)
Zakharov_slava
01.08.07 23:27:51

Для вертикальной я "на пока" у себя ставил примерно такой код в MouseWheel контейнера oContainer:
LPARAMETERS nDirection, nShift, nXCoord, nYCoord
IF this.getposy() - nDirection >0
	lnDir = this.getposy() - nDirection 
	this.setposy(lnDir )		
ELSE 
	this.gotobegin()
ENDIF  
this.Parent.refreshscrollbars()

Для внутренних контейнеров и контролов везде в базовых классах расставил в MouseWheel
LPARAMETERS nDirection, nShift, nXCoord, nYCoord
this.Parent.MouseWheel(nDirection, nShift, nXCoord, nYCoord)
на пока мне вроде достаточно.
Но мож пригодится... :[
Prototype
03.08.07 01:28:40

Пригодилось :)
Реализовал прокрутку колесом. Можешь удалять у себя код в oContainer.MouseWheel()
Остальное оставь.
Shift+Колесо = Горизонтальное перемещение :)
Или можно настроить свойством nMouseWheel.
Еще раз, спасибо за помощь :)
Zakharov_slava
08.08.07 14:23:44

Мне понравилось. :)
Вам спасибо за отличное решение...
Единственно хотел бы порекомендовать сжимать VCX перед постингом. Это поможет сэкономить немного
места и как то аккуратней что ли... :)
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика