Текущий архив: 2005.01.09;
Скачать: CL | DM;
Вниз
Всплывающее окно Найти похожие ветки
← →
Zeqfreed © (2004-12-20 17:52) [0]Здравствуйте, у меня такая проблема. Мне в программе необходимо сделать всплывающее окно с дополнительной информацией, которое должно само исчезать через некоторое время. Я реализовал это пока так: эти окном служит форма (не главная), на ней 2 таймера. Один каждые 250 мс помещает ей на передний план (fsStayOnTop не работает), а второй срабатывает через определенный интервал и закрывает форму. Ессно, при таком раскладе, во время того как это окошко показывается с остальными работать неаозможно без затруднений; например, кликая по иконке моего приложения в трее появляется и тут же исчезает меню.
Вот, в общем-то и проблема. Вопрос в том, как можно нормально реализовать то, что мне нужно? В частности, хотя бы как заставить fsStayOnTop работать? Что посоветуете, мастера?
← →
DVM © (2004-12-20 17:59) [1]
> Что посоветуете,
SetWindowPos()
← →
Zeqfreed © (2004-12-20 18:07) [2]DVM © (20.12.04 17:59) [1]
Спасибо! никогда бы не догадался что её используют в таких случаях ))
← →
DVM © (2004-12-20 19:06) [3]Именно в таких случаях и используют. И еще WM_WINDOWPOSCHANGING в придачу. Смотрите внимательно флаги.
← →
Zeqfreed © (2004-12-20 20:50) [4]Эх, блин. С начала у меня все получилось. Но потом я исправил код, и все перестало работать, вернуть то что было, к сожалению не могу =(. Если не трудно, подскажите, пожалуйста, правельную последовательность выполнения необходимых действий для выполнения задачи! Что-то я с WM_WINDOWPOSCHANGING не могу разобраться.
← →
_snake_ © (2004-12-20 21:44) [5]А вот эта строчка поможет реализовать анолог StayOnTop
SetWindowPos(self.Handle , HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)
← →
Zeqfreed © (2004-12-20 22:11) [6]В простейшем приложении (2 формы, 1 кнопка на первой форме меняет Visible второй) эта строка работает (работала и когда я только попробовал её написать первый раз). Потом я сделал изменения, как уже упомянул, и эта строка теперь не действует. Не могли бы вы перечислить причины, по которым такая строка может потерять силу? из-за каких действий с формами?
← →
DVM © (2004-12-20 22:17) [7]"потерять силу" строка может только в одном случае - есть обработчик WM_WINDWPOSCHANGING :)
Подробнее написать сейчас не могу - крайне неудобно писать на PocketPC
← →
Zeqfreed © (2004-12-20 22:20) [8]А всякие BringToFront и вызовы SetWindowsPos с другими параметрами?
← →
DVM © (2004-12-20 22:42) [9]естесстенно повторные вызовы setwindowpos с другими параметрами могут испортить нужное поведение окна.
Короче, завтра напишу как надо сделать.
← →
Zeqfreed © (2004-12-20 22:51) [10]Фуф, вроде рахобрался. Сделал так:
...
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:57) [11]абсолютно то же я и имел в виду.
← →
Zeqfreed © (2004-12-21 13:44) [12]DVM © (20.12.04 22:57) [11]
Да, спасибо, большое, что подопнули меня к цели ;)
Страницы: 1 вся ветка
Текущий архив: 2005.01.09;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.034 c