![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Показ нескольких всплывающих окон [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]На то есть таймер