Форум: "Начинающим";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];
Внизпродолжение работы программы после нажатия клавиши Найти похожие ветки
← →
abajun (2009-11-13 19:53) [0]Привет всем! У меня следующий вопрос: как сделать так, чтобы программа в определенном месте останавливалась и ждала ответа пользователя, например, нажатия на пробел или ввод.
Заранее спасибо.
← →
intlex (2009-11-13 20:17) [1]
> abajun (13.11.09 19:53)
смотря какой интерфейс программы используется,
в консольной, например, процедурой Readln,
если интерфейс графический (с VCL), то выводом окна сообщения ShowWindow
я так понимаю, что речи о многопотоковости пока не идет)
← →
abajun (2009-11-13 20:55) [2]У меня интерфейс графический, не консольный. И многопотоковости нет.
А можно без окна сообщения? То есть типа следующего: на компоненте Chart рисуется график, но не сразу, а последовательно - после каждого нажатия клавиши на клавиатуре дорисовается еще часть (новый точки добавляются).
← →
intlex (2009-11-13 21:03) [3]а рисуешь как, в цикле?
если да, тогда можно сделать следующую проверку c помощью функцииGetKeyboardState
или что-то подобное
← →
intlex (2009-11-13 21:13) [4]например, пока не нажата кнопка Enter ждем:
var state: TKeyboardState;
...
repeat
Application.ProcessMessages;
GetKeyboardState(state);
until ((state[VK_RETURN] and 128) <> 0);
...
← →
abajun (2009-11-13 21:15) [5]Рисую в цикле. Вернее в одном из методов класса есть цикл, внутри которого вызывается процедура print, и вот в ней все и рисуется. Что-то мой делфи пишет, что он не знает что эта за функция GetKeyboardState, то есть в хелпе ее нет.
← →
intlex (2009-11-13 21:21) [6]подключи unit Windows, в делфи 5-7 он есть, а есть ли в старших версиях - не знаю
← →
abajun (2009-11-13 21:35) [7]Это получается, что цикл работает, а как только нажата Enter он останавливается. А мне наоборот - выполняется процедура, а посередине работа должна прикратиться. А потом, как только нажимается enter - продолжается до того же места и снова ждет нажатия. И это в цикле. А он останавливается по другому критерию. Вот.
← →
intlex (2009-11-13 21:47) [8]вместо <> поставить =
← →
intlex (2009-11-13 21:48) [9]странно, у меня работает этот пример)
← →
intlex (2009-11-13 21:53) [10]вот попробуй
var state: TKeyboardState;
...
repeat
Application.ProcessMessages;
GetKeyboardState(state);
until ((state[VK_RETURN] and 128) <> 0);
state[VK_RETURN] := 0;
SetKeyboardState(state);
← →
abajun (2009-11-13 22:00) [11]Что-то совсем плохо, сделала так:
for i:= 0 to 15 do begin
Chart1.SeriesList.Series[0].AddXY(i,i*i);
Application.ProcessMessages;
GetKeyboardState(state);
if (state[VK_RETURN] and 128) = 0 then continue;
end;
не работает. то есть не работает, как я хочу - чтобы после addxy останавливался и ждал нажатия enter.
← →
intlex (2009-11-13 22:32) [12]for i:= 0 to 15 do begin
Chart1.SeriesList.Series[0].AddXY(i,i*i);
repeat
Application.ProcessMessages;
GetKeyboardState(state);
until (state[VK_RETURN] and 128) <> 0;
state[VK_RETURN] := 0;
SetKeyboardState(state);
end;
а вот так пробовали?
← →
abajun (2009-11-13 22:50) [13]Пробовала - работает неправильно - после нажатия на ввод for начинает сначала (i = 0), то есть все время рисуется одна и та же точка.
← →
intlex (2009-11-13 23:00) [14]если есть желание, то мне на мыло можно переслать текст проги, я посмотрю
← →
Leonid Troyanovsky © (2009-11-14 00:08) [15]
> abajun (13.11.09 19:53)
> программа в определенном месте останавливалась и ждала ответа
> пользователя, например, нажатия на пробел или ввод.
Покажи ему в оном месте диалог.
ShowMessage, MessageBox or ShowModa.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c