Прокрутка таблицы: хитрость PeekMessage()
Прокрутка таблицы: хитрость PeekMessage()
На днях я решил поиграть с API-функцией PeekMessage(). Функция работает, но ловить ее нужно следующим образом.
Я прокручиваю таблицу, связанную с набором данных. "Поиск" в наборе данных замедляет процесс скролирования (условимся называть "поиском" синхронное перемещение табличного курсора в процессе скроллирования, при котором текущей записью становится запись, ближайшая к нажимаемой кнопке полосы прокрутки). Возникла задача: необходимо отменить "поиск" (процесс слежения) и переместить указатель на необходимую запись только в случае остановки пользователем процесса скроллирования, другими словами – пока пользователь осуществляет скроллирование, "поиск" необходимо отменить. Итак, ко мне в голову пришла мысль, что с помощью PeekMessage() можно выловить определенное сообщение и тем самым отменить поиск во время прокрутки. Звучит просто, но на самом деле все оказалось наоборот.
Я установил фильтр поиска сообщений на WM_MOUSEFIRST/LAST. Ситуация: пользователь непрерывно прокручивает DBGrid вниз, т.е. держит нажатой нижнюю кнопку скроллирования. В результате PeekMessage() возвращает False – нас это не устраивает, это не то, что мы хотим. Положительный результат можно получить только в случае сверхскоростных манипуляций мышью.
Если в фильтре использовать 0 и 0, чтобы поймать любое сообщение, результат всегда будет True. Причина, очевидно в том, что любой щелчок мыши в области DBGrid никак не обойдется без последствий, генерация системой сообщения PAINT яркий тому пример, поэтому PeekMessage может возвратить True в любое время, что тоже не может нам помочь.
Было бы хорошо, если бы дескриптор DBGrid получал событие OnMouseUp() во время его скроллирования. Обидно, но OnMouseUp() работает только с DBGrid, а не с полосами прокрутки. OnMouseUp() с TForm при KeyPreview:=true не работает, я проверял.
После пришла идея опросить состояние кнопок мыши с помощью функции GetKeyState(). Пока кнопка нажата (DOWN), "поиск" запрещен, и наоборот. UP (кнопка отжата) свидетельствует об окончании процесса скроллирования. Данный способ работы с окном во время манипуляций с его полосой прокрутки заработал без проблем. Теперь все в порядке: поиска во время прокрутки не происходит и табличный курсор также никуда не перемещается.
Рассмотренная тема имеет отношение к полосам прокрутки, а события OnKeyUp() и OnMouseUp() могут применяться где-нибудь еще.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Прокрутка
Прокрутка 1. Зажимаем клавишу Ctrl.2. Прокручиваем колёсико мыши.3. Масштаб меняется, например, вот так. 4. Или так: 6. Хотя, это можно сделать и по-другому. Выделить текст и изменить % на верхней панели управления. Двойной и тройной клик1. Вы уже умеете выделять слово. Нужно
Так в чем тут хитрость?
Так в чем тут хитрость? Никакой хитрости нет, QNX/Neutrino делает все для вас автоматически. В QNX/Neutrino этот механизм реализован только на один уровень вглубь, так что если клиент посылает серверу сообщение, а этот сервер, в свою очередь, передает это сообщение другому серверу, то
Таблицы
Таблицы Если (а на самом деле – когда, это всего лишь вопрос времени) вам необходимо вставить в документ ту или иную таблицу, выберите пункт меню «Таблица – Вставить таблицу». После выбора команды в появившемся окне введите количество строк и колонок. Для тех, кто, как и я,
Таблицы
Таблицы При построении сайтов таблицы используются очень часто, причем применяются они, как правило, не для создания таблиц как таковых, а для удобного и красивого размещения содержимого веб-страниц.Для организации таблицы существует тег <TABLE>. Кроме того, необходимы
1.8. Таблицы
1.8. Таблицы Таблицы помещаются в тексте в порядке ссылки на них по окончании того абзаца, в котором таблица была впервые упомянута. Они нумеруются арабскими цифрами внутри каждого раздела. В правом верхнем углу таблицы над заглавием записывают слово «Таблица » и
PeekMessage
PeekMessage Описание: function PeekMessage(var Msg: TMsg; Wnd: HWnd; MsgFilterMin, MsgFilterMax:Word): Bool;Пpовеpяет очеpедь пpикладной задачи на сообщение и копиpует его в Msg. Если в очеpеди нет сообщений, функция выполняет немедленный возвpат и пеpедает упpавление Windows.Паpаметpы:Msg: Пpинимающая стpуктуpа TMsg.Wnd: Окно
Таблицы
Таблицы Трудно представить себе деловой документ без таблиц. Именно в таблицах сухая информация приобретает наглядный характер. Рисовать их в Word несложно. Сделать это поможет кнопка Таблица группы Таблицы вкладки Вставка ленты. В видеоролике «Урок 12.3. Таблицы»
Таблицы
Таблицы Команда TABLE осуществляет создание пустой таблицы объектов в чертеже. Вызывается команда из падающего меню Draw ? Table… или щелчком на пиктограмме Table… на панели инструментов Draw. В результате открывается диалоговое окно вставки таблицы Insert Table – рис. 10.7. Рис. 10.7.
Таблицы
Таблицы Инструменты работы с таблицами в Word-2003 значительно усовершенствованы по сравнению с предыдущими версиями этой программы. Теперь создать таблицу в тексте Word можно буквально двумя движениями мышки.Самый простой способ – нарисовать таблицу. Войдите в меню Таблица
Хитрость OnCalcFields
Хитрость OnCalcFields Событие OncalcFields генерится ОЧЕНЬ часто и может быть необязательным и занимать большое количество времени, например, у вас есть таблица с неким вычисляемым полем, и при каждом редактировании таблицы вызывается следующий код:MyCalcField.AsInteger:= Table1Field1.AsInteger +
1.8. Таблицы
1.8. Таблицы Таблицы помещаются в тексте в порядке ссылки на них по окончании того абзаца, в котором таблица была первый раз упомянута. Они нумеруются внутри каждого раздела в порядке упоминания арабскими цифрами. В правом верхнем углу таблицы над заглавием записывают
2.6. Таблицы
2.6. Таблицы 2.6.1. Цифровой материал для достижения лучшей наглядности и сравнимости показателей, как правило, следует оформлять в виде таблицы.2.6.2. Оформление таблиц должно производиться в соответствии с требованиями ГОСТ 1.5-85.Таблица может иметь заголовок, который следует
"Интеллектуальная" прокрутка
"Интеллектуальная" прокрутка В ситуации, когда разделы с исходными, результирующими или контрольными данными имеют большую высоту (например, при отображении в полном объеме содержимого текстовых файлов), с помощью стандартной прокрутки сложно обеспечить быстрый
5.1.13. Таблицы
5.1.13. Таблицы Приложение Pages предлагает богатый инструментарий для работы со встроенными в документ таблицами: форматирование элементов таблицы, сортировка данных ячеек, автоматический подсчет значений с помощью формул, построение диаграмм и пр.Вставка таблицы в