Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ожидание асинхронного события & ShowModal [D5, Win2k]


yaJohn ©   (2002-12-13 17:02:00) 

Есть приложение с двумя формами. В модуле главной формы есть цикл, в котором необходимо организовать ожидание асинхронного события на второй форме.
repeat
.......
Form2.GetInfo;
.....
until false;

Событие на Форм2 - изменение состояния компонента (источником является сообщение Windows);
т.е.
procedure TForm2.GetInfo;
begin
while not MyComponent.Ready do;
end;
не годится.
Можно сделать так:
procedure Form2.GetInfo;
begin
ShowModal;
end;
положить на Форм2 таймер и
TForm2.Timer1OnTimer(sender.....
begin
if MyComponent.Ready then close;
end;

Это работает.
НО! По условиям задачи приложение должно быть постоянно свернуто (желательно в трей) и периодическое выскакивание Форм2 - недопустимо.

Какие будут идеи?

Заранее спасибо.


TTCustomDelphiMaster   (2002-12-13 20:07:00) [1]

Можно такой вариант предложить
while CheckEvent() do
Application.ProcessMessages;


yaJohn   (2002-12-13 19:59:00) [2]

Опс! форм2.топ=-1234 - ЧУДЕСНО!!!
И как до самого не дошло? 8)
Сеньксы и регардсы!


yaJohn   (2002-12-13 19:43:00) [3]

Действительно, вторая форма не обязательна. Но мне с ней лучше.
Сформулируем вопрос по другому: в результате прихода Windows-сообщения один из компонентов генерирует событие.
Имеется глухой цикл. Нужно приостановить этот цикл до возникновения события.
repeat
...........
WaitEvent;
<----------------Сюда попадаем только ПОСЛЕ события
...........
until false;

Вопрос именно в реализации WaitEvent.
ShowModal используется именно потому, что вплоть до Close выполнение кода из которого был вызов ShowModal останавливается, но при этом продолжается обработка сообщений.


TTCustomDelphiMaster   (2002-12-13 19:32:00) [4]

Не понял в чем проблема, но могу предложить 2 варианта
1. обойтись без второй формы, если периодическое выскакивание Форм2 - недопустимо, зачем ее показывать?
2. Выводить форму2 за пределами экрана.


yaJohn   (2002-12-13 19:07:00) [5]

Пусть модератор удалит эту ветку навсегда.
Бросаю работу и сажусь писать проги, которые сначала сворачиваются к "часикам", потом выясняют на какой именно из 17 кнопок нажал юзер (кнопки буду создавать только в рантайме), после чего сами себя удаляют. Предварительно узнав адрес клиента со стороны сервера до коннекта.
Хоть вопросы стану задовать, на которые кто-то отвечает.


Наверх

Титульная страница Поиск, карта сайта Написать письмо