Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2013, 19:29   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию Кнопка прекращающая действие

Нужно создать кнопку прекращающую бесконечный цикл.
Выглядит это примерно таким образом.

Пользователь нажимает на кнопку ( в программе ). Идет бесконечное действие чего-либо. При нажатии Esc(клавиша взята к примеру) это действие прекращается, но при этом программа не закрывается.
Причем нужно чтобы эта кнопка работала когда фокус не стоит на программе.

Собственно вопрос где писать? Пробовал писать в Form1.KeyDown не работает, пробовал в Button1.KeyDown - не работает

Вот код.
Код:
if key=VK_ESCAPE then Exit;
Но это что-то не то.
Praud вне форума Ответить с цитированием
Старый 06.08.2013, 19:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Причем нужно чтобы эта кнопка работала когда фокус не стоит на программе.
Значит регистрируй горячую клавишу. Или ставь хук на клавиатуру.
Цитата:
Пользователь нажимает на кнопку ( в программе ). Идет бесконечное действие чего-либо.
Это уже готово или это тоже нужно еще только писать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.08.2013, 19:52   #3
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Значит регистрируй горячую клавишу. Или ставь хук на клавиатуру.

Это уже готово или это тоже нужно еще только писать?
Как регистрировать горячую клавишу? Мне если можно самый простой вариант, с хуком на клавиатуре я врядли разберусь. Я даже не имею понятия что это.
А то что я говорю уже написано и работает. Осталось сделать клавишу "отмена" для этого
Praud вне форума Ответить с цитированием
Старый 06.08.2013, 20:13   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Смотри: http://www.programmersforum.ru/showthread.php?t=8638
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.08.2013, 20:21   #5
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

сейчас почитаю, но главный вопрос то не решен, как выйти из цикла? Код приведенный выше не работает. Пока что пусть оно хоть внутри программы работает. Хоть как-то

Последний раз редактировалось Praud; 06.08.2013 в 20:27.
Praud вне форума Ответить с цитированием
Старый 06.08.2013, 20:30   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,877
По умолчанию

Цитата:
Сообщение от Praud Посмотреть сообщение
как выйти из цикла? Код приведенный выше не работает.
"Внешним" способом цикл прервать нельзя никаким образом.
northener вне форума Ответить с цитированием
Старый 06.08.2013, 20:33   #7
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Ну делают же как-то автокликеры. Допустим бесконечное кол-во повторений. Кнопка Esc- прекращение "кликания"
Praud вне форума Ответить с цитированием
Старый 06.08.2013, 20:40   #8
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,877
По умолчанию

Внутри цикла нужно организовать проверку какой-нибудь переменной типа:
Код:
var
  StopCicle : Boolean;
...
StopCicle:=False;
while True do
  begin
    ...  //основная работа цикла
    Application.ProcessMessages;   //Волшебная строчка
    if StopCicle then Exit;
  end;
StopCicle устанавливать в True по нажатию кнопки.
northener вне форума Ответить с цитированием
Старый 06.08.2013, 20:49   #9
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Внутри цикла нужно организовать проверку какой-нибудь переменной типа:
Код:
var
  StopCicle : Boolean;
...
StopCicle:=False;
while True do
  begin
    ...  //основная работа цикла
    Application.ProcessMessages;   //Волшебная строчка
    if StopCicle then Exit;
  end;
StopCicle устанавливать в True по нажатию кнопки.

Сделал так как вы написали, только остался вопрос, для какой формы писать само действие при нажатии кнопки? Пишу KeyDown для TForm1 - не работает
Praud вне форума Ответить с цитированием
Старый 06.08.2013, 21:11   #10
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Вместо каких либо действий на кнопку Escape Написал простейший ShowMessage.
Проблема в том что ShowMessage Выбивает только после окончания цикла ( если он не бесконечен ). То есть я могу нажать на Esc в любое время, а действие выполнится только после этого цикла. И как с этим бороться?
Praud вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Действие по времени Letnab Общие вопросы Delphi 2 20.03.2011 21:39
webbrowser и кнопка в нем, нажатие - действие grafgrial Общие вопросы Delphi 6 08.12.2010 14:03
Не повторяется действие waterya Общие вопросы Delphi 17 17.06.2010 15:24
выполнить действие. IVANSour Общие вопросы Delphi 6 01.02.2009 22:53