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

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

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

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Будьте добры, подскажите. Мне необходимо поставить паузу, так, чтобы для продолжения работы программы нужно было нажать какую-либо клавишу.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2013, 16:22
Ответы с готовыми решениями:

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

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

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

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

57
LK
Заблокирован
20.04.2013, 16:24 2
C++
1
2
3
Button1->Enabled = false;
// OnButton2Click
Button1->Enabled = true;
1
2 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 143
20.04.2013, 17:02  [ТС] 3
Добавлено через 4 минуты
Цитата Сообщение от LK Посмотреть сообщение
Button1->Enabled = false;
// OnButton2Click
Button1->Enabled = true;
Простите мою некомпетентность, но где и каким образом это нужно вставить?
0
LK
Заблокирован
20.04.2013, 17:12 4
Например,
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  [ТС] 5
Цитата Сообщение от LK Посмотреть сообщение
Button1->Enabled = false;
В этом случае кнопка просто не активна,

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


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

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от Vashtanerada Посмотреть сообщение
как я поняла, это в событиях формы?
Вкладка Events в инспекторе объектов, двойной клик на пустом поле возле OnShow
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
20.04.2013, 20:27 7
Vashtanerada, так можно вокруг да около дооолго ходить.
Что за пауза имеется ввиду? Каково ее назначение? Какие процессы должны быть приостановлены при постановке программы "на паузу"?
1
1702 / 898 / 207
Регистрация: 25.11.2009
Сообщений: 1,847
20.04.2013, 20:55 8
я думаю, имеется в виду продолжение выполнения программы после нажатия любой клавиши на клавиатуре
Сама реализация "паузы" зависит от того, что делает ваша программа, какой в ней код
А вот чтобы отловить нажатие клавиши на клавиатуре, нужно установить свойство формы 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  [ТС] 9
Цитата Сообщение от 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
1702 / 898 / 207
Регистрация: 25.11.2009
Сообщений: 1,847
20.04.2013, 21:08 10
Сделайте, как я написал. Объявите переменную 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
Ramoncheg
20.04.2013, 21:31
  #11

Не по теме:

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

0
1702 / 898 / 207
Регистрация: 25.11.2009
Сообщений: 1,847
20.04.2013, 21:39 12
Цитата Сообщение от 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  [ТС] 13
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 14
Русские символы в пути, сохраните на диск D, или же переместите проект в папку с английским названием
0
2 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 143
20.04.2013, 22:06  [ТС] 15
Цитата Сообщение от Ramoncheg Посмотреть сообщение
Русские символы в пути, сохраните на диск D, или же переместите проект в папку с английским названием
Происходит то же самое, да и до изменений в программе она запускалась и работала.
0
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
20.04.2013, 22:12 16
Покажите свой полный код , который вы компилируете

Добавлено через 3 минуты
Скорей всего у вас пропал конструктор класса
допишите
C++
1
__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner){}
0
2 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 143
20.04.2013, 22:16  [ТС] 17
Цитата Сообщение от 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 18
Ваш код спокойно компилируется , и работает

Добавлено через 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  [ТС] 19
Цитата Сообщение от Ramoncheg Посмотреть сообщение
Скорей всего у вас пропал конструктор класса
допишите
Код C++
1
__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner){}
Именно это и было.

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

Добавлено через 21 секунду
К примеру в Button1Click
1
20.04.2013, 22:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2013, 22:31
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru