С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/48: Рейтинг темы: голосов - 48, средняя оценка - 4.67
2 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 143

Программная пауза

20.04.2013, 16:22. Показов 10151. Ответов 57
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Будьте добры, подскажите. Мне необходимо поставить паузу, так, чтобы для продолжения работы программы нужно было нажать какую-либо клавишу.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.04.2013, 16:22
Ответы с готовыми решениями:

Неправильно работает пауза в while
Задача стоит в том, чтобы показать пошаговое выполнение одного алгоритма. Реализацию самого алгоритма я сделал успешно. Вкратце смысл в...

Пауза на исполнение команды
Добрый день всем! Кто поможет решить такую задачу с 3 секундной паузой меж строк кода: допустим: 1.ButtonCancel->Enabled =...

Пауза в инструкции - ожидание события
Коллеги, будьте добры, подскажите как организовать следующий момент. Есть 2 цикла в одной функции, которые идут подряд. Нужно чтобы...

57
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
20.04.2013, 16:24
C++
1
2
3
Button1->Enabled = false;
// OnButton2Click
Button1->Enabled = true;
1
2 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 143
20.04.2013, 17:02  [ТС]
Добавлено через 4 минуты
Цитата Сообщение от LK Посмотреть сообщение
Button1->Enabled = false;
// OnButton2Click
Button1->Enabled = true;
Простите мою некомпетентность, но где и каким образом это нужно вставить?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
20.04.2013, 17:12
Например,
C++
1
Button1->Enabled = false;
- в обработчик формы OnShow,
C++
1
Button1->Enabled = true;
- в обработчик нажатия кнопки Button2

Путеводитель по книжкам про C++ Builder
1
2 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 143
20.04.2013, 19:29  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
Button1->Enabled = false;
В этом случае кнопка просто не активна,

Цитата Сообщение от LK Посмотреть сообщение
в обработчик формы OnShow
как я поняла, это в событиях формы?


Цитата Сообщение от LK Посмотреть сообщение
в обработчик нажатия кнопки Button2
При чем тут Button2?
0
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
20.04.2013, 20:16
Событие OnShow происходит перед тем, как форма станет видимой (т.е. перед тем как вы увидите форму ). Исходя из

Цитата Сообщение от LK Посмотреть сообщение
Re: Программная пауза
Например,

C++
1
Button1->Enabled = false;
- в обработчик формы OnShow,

C++
1
Button1->Enabled = true;
- в обработчик нажатия кнопки Button2
сначала наша кнопка не активна ( если вы нажмете на нее , то ничего не произойдет )

после нажатия кнопки Button2 кнопка Button1 станет активной, и по нажатию уже на первую кнопку произойдет действие записанное нами в обработчике события

Добавлено через 1 минуту
Цитата Сообщение от Vashtanerada Посмотреть сообщение
как я поняла, это в событиях формы?
Вкладка Events в инспекторе объектов, двойной клик на пустом поле возле OnShow
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
20.04.2013, 20:27
Vashtanerada, так можно вокруг да около дооолго ходить.
Что за пауза имеется ввиду? Каково ее назначение? Какие процессы должны быть приостановлены при постановке программы "на паузу"?
1
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
20.04.2013, 20:55
я думаю, имеется в виду продолжение выполнения программы после нажатия любой клавиши на клавиатуре
Сама реализация "паузы" зависит от того, что делает ваша программа, какой в ней код
А вот чтобы отловить нажатие клавиши на клавиатуре, нужно установить свойство формы KeyPreview = true и ожидать события OnKeyPress формы

