Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 01.06.2012
Сообщений: 5

Цикл в OnClick() не дает закрыть окно (задача из книги М.Мозговой)

16.07.2012, 21:48. Показов 1584. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. В задачах из книги "Занимательное программирование" М.Мозговой циклы находятся в обработчике события кнопки OnClick(), и выполнение этого цикла лишает возможности закрыть программу с помощью верхней правой кнопки (в виде крестика). Метод Application->ProcessMessages() дает возможность нажимать на кнопку, которая играет роль "Пуск"-"Стоп". Если во время работы программы нажать на крестик то программа не реагирует а при нажатии на кнопку "Пуск"-"Стоп" сразу закрывается.
Вопрос в том, есть ли метод который может закрыть программу во время работы цикла, как например Application->ProcessMessages() дает возможность останавливать и запускать программу с одной кнопки.

Вот код обработчика события для простоты вырезал все что мешает, этот скелет используется во многих задачах так что его
начинка не играет никакой роли :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    
     if (IsRunning) //IsRunning логическая переменная для определения в каком положение находится кнопка
     {
        Button1->Caption = "Старт";
        IsRunning = false;
        return;
     }
     Button1->Caption = "Стоп";
     IsRunning = true;
 
 
     while( IsRunning)
     {
    
        Sleep(5);
        Application->ProcessMessages();
     }
            
}
Я понимаю что можно просто вынести цикл за пределы OnClick() в таймер например, но хотелось бы узнать как можно
в данном случае закрывать программу по нажатию кнопки "Закрыть"
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.07.2012, 21:48
Ответы с готовыми решениями:

Нужно закрыть модальное окно и сделать активным вызвавшее его окно
Мне нада средствами Win API закрыть модальное окно и сделать активным вызвавшее его окно. Кто знает как это сделать?

Создать окно, которое нельзя закрыть.(Окно без крестика)
Как мне создать окно которое нельзя закрыть крестом.(Заблокировать крест, setEnabled(false) что то вроде). Создать окно в котором...

Сделать окно активным, закрыть окно, открыть в текущем окне
Появилась задача просматривать картинки (например обращаясь к xdg-open или через cacaview) и при этом продолжать работу в терминале. К...

4
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
16.07.2012, 21:58
Какой неприятный код. Sleep() и ProcessMessages() вообще штуки не очень хорошие, sleep только в побочных потоках и использовать.
Зачем это все нужно-то? Не хочешь, чтоб закрывали форму, обрабатывай onclose или onclosequery.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2012, 00:21
Ну в побочных потоках Sleep() тоже не дает закрыться приложению пока он работает.
1
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
20.07.2012, 08:40
PRodion, пробовал вставить IsRunning = false; в OnClose?
1
0 / 0 / 0
Регистрация: 01.06.2012
Сообщений: 5
20.07.2012, 18:21  [ТС]
AntonChik Благодарю!!! Попробовал сделать как ты сказал все заработало так, как и хотел. Об этом даже не подумал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.07.2012, 18:21
Помогаю со студенческими работами здесь

Закрыть дочернее окно и открыть в единственном экземпляре Главное окно
Есть главная форма Main Form , там кнопка Button 1 при нажатии на Button 1 открывыется дочерняя форма Form 1, на фомрме Form 1 есть кнопка...

Как закрыть окно формы и открыть окно другой
Код такой. Нужно по нажатии кнопки закрыть форму 1 и открыть форму 2... но, что-то так не работает private void button2_Click(object...

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

Закрыть окно, из которого создано новое окно
Как мне закрыть окно из которого я создал новое окно? Window1 window = new Window1(); window.Owner = this; window.Show(); ...

Windows не дает закрыть программу при обновлении оной
Всем добрый день. Помогите ламеру с одним вопросом. Суть такова: есть программа, база данных, которая не устанавливается, а просто...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru