2009-03-28 3 views
1

В Delphi я добавил компонент прокрутки (ориентированный по вертикали) в правую часть формы.Как обнаружить, что мышь не движется и кнопка все еще нажата?

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

Но событие OnChange, похоже, срабатывает только при нажатии кнопки мыши на стрелке.

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

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


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

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

ответ

4

Использование OnScroll Событие.

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

procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; 
    var ScrollPos: Integer); 
begin 
    Memo1.Lines.Add('xxx'); 
end; 
+0

№ OnScroll делает то же самое как OnChange, чтобы обнаружить начальный клик. Но ни один из них не сигнализирует о продолжении этого события. Они обрабатывают только начальную кнопку один раз. Мне нужно увидеть, остается ли мышь нажатой, чтобы я мог продолжить прокрутку. – lkessler

+0

Он работает на моей установке Delphi 6 - я только что протестировал ее. – 2009-03-28 16:37:56

+0

Спасибо, что проверил это, Нейл. Ваш тест также работает в Delphi 2009. Я думаю, что это привело меня к причине проблемы. Компонент (TElScrollBar), который я использую, не работает, как TScrollBar, поэтому это проблема с этим компонентом. Об этом я свяжусь с LMD. – lkessler

3

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

0

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

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

+0

Никакой дополнительной работы не требуется и никогда не было (я использовал Delphi с версии 1.0) – 2009-03-28 16:48:47

 Смежные вопросы

  • Нет связанных вопросов^_^