Как определить, что Мышь неподвижна, а кнопка все еще нажата? - PullRequest
1 голос
/ 28 марта 2009

В Delphi я добавил компонент полосы прокрутки (с вертикальной ориентацией) с правой стороны формы.

Я добавил событие Scrollbar OnChange, чтобы я мог изменить вид формы и положение большого пальца полосы прокрутки, когда пользователь нажимает кнопку «Стрелка вверх» или «Стрелка вниз» с помощью мыши, и это прекрасно работает.

Но событие OnChange запускается только тогда, когда кнопка мыши изначально нажата на стрелке.

Я заметил, что все элементы управления полосой прокрутки повторяют команду и продолжают прокрутку, пока мышь остается нажатой на стрелке, и я хотел бы реализовать это поведение.

Так как же я могу легко определить, что пользователь не двигал мышь и продолжает нажимать кнопку мыши, пока мышь остается над стрелкой?


Заключение. Каким-то образом что-то в полосе прокрутки в моем проекте испортилось. После того, как я удалил ScrollBar и добавил его снова, проблема исчезла.

Это одна из тех хитрых задач, на решение которых у меня ушло много времени. Спасибо за вашу помощь. Я закрываю этот вопрос.

Ответы [ 3 ]

4 голосов
/ 28 марта 2009

Используйте событие OnScroll .

Следующий код добавляет «xxx» в заметку, пока на кнопке со стрелкой прокрутки удерживается мышь. Протестировано с Delphi 6.

procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
    Memo1.Lines.Add( 'xxx' );
end;
3 голосов
/ 28 марта 2009

Обычный способ обработки автоповтора состоит в том, чтобы включить TTimer и проверить в обработчике события OnTimer () , нужно ли снова выполнять действие, и отключить таймер если нет. Если вам нужен пример кода, я помню, что элемент управления SynEdit использовал аналогичную технику для автопрокрутки в операциях перетаскивания.

0 голосов
/ 28 марта 2009

Если компонент не инкапсулирует поведение, которое вы ищете, и вы не можете легко смоделировать поведение с помощью доступных методов, вам действительно следует создать подкласс ближайшего компонента, который выполняет большую часть того, что вам нужно, и добавить поведения, которые отсутствуют.

Я знаю, что требуется дополнительная работа, но это действительно лучший путь. Теперь, с Delphi, я, кажется, вспоминаю, что подклассовые компоненты также нуждались в дополнительной работе, чтобы их можно было использовать из IDE для проектирования форм, возможно, это изменилось с версии 7.

...