Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 08.09.2018
Сообщений: 95
1

Выход из цикла по нажатию заданной клавиши

23.04.2019, 16:10. Просмотров 828. Ответов 25
Метки нет (Все метки)

Здравствуйте! Подскажите пожалуйста, как реализовать выход из цикла (repeat until) путем нажатия соотвествующей клавиши, которую мы сами задаем. В инете не могу найти
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2019, 16:10
Ответы с готовыми решениями:

Остановка цикла по нажатию клавиши
Только начал осваивать эту задачу, может код и корявый, но не пойму, почему он не работает, мне...

Выход из цикла по нажатию клавиши
В очередной раз поднимаю эту тему. Задача такая, ходить по циклу бесконечное количество раз и...

Выход из цикла по нажатию клавиши
Возможно ли этот кусок кода приспособить к выходу из цикла не по воду -1 в m а по вводу допустим...

Выход из цикла по нажатию определенной клавиши
Допустим у меня есть какой-нибудь while(1) и мне нужно, чтобы при нажатии, например, esc или enter...

25
19 / 17 / 9
Регистрация: 23.09.2014
Сообщений: 286
23.04.2019, 16:42 2
mr-cat,
1
2
по запросу "delphi отследить нажатие клавиши" информации вагон.

Но судя по постановке задачи вы творите какую-то дичь...
0
0 / 0 / 0
Регистрация: 08.09.2018
Сообщений: 95
23.04.2019, 16:49  [ТС] 3
да вроде все ясно изложил! вот задача:
Delphi
1
2
3
4
repeat
...
ch := PChar(InputBox('для выхода из цикла введите Y',' ',' '));
   until (ch = 'Y');
только вместо такой штуки, нужно, чтобы при нажатии на клавишу (допустим esc), закрывался цикл и не пришлось вводить вручную необходимый символ.
0
Продавец времени
3589 / 2003 / 456
Регистрация: 12.03.2015
Сообщений: 10,027
23.04.2019, 17:01 4
Цитата Сообщение от mr-cat Посмотреть сообщение
только вместо такой штуки, нужно, чтобы при нажатии на клавишу (допустим esc), закрывался цикл и не пришлось вводить вручную необходимый символ.
Это в оконном приложении или в консольном?
0
Модератор
60218 / 45347 / 31288
Регистрация: 18.05.2008
Сообщений: 108,936
23.04.2019, 17:05 5
А InputBox есть в консольном?
0
0 / 0 / 0
Регистрация: 08.09.2018
Сообщений: 95
23.04.2019, 17:09  [ТС] 6
оконное
0
Продавец времени
3589 / 2003 / 456
Регистрация: 12.03.2015
Сообщений: 10,027
23.04.2019, 17:11 7
Цитата Сообщение от Puporev Посмотреть сообщение
А InputBox есть в консольном?
Ну, а почему нет? Попробуй.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
program sample;
 
{$APPTYPE CONSOLE}
 
uses dialogs;
 
var
  s: string;
 
begin
  s:= InputBox('Test program', 'Пожалуйста, укажите свой город', 'мухосранск');
  writeln('город: ' + s);
  readln;
end.
Я не пробовал.
0
19 / 17 / 9
Регистрация: 23.09.2014
Сообщений: 286
23.04.2019, 17:13 8
mr-cat, Самый топроный вариант. При этом он есть в примере "1" который я вам скидывал...
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.btn1Click(Sender: TObject);
begin
  repeat
    //
  until EscKeyDown;
  ShowMessage('я вышел!');
end;
 
function TForm1.EscKeyDown : boolean;
begin
 result:=(GetAsyncKeyState(VK_ESCAPE) and $8001) <> 0;
end;
0
Модератор
60218 / 45347 / 31288
Регистрация: 18.05.2008
Сообщений: 108,936
23.04.2019, 17:14 9
Verevkin,Оказывается есть, я пробовал.
0
Продавец времени
3589 / 2003 / 456
Регистрация: 12.03.2015
Сообщений: 10,027
23.04.2019, 17:41 10
Цитата Сообщение от Puporev Посмотреть сообщение
Оказывается есть, я пробовал.
Да я пошутил. Пробовал я когда-то печатать из консоли, было прикольно показать диалог печати из консольного приложения! Я тот ещё подонок!

Вот эта вундервафля: Заполнить массив случайными числами на отрезке и вывести на печать

Раскопал в архиве, запустил - ОНО РАБОТАЕТ!!!

Выход из цикла по нажатию заданной клавиши
0
Universal
Эксперт Pascal/Delphi
4583 / 2582 / 819
Регистрация: 04.10.2012
Сообщений: 9,411
23.04.2019, 21:49 11
Цитата Сообщение от Verevkin Посмотреть сообщение
было прикольно показать диалог печати из консольного приложения
тоже бывали всякие извращения с консолью

