Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.21;
Скачать: CL | DM;

Вниз

Показ нескольких всплывающих окон   Найти похожие ветки 

 
VitGun   (2008-11-09 11:00) [0]

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

for i:=0 to num_events-1 do
begin

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

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


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

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


 
Loginov Dmitry ©   (2008-11-09 12:10) [2]

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


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


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


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


 
VitGun   (2008-11-09 12:11) [3]

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


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

[b]Loginov Dmitry[/b]

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


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

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


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


 
Loginov Dmitry ©   (2008-11-09 12:17) [6]

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


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


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


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


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


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


 
{RASkov} ©   (2008-11-09 12:30) [8]

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


 
VitGun   (2008-11-09 14:11) [9]

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



Страницы: 1 вся ветка

Текущий архив: 2008.12.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
2-1226570443
Morgan128
2008-11-13 13:00
2008.12.21
Чтение файла txt


3-1211369795
Leo
2008-05-21 15:36
2008.12.21
Использование переменной внутри запроса.


2-1226311240
Rav4
2008-11-10 13:00
2008.12.21
postmessage - Как послать сообщение?


2-1226384916
Костик
2008-11-11 09:28
2008.12.21
Почему не работает программа


15-1224652490
Риппер
2008-10-22 09:14
2008.12.21
The instruction at "0x77f5d61b" referenced memory at "0x00000010"