![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте.
Есть форма некоторого заданного размера. В процессе ее вывода на экран на форме в runtime создаются визуальные объекты. Когда суммарная высота созданных объектов начинает превышать высоту формы, то появляется прокрутка окна. При этом после окончания отображения формы 1) ползунок прокрутки прокручен в самый низ (то есть фокус не в самом верху окна) и 2) нет реакции на колесо прокрутки мыши (можно только ухватывать ползунок при нажатой кнопки мыши и двигать его самой мышью). Вопрос: Как сделать так, чтобы 1) ползунок прокрутки был прокручен в самый верх и 2) появилась реакция на колесо прокрутки мыши. |
#2
|
|||
|
|||
![]() 1. Выбирай любой метод:
TForm.ScrollInView(); - скролирует до показа указанного контрола. TForm.ScrollBy(); - абсолютное скролирование. TForm.VertScrollBar - ссылка на полосу прокрутки. 2. Обрабатывай событие использования колеса мыши: OnMouseWeelUp - вверх. OnMouseWeelDown - вниз. Делать придется через TForm.VertScrollBar. |
#3
|
|||
|
|||
![]() Спасибо, lmikle. Все ответы помогли.
По теме возникло еще пару вопросов: 3) существует ли стандартная величина прокрутки, то есть стандартное значение VertScrollBar.Increment (по умолчания Delphi ставит 8) и 4) что нужно сделать, чтобы скроллинг был возможен по нажатию клавиш Home, End, PgUp, PgDown (по умолчанию на них нет реакции)? |
#4
|
|||
|
|||
![]() О каких-либо стандартах на величину прокрутки я не слышал. В принципе, имеет смысл подюирать в зависимоти от общей высоты.
Обрабока клавишь - руками, как и с обработчиком колеса. Бросаешь TActionList, добавляешь соответсвующие экшены и вперед... |
#5
|
||||
|
||||
![]() GetSystemMetric имеет много параметров, один из которых SM_CYVSCROLL.
...сказал, и загрустил от бесспорной своей правоты |
#6
|
|||
|
|||
![]() так то системная. она не всегда годится по смыслу.
|
#7
|
||||
|
||||
![]() Цитата:
...сказал, и загрустил от бесспорной своей правоты Последний раз редактировалось 0nni, 16.12.2008 в 18:49. |
#8
|
|||
|
|||
![]() Ну, в принципе, наверное, годится.
Просто то значение не всегда удобно. Зачастую приходится вычислять свое и его ставить - в зависимости от реальных размеров прокручиваемого объекта. |
#9
|
|||
|
|||
![]() Цитата:
TActionList разместил, Action1 добавил. После этого в коде Action1 надо обрабатывать Windows Messages (те сообщения, которые соответствуют нажатию клавиш PgUp, PgDn и т.д.)? Или что-то другое делать? |
#10
|
|||
|
|||
![]() У Action'а есть свойство, где указывается клавиша. А в обработчике события OnExecute пишешь что надо делать. Т.е. на каждую клавише (или комбинацию) тебе нужен отдельный Action.
|
#11
|
|||
|
|||
![]() Цитата:
Все, разобрался. Просто я сначала пытался в качестве значения свойства Shortcut вписать PageUp вместо PgUp, а такое значение нельзя ввести, ну я и подумал, что раз так не получается, значит можно использовать только клавиши/комбинации, которые уже находятся в списке Shortcut, но там то моей клавиши не было. Спасибо за ответы. |
#12
|
|||
|
|||
![]() Обнаружил такую вещь:
Есть форма для которой создан TActionList обрабатывающий клавиши PgUp, PgDn, Home, End (по нажатию этих клавиш происходит разного рода скроллинг окна). По нажатию клавиши "7" (которая расположена приблизительно ниже клавишей F5/F6) выполняется обработчик PgUp, при этом для клавиши "7" не создан Action. В чем может быть проблема? |