Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ Builder

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.81
Vashtanerada
1 / 1 / 0
Регистрация: 29.11.2012
Сообщений: 143
#1

Программная пауза - C++ Builder

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

Доброго времени суток! Будьте добры, подскажите. Мне необходимо поставить паузу, так, чтобы для продолжения работы программы нужно было нажать какую-либо клавишу.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2013, 16:22
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Программная пауза (C++ Builder):

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

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

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

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

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

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

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

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


Цитата Сообщение от LK Посмотреть сообщение
в обработчик нажатия кнопки Button2
При чем тут Button2?
0
Ramoncheg
24 / 17 / 1
Регистрация: 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
BRcr
4015 / 2305 / 156
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
20.04.2013, 20:27 #7
Vashtanerada, так можно вокруг да около дооолго ходить.
Что за пауза имеется ввиду? Каково ее назначение? Какие процессы должны быть приостановлены при постановке программы "на паузу"?
1
Lelik-pahan
1359 / 778 / 92
Регистрация: 25.11.2009
Сообщений: 1,581
Завершенные тесты: 1
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
Vashtanerada
1 / 1 / 0
Регистрация: 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
Lelik-pahan
1359 / 778 / 92
Регистрация: 25.11.2009
Сообщений: 1,581
Завершенные тесты: 1
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
Lelik-pahan
1359 / 778 / 92
Регистрация: 25.11.2009
Сообщений: 1,581
Завершенные тесты: 1
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
Vashtanerada
1 / 1 / 0
Регистрация: 29.11.2012
Сообщений: 143
20.04.2013, 21:56  [ТС] #13
Lelik-pahan, сделала, вроде, все как вы сказали, но программа не запускается, а выдает:

[Linker Error] Unresolved external 'TForm1::' referenced from D:\УЧЕБА\НОВАЯ ПАПКА\PROJECT1.OBJ
0
Ramoncheg
24 / 17 / 1
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
20.04.2013, 21:58 #14
Русские символы в пути, сохраните на диск D, или же переместите проект в папку с английским названием
0
Vashtanerada
1 / 1 / 0
Регистрация: 29.11.2012
Сообщений: 143
20.04.2013, 22:06  [ТС] #15
Цитата Сообщение от Ramoncheg Посмотреть сообщение
Русские символы в пути, сохраните на диск D, или же переместите проект в папку с английским названием
Происходит то же самое, да и до изменений в программе она запускалась и работала.
0
20.04.2013, 22:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2013, 22:06
Привет! Вот еще темы с ответами:

Программная сортировка в ListView - C++ Builder
Здравствуйте! Есть сортировка по убыванию при нажатии столбца в ListView: bool rev; int ColumnToSort; ...

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

Программная распаковка zip-архива - C++ Builder
Собственно вопрос простой - КАК это реализовать?

Программная смена обоев рабочего стола... - C++ Builder
Как в Windows XP программно сменить обои рабочего стола? Пробовал сделать так: ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru