Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Button1Click отслеживать нажатия Button2 как сделать
Закрытая тема
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
real real вне форума
Member
 
Сообщений: 69
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.03.2003
По умолчанию Button1Click отслеживать нажатия Button2 как сделать - 31.05.2003, 21:25

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  for (i = 1; i < 1000; ++i){;

  Здесь нужно отслеживать нажатие кнопки Button2
  и если Button2 нажата то перейти на выполнение  void __fastcall TForm1::Button2Click(TObject *Sender)

  }
}
подскажите как сделать ?
  (#2 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 02.06.2003, 14:07

Я думаю, такое осуществимо. Не могу сказать сходу как, но скорее всего осуществимо. Надо по хелпу посмотреть.
Я хотел обратить твое внимание на существенное НО, связанное с таким решением. Дело в том, что если поместить в цикл код ожидания нажатия кнопки, это заблокирует форму (окно). Фактически, не будет выполняться код перерисовки окна. Да и события нажатия до второй кнопки может просто не дойти. По умолчанию, если ты сам не создаешь дополнительных ниток (threads), у тебя весь код выполняется в контексте основной нитки, поэтому если ты забабахаешь длинный цикл, то тем самым заблокируешь приложение.
Можно, конечно, извернуться и уложить код в отдельную нить, но по-моему это чересчур геморойно. Мне кажется, можно найти более красивое решение.
Опиши подробнее задачу: зачем тебе нужно ждать 1000 нажатий на вторую кнопку?
  (#3 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию как вариант - 02.06.2003, 14:55

я в этом не разбираюсь, но чтобы прорисовывалась форма можно сделать так
Код:
for(int i = 0; i< 10000; i++)
{
  Sleep(100);
  Application->ProcessMessages();
  Edit1->Text=i;
}
форма будет прорисовывать - т.е. можно будет нажимать кнопки, ресайзить и т.д.
Только можно ли будет здесь перехватить событие нажатия кнопки.
В Билдер >5 есть компонент ApplicationEvents на вкладке Additional может его можно как-то использовать
  (#4 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию 02.06.2003, 23:54

Если я правильно понял, вторая кнопка нужна, чтобы остановить работу цикла, когда надоест ждать его завершения.
Ну в таком случае цикл засовывается в функцию, которая вызывается в отдельном thread'е, а вторая кнопка этот thread прерывает
  (#5 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию 03.06.2003, 13:18

делаеться так

...
Код:
bool stop; // область видимости

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

  stop = false;

  for (int i = 0; i < 1000; i++)
    {
       Sleep(100);
       Application->ProcessMessages();
       Edit1->Text = i;
       if (stop) break;
    }

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   
   stop=true;

}
//---------------------------------------------------------------------------
на форме надо установить свойство KeyPreview = true;

еще можно сделать так
добавить в цикл
Код:
       if (GetAsyncKeyState(VK_ESCAPE) != 0) break;
будет отанавливать по клавише "Esc"

источники
1. http://forum.codenet.ru/showthread.php?threadid=7368
2. Help C++Builder -> OnKeyDown->Example
Ads.
  (#6 (permalink)) Старый
real real вне форума
Member
 
Сообщений: 69
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.03.2003
По умолчанию тему можно закрывать - 10.06.2003, 13:17

тему можно закрывать
Ads
Закрытая тема

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка нажатия клавиш. AK347 Haskell 1 16.03.2012 17:42
как отслеживать сообщения? Д_Е_Н_И_С О сайте и форуме 4 08.01.2011 11:55
Как в реальном времени отслеживать открытие закрытие файлов dimonVDL C++ Builder 6 06.09.2010 18:23
Эмуляция нажатия клавиш Restor С/С++ 1 26.10.2006 12:44
Как заставить программу отслеживать координаты маркера AlexG Вопросы начинающих программистов 8 28.04.2006 08:26
Как отслеживать загрузку процессора edvin1234 Visual C++ 7 17.03.2006 13:13
Обработка нажатия клавиши Nicolo.pas Delphi 39 22.12.2003 19:50
Как отслеживать изменения в файловой системе Anonymous Visual C++ 3 27.09.2003 15:29
Какой заголовок обработчика события OnClick долж быть если отслеживать нажатия кнопок Anonymous C++ Builder 9 08.09.2003 20:39
Как можно организовать, чтобы программа сама вызывала процедуру Button1Click Anonymous C++ Builder 12 24.06.2003 17:23
Как вести некий список найденных багов, отслеживать, какие устранены etc Anonymous C++ Builder 5 25.04.2003 12:18
Как отслеживать момент подключения и отключения к папке выложенной на доступ в сети Павел Елагин Visual C++ 2 27.12.2002 12:27



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов