Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


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

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

Купить рекламу на форуме 40000 рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2011, 01:10   #1
mLight
 
Регистрация: 05.11.2011
Сообщений: 5
По умолчанию Обработка нажатия клавиш в цикле

Доброго времени суток.
У меня есть программа. В ней заполняется массив и отображается на label.
Есть также кнопки Start, Stop, Action.
Нужно сделать такое:
0) после нажатия кнопки старт происходит изменение массива и соотвественно изменение его отображения в Label.
1) это изменение происходит до нажатия кнопки Stop.
2)в промежуток времени между нажатиями Start и Stop нада сделать проверку на нажатие кнопки Action, и соответсвенно эта кнопка тоже изменяет массив но по другой формуле.

Я вобщем непонимаю как сделать проверку на нажатие Action и чтобы эта проверка всё время повторялась, но паралельно должна идти основная робота по изменению массива.
И как проверить когда будет нажата кнопка Stop.

P.S. Половина уже придумал пока писал сообщение =)
Код:
procedure TForm1.StartClick(Sender: TObject);
  var
    counter: integer;
  begin
    for counter:=0 to 1000 do
      begin
       sleep(10);
       procedure1();
       repaint;
       if GetAsyncKeyState(Vk_escape) <> 0 then procedure2();
      end;
  end;
но остается вопрос как сделать не через цикл for , а до того времени пока не будет нажата Stop. И как мне проверить не Escape, а Action(TButton).

Последний раз редактировалось Stilet; 05.11.2011 в 10:17.
mLight вне форума Ответить с цитированием
Старый 05.11.2011, 03:00   #2
Хамяг
Форумчанин
 
Аватар для Хамяг
 
Регистрация: 22.08.2008
Сообщений: 105
По умолчанию

вынести изменение массива в отдельный поток.

завести логическую переменную (назовём её B1).
в обработчике события OnClick у кнопки Action меняем B1 на True.
в цикле проверяем
Код:
if B1 then
begin
  B1:=False;
  <действия>
end;
тоже самое и с кнопкой Stop.
Хамяг вне форума Ответить с цитированием
Старый 05.11.2011, 10:05   #3
DeZik
 
Регистрация: 01.11.2008
Сообщений: 5
По умолчанию

Делаем просто:
1. Объявляем глобальную переменную допустим Act:integer=0;
2. Создаем процедуры
-Action
-Start
в которых описываем формат выполняемых действий по формулам
далее
на кнопку старт вешаем Act=1
на кнопку Action вешаем Act=2
на кнопку стоп вешаем Act=0

Кладем на форму Timer период выбирайте сами хоть 1
в нем пишем
if Act=1 then Start;
if Act=2 then Action;
application.processmessage;

Все
DeZik вне форума Ответить с цитированием
Старый 05.11.2011, 15:57   #4
mLight
 
Регистрация: 05.11.2011
Сообщений: 5
По умолчанию

Спасибо за помощь!
Т.к. до изучения многопоточности не добрался ещё, да и программа вроде небольшая, сделал всё через Таймер. То что надо.

P.S. Как кусок кода на форуме правильно вставлять?
mLight вне форума Ответить с цитированием
Старый 05.11.2011, 18:03   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Читаем правила раздела.
Там подробно написано, как следует оформлять код и что получается, если этого не делать.
mihali4 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эмуляция нажатия клавиш KamiMAN Общие вопросы Delphi 5 13.03.2011 06:24
обработка нажатия клавиш VC++ консоль rest Помощь студентам 0 06.10.2009 06:53
перехват нажатия клавиш skalt12 Общие вопросы Delphi 4 17.08.2009 12:06
нажатия клавиш на клавиатуре include Общие вопросы Delphi 4 24.06.2009 15:26