Добавлено через 14 минут
вот довольно грубый пример
кидаем на форму Button1, Label1, в инспекторе объектов устанавливаем св-во формы KeyPreview = true.
В H файле, в классе формы объявляем переменную
C++
1
bool pause;
В конструкторе формы задаём её начальное значение
C++
1
2
3
4
5
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    pause = false;  //начальное значение - пауза выключена
}
и создаём два события
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    for (int i = 0; i <= 50; i++)
    {  //здесь делаем в цикле какое-то действие
        Label1->Caption = IntToStr(i);
        Form1->Refresh();
        Sleep(50);
 
        if (i == 25)  //при наступлении какого-то условия
            pause = true;  //включаем паузу
 
        while (pause)  //ждём, пока пауза не будет отключена
        {
            Application->ProcessMessages();  //чтобы обработать событие FormKeyPress
        }
    }
}
 
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
    pause = false;  //после нажатия любой кнопки отключаем паузу
}
1
2 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 143
20.04.2013, 21:05  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
Что за пауза имеется ввиду? Каково ее назначение? Какие процессы должны быть приостановлены при постановке программы "на паузу"?
Программа сравнивает цвета:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
void __fastcall TForm1::Button1Click(TObject *Sender)
{
const c=25;
int k,r,g,b,f,r1,g1,b1,n,n1,p;
float a,s,m;
double q,t;
 
k=Edit1->Text.ToInt(); 
t=1.0/3.0;
q=pow(k,t);        
a=255/q;             
 
Label2->Caption=q;
Label4->Caption=a;
 
for (r=0; r<=255; r=r+c)
 for (g=0; g<=255; g=g+c)
  for (b=0; b<=255; b=b+c)
   {s=0;
    for (f=1; f<=q; f++)
    {
     s=s+a;
     if (r<s) {r1=s-a/2;
      break;}
    }
    s=0;
    for (f=1; f<=q; f++)
    {
     s=s+a;
     if (g<s) {g1=s-a/2;
      break;}
    }
    s=0;
    for (f=1; f<=q; f++)
    {
     s=s+a;
     if (b<s) {b1=s-a/2;
      break;}
    }
    n=r+g*256+b*65536;
    n1=r1+g1*256+b1*65536;
    Canvas->Brush->Color=n;
    Canvas->Rectangle(225,25,250,50);
    Canvas->Brush->Color=n1;
    Canvas->Rectangle(300,25,325,50);}
 
}
После выполнения цикла, в самом его конце нужно сделать так, чтобы новый проход цикла происходил только после нажатия клавиши, либо по нажатию единственной кнопки.
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
20.04.2013, 21:08
Сделайте, как я написал. Объявите переменную bool pause, установите свойство формы KeyPreview = true, в конце своего цикла вставьте
C++
1
2
3
4
5
    pause = true;
    while (pause)  //ждём, пока пауза не будет отключена
    {
        Application->ProcessMessages();  //чтобы обработать событие FormKeyPress
    }
и
C++
1
2
3
4
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
    pause = false;  //после нажатия любой кнопки отключаем паузу
}
ну и на нажатие "единственной кнопки" тоже надо добавить pause = false;
1
20.04.2013, 21:31

Не по теме:

Lelik-pahan, как написать обработку определенной кнопки?

0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
20.04.2013, 21:39
Цитата Сообщение от Ramoncheg Посмотреть сообщение
Не по теме: Lelik-pahan, как написать обработку определенной кнопки?
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
    if (Key == VK_RETURN)
        ShowMessage("íàæàëè ýíòåð");
    else if (Key == 'g')
        ShowMessage("íàæàëè g");
    else if (Key == '1')
        ShowMessage("íàæàëè 1");
    else if (Key == 'f')
        Key = 0;  //îòìåíÿåì íàæàòèå êíîïêè F
}
2
2 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 143
20.04.2013, 21:56  [ТС]
Lelik-pahan, сделала, вроде, все как вы сказали, но программа не запускается, а выдает:

[Linker Error] Unresolved external 'TForm1::' referenced from D:\УЧЕБА\НОВАЯ ПАПКА\PROJECT1.OBJ
0
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
20.04.2013, 21:58
Русские символы в пути, сохраните на диск D, или же переместите проект в папку с английским названием
0
2 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 143
20.04.2013, 22:06  [ТС]
Цитата Сообщение от Ramoncheg Посмотреть сообщение
Русские символы в пути, сохраните на диск D, или же переместите проект в папку с английским названием
Происходит то же самое, да и до изменений в программе она запускалась и работала.
0
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
20.04.2013, 22:12
Покажите свой полный код , который вы компилируете

