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

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

20.04.2013, 16:22. Показов 10369. Ответов 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
1709 / 905 / 207
Регистрация: 25.11.2009
Сообщений: 1,850
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
1709 / 905 / 207
Регистрация: 25.11.2009
Сообщений: 1,850
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
1709 / 905 / 207
Регистрация: 25.11.2009
Сообщений: 1,850
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
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru