Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.12.2008, 14:55
smart_man smart_man вне форума
Прохожий
 
Регистрация: 08.12.2008
Сообщения: 40
Репутация: 10
По умолчанию Скроллинг окна формы

Здравствуйте.

Есть форма некоторого заданного размера. В процессе ее вывода на экран на форме в runtime создаются визуальные объекты. Когда суммарная высота созданных объектов начинает превышать высоту формы, то появляется прокрутка окна. При этом после окончания отображения формы 1) ползунок прокрутки прокручен в самый низ (то есть фокус не в самом верху окна) и 2) нет реакции на колесо прокрутки мыши (можно только ухватывать ползунок при нажатой кнопки мыши и двигать его самой мышью).

Вопрос: Как сделать так, чтобы 1) ползунок прокрутки был прокручен в самый верх и 2) появилась реакция на колесо прокрутки мыши.
Ответить с цитированием
  #2  
Старый 15.12.2008, 15:01
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Выбирай любой метод:
TForm.ScrollInView(); - скролирует до показа указанного контрола.
TForm.ScrollBy(); - абсолютное скролирование.
TForm.VertScrollBar - ссылка на полосу прокрутки.

2. Обрабатывай событие использования колеса мыши:
OnMouseWeelUp - вверх.
OnMouseWeelDown - вниз.
Делать придется через TForm.VertScrollBar.
Ответить с цитированием
  #3  
Старый 16.12.2008, 15:24
smart_man smart_man вне форума
Прохожий
 
Регистрация: 08.12.2008
Сообщения: 40
Репутация: 10
По умолчанию

Спасибо, lmikle. Все ответы помогли.

По теме возникло еще пару вопросов:
3) существует ли стандартная величина прокрутки, то есть стандартное значение VertScrollBar.Increment (по умолчания Delphi ставит 8) и
4) что нужно сделать, чтобы скроллинг был возможен по нажатию клавиш Home, End, PgUp, PgDown (по умолчанию на них нет реакции)?
Ответить с цитированием
  #4  
Старый 16.12.2008, 16:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

О каких-либо стандартах на величину прокрутки я не слышал. В принципе, имеет смысл подюирать в зависимоти от общей высоты.
Обрабока клавишь - руками, как и с обработчиком колеса. Бросаешь TActionList, добавляешь соответсвующие экшены и вперед...
Ответить с цитированием
  #5  
Старый 16.12.2008, 18:32
Аватар для 0nni
0nni 0nni вне форума
Начинающий
 
Регистрация: 13.12.2008
Адрес: Туапсе
Сообщения: 161
Репутация: 20
По умолчанию

GetSystemMetric имеет много параметров, один из которых SM_CYVSCROLL.
__________________
...сказал, и загрустил от бесспорной своей правоты
Ответить с цитированием
  #6  
Старый 16.12.2008, 18:36
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

так то системная. она не всегда годится по смыслу.
Ответить с цитированием
  #7  
Старый 17.12.2008, 15:02
smart_man smart_man вне форума
Прохожий
 
Регистрация: 08.12.2008
Сообщения: 40
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Обрабока клавишь - руками, как и с обработчиком колеса. Бросаешь TActionList, добавляешь соответсвующие экшены и вперед...

TActionList разместил, Action1 добавил. После этого в коде Action1 надо обрабатывать Windows Messages (те сообщения, которые соответствуют нажатию клавиш PgUp, PgDn и т.д.)? Или что-то другое делать?
Ответить с цитированием
  #8  
Старый 17.12.2008, 16:13
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

У Action'а есть свойство, где указывается клавиша. А в обработчике события OnExecute пишешь что надо делать. Т.е. на каждую клавише (или комбинацию) тебе нужен отдельный Action.
Ответить с цитированием
  #9  
Старый 16.12.2008, 18:47
Аватар для 0nni
0nni 0nni вне форума
Начинающий
 
Регистрация: 13.12.2008
Адрес: Туапсе
Сообщения: 161
Репутация: 20
По умолчанию

Цитата:
Сообщение от smart_man
3) существует ли стандартная величина прокрутки, то есть стандартное значение VertScrollBar.Increment (по умолчания Delphi ставит 8)
Разве не годится?
__________________
...сказал, и загрустил от бесспорной своей правоты

Последний раз редактировалось 0nni, 16.12.2008 в 18:49.
Ответить с цитированием
  #10  
Старый 16.12.2008, 18:59
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, в принципе, наверное, годится.
Просто то значение не всегда удобно. Зачастую приходится вычислять свое и его ставить - в зависимости от реальных размеров прокручиваемого объекта.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter