Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.023 c
4-1100755551
tyuiop
2004-11-18 08:25
2005.01.09
Вызов CreateProcess


14-1103632846
juice
2004-12-21 15:40
2005.01.09
DelphiWorld


8-1096566017
ser_ega
2004-09-30 21:40
2005.01.09
CopyRect


1-1103479313
redlord
2004-12-19 21:01
2005.01.09
ищу компонент типа hexview


14-1103631558
Vaitek
2004-12-21 15:19
2005.01.09
Ааа вот вы где все!