![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как заставить функцию ждать нажатия кнопки [D6, Win95/98, WinME, NT4, Win2k, WinXP]
FPS © (2002-03-27 12:09:00)Народ подскажите как заставить функцию ждать нажатия кнопки (ввода текста и т.д).
Вызывается функция, которая показывает окно, ждет пока пользователь введет текст и нажмет кнопку. Функция должна продолжить работу после нажатия кнопки. Пробовал через CreateEvent и ждать в функции нажатия кнопки WaitForSingleObject - окно не перерисовывается :( ставить таймаут - тоже не хорошо. Такое подозрение, что это можно сделать намного проще, но не знаю как...
ЗЫ. repeat until Form1.boolvar - тоже не выход.
Юрий Зотов (2002-03-28 20:40:00) [1]> Пробовал через CreateEvent и ждать в функции нажатия кнопки WaitForSingleObject
Это хорошая идея, только надо использовать MsgWaitForMultipleObjects. Тогда ожидание Event пойдет с нормальной обработкой сообщений. И процессор не будет перегружаться лишними циклами.
FPS (2002-03-28 20:33:00) [2]Alx2
>С другой стороны, кто мешает сделать еще одно окошко с TEdit и двумя кнопками
Условие задачи :) Просто мне так прийдется многое переписывать.
Alx2 (2002-03-28 14:32:00) [3]>yaJohn © (28.03.02 13:10)
>Все тот же ShowModal.
Так я уже писал про это - не подходит. Кажется, потому-что окошко не надо закрывать.
С другой стороны, кто мешает сделать еще одно окошко с TEdit и двумя кнопками [Ok,Cancel] и модально его показать? То есть все-таки перейти к нормальной работе на базе Dialog.
yaJohn (2002-03-28 13:10:00) [4]Уже сделано. Цикл - цикл обработки сообщений. Все тот же ShowModal.
В приведеннойформулировке задачи это очевидное и правильноерешение.
Alx2 (2002-03-28 12:37:00) [5]Может, при нажатии кнопки устанавливать какой-то флаг?
Этот флаг проверяем в функции в цикле (в котором не забываем ProcessMessages). Как только флаг установлен (то есть нажата кнопка) - вываливаемся из цикла и забираем имя...
FPS (2002-03-28 12:09:00) [6]1.Окно не закрывается
2.while чего-то это цикл, жрущий ресурсы без надобности (Sleep внутри - форма повисает)
3.Как изменить логику программы не знаю - из DLL вызывается функция, которой надо имя пользователя после нажатия кнопки.
(При этом если окно уже создано- его не создаю заново).Функция имеет строго определенное название. Ну - будут идеи.
Anatoly Podgoretsky
Send{Post}Message- не понял кому и чего пост??
Anatoly Podgoretsky (2002-03-27 21:09:00) [7]Send{Post}Message
Glonia Zbanov (2002-03-27 15:09:00) [8]while [событие] do
Application.ProcessMessages;
это из А.Я.Архангельского
Alx2 (2002-03-27 14:55:00) [9]>Вызывается функция, которая показывает окно,
>ждет пока пользователь введет текст и нажмет кнопку.
Так это же описание работы диалогового окошка (метод ShowModal). На нажатие кнопки ставим ModalResult := mrOk и окошко закроется и ShowModal вернет mrOk. Если это не то, то где же сидит разница?
panov (2002-03-27 14:44:00) [10]Наверняка логику программы можно изменить так, что такого изврата не потребуется.
FPS (2002-03-27 14:38:00) [11]НЕТ - не подходит
Alx2 (2002-03-27 12:10:00) [12]ShowModal?