Как определить, что мышь не двигается, а кнопка все еще нажата?
В Delphi я добавил компонент полосы прокрутки (ориентированный по вертикали) с правой стороны формы.
Я добавил событие Scrollbar OnChange, чтобы я мог изменить вид формы и положение большого пальца полосы прокрутки, когда пользователь нажимает кнопку "Стрелка вверх" или "Стрелка вниз" с помощью мыши, и это прекрасно работает.
Но событие OnChange, похоже, срабатывает только тогда, когда кнопка мыши изначально нажата на стрелке.
Я заметил, что все элементы управления полосой прокрутки повторяют команду и продолжают прокрутку, пока мышь остается нажатой на стрелке, и я хотел бы реализовать это поведение.
Итак, как я могу легко определить, что пользователь не двигал мышь и продолжает нажимать кнопку мыши, пока мышь остается над стрелкой?
Заключение. Каким-то образом что-то в полосе прокрутки в моем проекте испортилось. После того, как я удалил ScrollBar и добавил его снова, проблема исчезла.
Это одна из тех хитрых задач, на решение которых у меня ушло много времени. Спасибо за вашу помощь. Я закрываю этот вопрос.
3 ответа
Используйте событие OnScroll.
Следующий код добавляет "xxx" в заметку, пока на кнопке со стрелкой прокрутки удерживается мышь. Протестировано с Delphi 6.
procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
begin
Memo1.Lines.Add( 'xxx' );
end;
Обычный способ обработки автоповтора состоит в том, чтобы включить TTimer и проверить в обработчике события OnTimer(), нужно ли снова выполнять действие, и отключить таймер, если нет. Если вам нужен пример кода, я помню, что элемент управления SynEdit использовал аналогичную технику для автоматической прокрутки в операциях перетаскивания.
Если компонент не инкапсулирует поведение, которое вы ищете, и вы не можете легко смоделировать поведение с помощью доступных методов, вам действительно следует создать подкласс ближайшего компонента, который выполняет большую часть того, что вам нужно, и добавить поведения, которые отсутствуют.
Я знаю, что требуется дополнительная работа, но это действительно лучший путь. Теперь, с Delphi, я, кажется, вспоминаю, что подклассовые компоненты нуждались в небольшой дополнительной работе, чтобы их можно было использовать из IDE для проектирования форм, возможно, это изменилось с версии 7.