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