Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Прокрутка TDBGrid / 11 сообщений из 11, страница 1 из 1
28.04.2020, 17:45
    #39952453
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прокрутка TDBGrid
Когда TDBGrid прокручивается колесом мыши, то сначала курсор доходит до последней (первой) видимой записи, после этого начинают прокручиваться записи в гриде.

Вопрос: можно ли как-то сделать так, чтобы записи начинали прокручиваться чуть раньше, например когда до конца видимого списка осталось 3 строки?
...
Рейтинг: 0 / 0
28.04.2020, 18:19
    #39952469
northener
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прокрутка TDBGrid
Сделать свой собствееный DBGrid. Или поискать сторонние. Может где-то уже сделано.
...
Рейтинг: 0 / 0
28.04.2020, 18:37
    #39952483
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прокрутка TDBGrid
northener
Сделать свой собствееный DBGrid. Или поискать сторонние. Может где-то уже сделано.

Понятно что сделать собственный, просто возможно кто-то уже делал такое и знает где что можно подкрутить.
...
Рейтинг: 0 / 0
29.04.2020, 10:50
    #39952741
Belotsky Serge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прокрутка TDBGrid
alekcvp
northener
Сделать свой собствееный DBGrid. Или поискать сторонние. Может где-то уже сделано.

Понятно что сделать собственный, просто возможно кто-то уже делал такое и знает где что можно подкрутить.


Сделать наследника от TDBGrid и открыть Protected свойства TopRow и VisibleRowCount. В методе OnMouseWheelDown (OnMouseWheelUp) определять, находится ли текущая запись на последних нескольких видимых строках DBGrid. Если так, выполнить метод ScrollBy (ScrollData), а затем, на столько же записей выполнить TDataSet.Prior для датасета, привязанного к DBGrid.
Тут, главное, никак не использовать TDataSet.AfterScroll для определения, находится ли текущая запись в последних видимых, точнее определять то можно, только вот нельзя воспользоваться TDataSet.Prior.
...
Рейтинг: 0 / 0
29.04.2020, 11:36
    #39952763
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прокрутка TDBGrid
Belotsky Serge
alekcvp
пропущено...

Понятно что сделать собственный, просто возможно кто-то уже делал такое и знает где что можно подкрутить.


Сделать наследника от TDBGrid и открыть Protected свойства TopRow и VisibleRowCount. В методе OnMouseWheelDown (OnMouseWheelUp) определять, находится ли текущая запись на последних нескольких видимых строках DBGrid. Если так, выполнить метод ScrollBy (ScrollData), а затем, на столько же записей выполнить TDataSet.Prior для датасета, привязанного к DBGrid.
Тут, главное, никак не использовать TDataSet.AfterScroll для определения, находится ли текущая запись в последних видимых, точнее определять то можно, только вот нельзя воспользоваться TDataSet.Prior.

Как всё просто... А кто наследника датасета будет пилить, который умеет отдавать не текущую строку, а любую?
...
Рейтинг: 0 / 0
29.04.2020, 12:00
    #39952779
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прокрутка TDBGrid
wadman
. А кто наследника датасета будет пилить, который умеет отдавать не текущую строку, а любую?
Зачем? Сам грид должен бегать по датасету. Он и сейчас бегает. Тебя же не удивляет, что в гриде отображаются несколько записей, а активная только одна
...
Рейтинг: 0 / 0
29.04.2020, 12:11
    #39952782
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прокрутка TDBGrid
_Vasilisk_
wadman
. А кто наследника датасета будет пилить, который умеет отдавать не текущую строку, а любую?
Зачем? Сам грид должен бегать по датасету. Он и сейчас бегает. Тебя же не удивляет, что в гриде отображаются несколько записей, а активная только одна

Чтобы добавить в механизм буферизации опережение.
...
Рейтинг: 0 / 0
29.04.2020, 12:15
    #39952787
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прокрутка TDBGrid
alekcvp
Когда TDBGrid прокручивается колесом мыши, то сначала курсор доходит до последней (первой) видимой записи, после этого начинают прокручиваться записи в гриде.

Вопрос: можно ли как-то сделать так, чтобы записи начинали прокручиваться чуть раньше, например когда до конца видимого списка осталось 3 строки?


Все же со стандартным поведение лучше не играться
Что-то типа с этим поиграться
Код: pascal
1.
2.
3.
with TGridCracker(Grid) do begin
...
 if VisibleRowCount - Row <=3 then Scroll(#нужное значение#)


...
Рейтинг: 0 / 0
29.04.2020, 18:59
    #39953011
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прокрутка TDBGrid
wadman
Чтобы добавить в механизм буферизации опережение.
Она и так есть. Просто по умолчанию вытаскивается столько записей, сколько помещается в окно грида
...
Рейтинг: 0 / 0
29.04.2020, 19:52
    #39953053
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прокрутка TDBGrid
_Vasilisk_
wadman
Чтобы добавить в механизм буферизации опережение.
Она и так есть. Просто по умолчанию вытаскивается столько записей, сколько помещается в окно грида

Понятно. Про опережение не вычитал. С датасетом - аналогично.
...
Рейтинг: 0 / 0
30.04.2020, 04:12
    #39953146
northener
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прокрутка TDBGrid
Вот странно что до сих пор никто не спросил ТС нафига! Нафига ему нужно именно такое поведение DBGrid'a при скролле мышкой? Чем его не устраивает то что есть сейчас?
Вот лично меня всё устраивает при скролле мышкой DBGrid'a начиная с BDS, когда наконец-таки DBGrid начал правильно реагировать на такой скролл.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Прокрутка TDBGrid / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]