Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.10.2015, 10:05
vers0 vers0 вне форума
Прохожий
 
Регистрация: 21.12.2013
Адрес: Донецк
Сообщения: 26
Версия Delphi: Delphi 7
Репутация: 10
Вопрос Прекращение работы программы

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

Суть проблемы такова: если, к примеру, ставить/снимать "галку" в CheckBox'e по нажатию/отжатию, то все нормально и быстро, но если прописать по нажатию кнопки что-то более длинноиграющее, то пока полностью не отработает функция - не прекращается.
Выносить в отдельный поток не вариант, т.к. пользователь может нажимать кнопку мыши раз в минуту, а может и по 100 раз в секунду (ну, если пальцы не отвалятся )

Как прервать на произвольном месте и при повторном нажатии запустить заново?

Код:
procedure TForm1.WndProc(var Msg: TMessage);
if (Msg.Msg = MWM_LBUTTONDOWN) then
begin
        GetCursorPos(p);
        SetCursorPos(p.X-5, p.Y+5);
        Sleep(85);
        Application.ProcessMessages;
        GetCursorPos(p);
        SetCursorPos(p.X-5, p.Y+5);
        Sleep(85);
        Application.ProcessMessages;
        GetCursorPos(p);
        SetCursorPos(p.X+5, p.Y+5);
        Sleep(85);
        Application.ProcessMessages;
        GetCursorPos(p);
        SetCursorPos(p.X-5, p.Y+5);
        Sleep(85);
        Application.ProcessMessages;
        GetCursorPos(p);
        SetCursorPos(p.X+5, p.Y+5);
        Sleep(85);
        Application.ProcessMessages;
        GetCursorPos(p);
        SetCursorPos(p.X-5, p.Y+5);
        Sleep(85);
        Application.ProcessMessages;
        GetCursorPos(p);
        SetCursorPos(p.X+5, p.Y+5);
        Sleep(85);
        Application.ProcessMessages;
        GetCursorPos(p);
        SetCursorPos(p.X+5, p.Y+5);
        Sleep(85);
        Application.ProcessMessages;
        GetCursorPos(p);
        SetCursorPos(p.X-5, p.Y+5);
        Sleep(85);
        Application.ProcessMessages;
        GetCursorPos(p);
        SetCursorPos(p.X-5, p.Y+5);
        Sleep(85);
        Application.ProcessMessages;
        GetCursorPos(p);
        SetCursorPos(p.X+5, p.Y+5);
        Sleep(85);
        Application.ProcessMessages;
end;

if (Msg.Msg = MWM_LBUTTONUP) then
begin
    Exit;
end;

initialization
  MWM_LBUTTONDOWN := RegisterWindowMessage('MWM_LBUTTONDOWN');
  MWM_LBUTTONUP := RegisterWindowMessage('MWM_LBUTTONUP');
end.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:55.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025