Добавлено через 3 минуты
Скорей всего у вас пропал конструктор класса
допишите
C++
1
__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner){}
0
2 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 143
20.04.2013, 22:16  [ТС]
Цитата Сообщение от Ramoncheg Посмотреть сообщение
Покажите свой полный код , который вы компилируете
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
void __fastcall TForm1::Button1Click(TObject *Sender)
{
const c=25;
int k,r,g,b,f,r1,g1,b1,n,n1,p;
float a,s,m;
double q,t;
bool pause;
 
k=Edit1->Text.ToInt(); //кол-во цветов
t=1.0/3.0;
q=pow(k,t);          //кол-во отрезков
a=255/q;               //размер отрезка
 
Label2->Caption=q;
Label4->Caption=a;
 
for (r=0; r<=255; r=r+c)
 for (g=0; g<=255; g=g+c)
  for (b=0; b<=255; b=b+c)
   {s=0;
    for (f=1; f<=q; f++)
    {
     s=s+a;
     if (r<s) {r1=s-a/2;
      break;}
    }
    s=0;
    for (f=1; f<=q; f++)
    {
     s=s+a;
     if (g<s) {g1=s-a/2;
      break;}
    }
    s=0;
    for (f=1; f<=q; f++)
    {
     s=s+a;
     if (b<s) {b1=s-a/2;
      break;}
    }
    n=r+g*256+b*65536;
    n1=r1+g1*256+b1*65536;
    Canvas->Brush->Color=n;
    Canvas->Rectangle(225,25,250,50);
    Canvas->Brush->Color=n1;
    Canvas->Rectangle(300,25,325,50);}
    pause = true;
    while (pause)  //ждём, пока пауза не будет отключена
    {
        Application->ProcessMessages();  //чтобы обработать событие FormKeyPress
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
    bool pause;
    pause = false;  //после нажатия любой кнопки отключаем паузу
}
Добавлено через 3 минуты
А код который был представлен ранее, спокойно компилируется
0
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
20.04.2013, 22:19
Ваш код спокойно компилируется , и работает

Добавлено через 2 минуты
Цитата Сообщение от Ramoncheg Посмотреть сообщение
Скорей всего у вас пропал конструктор класса
допишите

C++
1
__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner){}
покажите весь код ( с подключением библиотек , короче весь файл .cpp)
1
2 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 143
20.04.2013, 22:22  [ТС]
Цитата Сообщение от Ramoncheg Посмотреть сообщение
Скорей всего у вас пропал конструктор класса
допишите
Код C++
1
__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner){}
Именно это и было.

Теперь программа запускается, но все равно паузы нет и цвета просто переходят от одного к другому непрерывно
0
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
20.04.2013, 22:31
Вам нужно дописать :
C++
1
KeyPreview=true;
в обработчик события

Добавлено через 21 секунду
К примеру в Button1Click
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2013, 22:31
Помогаю со студенческими работами здесь

В билдеровском MediaPlayer-е кнопка стоп работает как пауза?
Ребята, кто-нибудь сталкивался с такой проблемой, в билдеровском медиаплеере кнопка стоп, работает как пауза или это только у меня такие...

нужно сделать кнопки старт и пауза для движущихся фигур
пауза нормально работает. но после паузы нажимаешь на старт фигуры не продолжают движение по траектории, а движется хаотично. помогите...

Программная эмуляция джойстика
Здравствуйте! Делаю одну ЮСБ-примочку для ПК, одна с функций которого - прием сигналов с ПДУ и передача их на ПК как игровое устройство...

Программная реализация номограммы
Сейчас пишу одну модель программно, в нее входят разные формулы для ее расчета, вбивать их конечно на С, не составляет никакого труда, но...

Программная очистка Edit
Нужно это добавить как то в настройки Edit1-&gt;Clear(); Но чтобы Edit1 чистился не на событие OnClick а чтобы это в настройки вывести и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru