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

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

Показ нескольких всплывающих окон [D7, XP]


VitGun ©   (2008-11-09 11:00:00) 

В приложении необходимо показать всплывающее окошко (как в qip). сию проблему решил при помощи стороннего компонента KMAlert, но у меня может быть несколько событий которые нужно показать. Пробовал так

for i:=0 to num_events-1 do
begin

 KMAlert.PopUp; //это показываем окошко
 ....
end;

но ведь нужно чтобы окошко провисело положенные 5 секунд на экране, а потом показалось следующее. Если вставить sleep(5000), то так оно и происходит, но с приложением ничего нельзя делать. Как быть в этой ситуации и как организовать показ всплывающих окон без заморозки приложения?


VitGun   (2008-11-09 14:11:00) [1]

Сделал через поток (TThread), как советовал Loginov Dmitry. Все работает. спасибо огромное.


{RASkov}   (2008-11-09 12:30:00) [2]

может как-нибудь так:
while i < num_events-1 do
begin
Application.ProcessMessage;
while KMAlert. показываетсяthen Continue; //Есть наверное какое-то свойство такое нужное)
KMAlert.PopUp; //это показываем окошко которое само закроется через 5 сек...
INC(i);
end;


Сергей М.   (2008-11-09 12:19:00) [3]


> ведь нужно чтобы окошко провисело положенные 5 секунд


> компонент самвисит 5 секунд


Так а чего ж пыжиться, если он сам это умеет ?


Loginov Dmitry   (2008-11-09 12:17:00) [4]

> так работает, но приложение нельзя закрыть пока не прошел
> показ сообщений


что межает завести дополнительную логическую переменную, устанавливать ее в True при закрытии окна, а в том цикле проверяеть ее, и если она равна True, то прерывать цикл?


Loginov Dmitry   (2008-11-09 12:15:00) [5]

> примерчик не подкинете?


примерчик вчера давали к этой же конференции.


VitGun   (2008-11-09 12:13:00) [6]

[b]Loginov Dmitry[/b]

1. так работает, но приложение нельзя закрыть пока не прошел показ сообщений
2. получается таймер в таймере?
3. с потоками не работал ниразу. примерчик не подкинете?


VitGun   (2008-11-09 12:11:00) [7]

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


Loginov Dmitry   (2008-11-09 12:10:00) [8]

> Если вставить sleep(5000), то так оно и происходит, но с
> приложением ничего нельзя делать.


Конечно нельзя! Sleep() останавливает поток, пока не пройдет указанное время. При этом окна не могут реагировать на действия пользователя.


> Как быть в этой ситуации и как организовать показ всплывающих
> окон без заморозки приложения?


Есть по крайнем мере 3 варианта (на выбор):
1 - организовать задержку с помощью комбинации Sleep() + Application.ProcessMessages (при этом приложение не будет "тормозить")
2 - использовать компонент TTimer
3 - реализовать логику с использованием дополнительного потока (TThread)


Сергей М.   (2008-11-09 12:06:00) [9]

На то есть таймер


Наверх

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