Цитата Сообщение от Verevkin Посмотреть сообщение
ОНО РАБОТАЕТ!!!
0
0 / 0 / 0
Регистрация: 08.09.2018
Сообщений: 95
24.04.2019, 10:38  [ТС] 12
у меня не совсем так. у меня к основному модулю подключен в uses паскалевский модуль, и уже в нем имеется процедура, включающая цикл. и есть обработчик события для этой процедуры:
Delphi
1
2
3
4
procedure TForm1.BuildList1Click(Sender: TObject);
begin
Build(head); //процедура с циклом
end;
0
19 / 17 / 9
Регистрация: 23.09.2014
Сообщений: 286
24.04.2019, 13:30 13
mr-cat, и?
что мешает функцию :
Delphi
1
2
3
4
function TForm1.EscKeyDown : boolean;
begin
 result:=(GetAsyncKeyState(VK_ESCAPE) and $8001) <> 0;
end;
Запилить в ваш Unit ?
А в процедуре с циклом указать условием выхода всю ту же функцию?
0
0 / 0 / 0
Регистрация: 08.09.2018
Сообщений: 95
24.04.2019, 13:42  [ТС] 14
ряд ошибок возник
[Error] ModWorkList.pas(105): Undeclared identifier: 'EscKeyDown'
[Error] ModWorkList.pas(165): Function needs result type
[Error] ModWorkList.pas(167): Undeclared identifier: 'GetAsyncKeyState'
[Error] ModWorkList.pas(167): Undeclared identifier: 'VK_ESCAPE'
0
19 / 17 / 9
Регистрация: 23.09.2014
Сообщений: 286
24.04.2019, 13:58 15
mr-cat,

Не по теме:

Да что-за люди то... вас всех в гугле если забанили - то есть же Яндекс ... поисковиков в принципе дофига

.
По пунктам.
1.
Undeclared identifier: 'EscKeyDown' - процедуры и функции надо как бы объявлять...
Function needs result type - следствие того, что функция не объявлена.
тоесть в своём Unit пишем :
Delphi
1
Function EscKeyDown:boolean;
Надеюсь где писать вы знаете.... ну или хотябы нагуглите...
2.
[Error] ModWorkList.pas(167): Undeclared identifier: 'GetAsyncKeyState'
[Error] ModWorkList.pas(167): Undeclared identifier: 'VK_ESCAPE'

в Uses своего модуля добавьте Winapi.Windows...

Естественно фукция в Unit будет описываться не как метод формы... а как просто функция...
Тоесть не так :

Delphi
1
2
3
4
function TForm1.EscKeyDown : boolean;
begin
 result:=(GetAsyncKeyState(VK_ESCAPE) and $8001) <> 0;
end;
а так:
Delphi
1
2
3
4
function EscKeyDown : boolean;
begin
 result:=(GetAsyncKeyState(VK_ESCAPE) and $8001) <> 0;
end;
0
4209 / 3500 / 1185
Регистрация: 14.04.2014
Сообщений: 16,756
Записей в блоге: 17
24.04.2019, 14:00 16
господа, давайте перестанем учить плохому
если у вас в программе цикл в главном потоке, он не должен прерываться событиями из главного же потока, ибо это архитектурно неверно

вы должны в этом случае либо выносить цикл в дополнительный поток, либо тело цикла вынести в отдельную процедуру, завести себе таймер, и по таймеру N раз эту процедуру выполнить
0
19 / 17 / 9
Регистрация: 23.09.2014
Сообщений: 286
24.04.2019, 14:05 17
krapotkin, я с вами безусловно согласен...
©
Цитата Сообщение от vijer Посмотреть сообщение
Но судя по постановке задачи вы творите какую-то дичь...

Не по теме:


Ну а как?
Человек не знает значение ошибок Undeclared identifier ... Если грузить его голову потоками ещё сейчас... он уйдёт в темный лес и не вернётся...

0
Модератор
6070 / 3814 / 1694
Регистрация: 21.01.2014
Сообщений: 16,082
Записей в блоге: 3
24.04.2019, 15:28 18

Не по теме:

Цитата Сообщение от vijer Посмотреть сообщение
он уйдёт в темный лес и не вернётся...
И там ему и место!


0
0 / 0 / 0
Регистрация: 08.09.2018
Сообщений: 95
24.04.2019, 16:13  [ТС] 19
Не надо меня в лес отправлять. Я просто не мог понять, как воспользоваться функцией вне формы. Спасибо за помощь.
0
Модератор
6070 / 3814 / 1694
Регистрация: 21.01.2014
Сообщений: 16,082
Записей в блоге: 3
24.04.2019, 16:26 20
Цитата Сообщение от mr-cat Посмотреть сообщение
Я просто не мог понять, как воспользоваться функцией вне формы.
Так учебники по паскалю еще с 80-х годов прошлого века выпускаются... И, в принципе, ничего не изменилось: чтобы обратиться к объекту, описанному в левом модуле, надо этот левый модуль прописать в uses...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2019, 16:26

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

Выход из бесконечного цикла по нажатию клавиши
как выйти из бесконечного цикла по нажатию клавиши? begin: ..... jmp begin 8h ждет нажатия...

Выход из цикла по нажатию клавиши (Аналог getkeystate)
Нужно выйти из цикла по сигналу от клавиатуры, getchar() не подходит, так как каждый раз ожидает...

Старый борланд: как выйти из бесконечного цикла по нажатию заданной клавиши?
Короче нужно сделать прогу которая считает сколько отрицательных,положительных,равных 0 ввел...

Выход по нажатию клавиши
Здравствуйте! Как выйти из цикла по нажатию клавиши в python 3.4.1.? Знаю что подобные темы были,...


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

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

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