Форум по 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,039
Версия 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,039
Версия 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,039
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

так то системная. она не всегда годится по смыслу.
Ответить с цитированием
  #7  
Старый 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.
Ответить с цитированием
  #8  
Старый 16.12.2008, 18:59
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,039
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

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

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

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

У Action'а есть свойство, где указывается клавиша. А в обработчике события OnExecute пишешь что надо делать. Т.е. на каждую клавише (или комбинацию) тебе нужен отдельный Action.
Ответить с цитированием
  #11  
Старый 17.12.2008, 16:41
smart_man smart_man вне форума
Прохожий
 
Регистрация: 08.12.2008
Сообщения: 40
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
У Action'а есть свойство, где указывается клавиша. А в обработчике события OnExecute пишешь что надо делать. Т.е. на каждую клавише (или комбинацию) тебе нужен отдельный Action.

Все, разобрался. Просто я сначала пытался в качестве значения свойства Shortcut вписать PageUp вместо PgUp, а такое значение нельзя ввести, ну я и подумал, что раз так не получается, значит можно использовать только клавиши/комбинации, которые уже находятся в списке Shortcut, но там то моей клавиши не было. Спасибо за ответы.
Ответить с цитированием
  #12  
Старый 21.01.2009, 12:57
smart_man smart_man вне форума
Прохожий
 
Регистрация: 08.12.2008
Сообщения: 40
Репутация: 10
По умолчанию

Обнаружил такую вещь:

Есть форма для которой создан TActionList обрабатывающий клавиши PgUp, PgDn, Home, End (по нажатию этих клавиш происходит разного рода скроллинг окна). По нажатию клавиши "7" (которая расположена приблизительно ниже клавишей F5/F6) выполняется обработчик PgUp, при этом для клавиши "7" не создан Action. В чем может быть проблема?
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter