![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() живу в линупсе, просто надо отловить нажатие кнопки мыши по таймеру.
Код:
procedure TForm1.Timer1Timer(Sender: TObject); var Button: TMouseButton; begin if Button=mbright then ..; if Button=mbleft then ..; end; ругается на Button который does not seem to be initialized (кажется, не инициализирован) но оба if отрабатывают каждый раз при проходе по таймеру. в примерах по интернету всё происходит в событиях нажатия на кнопку, при этом если кнопку не отжимать - процедура какбы залипает? как замутить повтор прохода по процедуре я совсем не понял. |
#2
|
||||
|
||||
![]() У формы есть событие MouseDown, вызывается при нажатии на кнопку мыши. Обрабатывай его, таймер не нужен.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
||||
|
||||
![]() Непонятно, зачем нужно следить за мышыной давильней вне родных обработчиков, да и не знаю как там из линукса, а вот под виндами такое лучше с помощью ловушки делать, ну или если таймером, то тогда вот так
Код:
procedure TForm1.Timer1Timer(Sender: TObject); begin if GetAsyncKeyState(VK_LBUTTON) <> 0 then ..; if GetAsyncKeyState(VK_RBUTTON) <> 0 then ..; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#4
|
|||
|
|||
![]() в виндах куча вариантов, тут линупс.
в обработчике *MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); сделал цикл: Код:
while Button in [mbleft,mbright] do begin if Button=mbright then ButtonXY:=1; if Button=mbleft then ButtonXY:=2; Timer4.Enabled:=true; Application.ProcessMessages; end; ButtonXY:=0; Timer4.Enabled:=false; пока не нажму клавишу всё норма, как только нажал - цикл залипает и из цикла не выходит, пока не нажму другую клавишу. таймер при этом работает нормально. трабл в условия цикла, непойму почему Button in [mbleft,mbright] не снимается при отжатии кнопки. просто при нажатии кнопки по процедуре MouseDown происходит один проход. Последний раз редактировалось Тимофей Петрович, 30.10.2015 в 10:13. |
#5
|
|||
|
|||
![]() цикл отстой
MouseDown стартует таймер и устанавливает параметры MouseUp останавливает таймер таймер просто работает Последний раз редактировалось Тимофей Петрович, 30.10.2015 в 10:45. |
#6
|
||||
|
||||
![]() Не нужен таймер и цикл, событие будет вызываться каждый раз при нажатии кнопки мыши.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#7
|
|||
|
|||
![]() ага, один раз нажал и ждешь следующего раза?
|
#8
|
||||
|
||||
![]() Цитата:
Код:
... var btn: TMouseButton; procedure TForm1.Timer1Timer(Sender: TObject); begin case btn of mbright: ButtonXY:=1; mbleft: ButtonXY:=2; end; Application.ProcessMessages; ButtonXY:=0; end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin btn:= Button; Timer1.Enabled:= true; end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Timer1.Enabled:= false; end; ... Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 08.11.2015 в 18:32. |