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

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

Всплывающее окно


Zeqfreed ©   (2004-12-20 17:52:00) 

Здравствуйте, у меня такая проблема. Мне в программе необходимо сделать всплывающее окно с дополнительной информацией, которое должно само исчезать через некоторое время. Я реализовал это пока так: эти окном служит форма (не главная), на ней 2 таймера. Один каждые 250 мс помещает ей на передний план (fsStayOnTop не работает), а второй срабатывает через определенный интервал и закрывает форму. Ессно, при  таком раскладе, во время того как это окошко показывается с остальными работать неаозможно без затруднений; например, кликая по иконке моего приложения в трее появляется и тут же исчезает меню.

Вот, в общем-то и проблема. Вопрос в том, как можно нормально реализовать то, что мне нужно? В частности, хотя бы как заставить fsStayOnTop работать? Что посоветуете, мастера?


Zeqfreed   (2004-12-21 13:44:00) [1]

DVM ©   (20.12.04 22:57) [11]
Да, спасибо, большое, что подопнули меня к цели ;)


DVM   (2004-12-20 22:57:00) [2]

абсолютно то же я и имел в виду.


Zeqfreed   (2004-12-20 22:51:00) [3]

Фуф, вроде рахобрался. Сделал так:

...

private
procedure WMWINDOWPOSCHANGING(var Msg : TWMWINDOWPOSCHANGING); message WM_WINDOWPOSCHANGING;


...

procedure TfrmNotify.FormCreate(Sender: TObject);
begin
SetWindowPos(self.Handle , HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE);
end;


...

procedure frmNotify.WMWINDOWPOSCHANGING(var Msg : TWMWINDOWPOSCHANGING); message WM_WINDOWPOSCHANGING;
begin
Msg.WindowPos^.flags := Msg.WindowPos^.flags + SWP_NOZORDER;
end;


DVM   (2004-12-20 22:42:00) [4]

естесстенно повторные вызовы setwindowpos с другими параметрами могут испортить нужное поведение окна.
Короче, завтра напишу как надо сделать.


Zeqfreed   (2004-12-20 22:20:00) [5]

А всякие BringToFront и вызовы SetWindowsPos с другими параметрами?


DVM   (2004-12-20 22:17:00) [6]

"потерять силу" строка может только в одном случае - есть обработчик WM_WINDWPOSCHANGING :)
Подробнее написать сейчас не могу - крайне неудобно писать на PocketPC


Zeqfreed   (2004-12-20 22:11:00) [7]

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


_snake_   (2004-12-20 21:44:00) [8]

А вот эта строчка поможет реализовать анолог StayOnTop
SetWindowPos(self.Handle , HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)


Zeqfreed   (2004-12-20 20:50:00) [9]

Эх, блин. С начала у меня все получилось. Но потом я исправил код, и все перестало работать, вернуть то что было, к сожалению не могу =(. Если не трудно, подскажите, пожалуйста, правельную последовательность выполнения необходимых действий для выполнения задачи! Что-то я с WM_WINDOWPOSCHANGING не могу разобраться.


DVM   (2004-12-20 19:06:00) [10]

Именно в таких случаях и используют. И еще WM_WINDOWPOSCHANGING в придачу. Смотрите внимательно флаги.


Zeqfreed   (2004-12-20 18:07:00) [11]

DVM ©   (20.12.04 17:59) [1]

Спасибо! никогда бы не догадался что её используют в таких случаях ))


DVM   (2004-12-20 17:59:00) [12]


> Что посоветуете,

SetWindowPos()


Наверх

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