Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];

Вниз

Как показать тревожное окно поверх окон других приложений.   Найти похожие ветки 

 
LLL   (2002-03-08 21:04) [0]

Моё приложение выходит на передний план во главе
с предупреждающим окном, но
в неактивном состоянии. И переходит в таковое
только после клика мышки на окне.
Это не удобно - юзер не может
нажатием кнопки подтвердить уведомление.

Достигаю этого след. кодом.

procedure TForm1.Timer1Timer(Sender: TObject); // иммитация аварии
begin
ShowWindow(Application.Handle,SW_NORMAL);
SetForegroundWindow(Application.Handle);
Timer1.Enabled:=False;
Form2.ShowModal; // это и есть предупр. окно
Timer1.Enabled:=TRUE;
end;

Весь внимания.


 
Song   (2002-03-09 08:59) [1]

Способов много. Кроме вышеупомянутого SetForeGroundWindow есть ещё BringToFront, SetActiveWindow,SetWindowPos.

ИМХО, а ошибка у тебя в том, что SetForegRoundWindow нужно ставить на onShow того окна, которое выскакивает с тревогой т.е. как я понял - форма2.

А зачем ты делаешь ShowWindow? У тебя прога свёрнута в трей/панель задач?


 
KvORubin   (2002-03-09 09:58) [2]

procedure TForm1.Timer1Timer(Sender: TObject); begin
...
...
Timer1.Enabled:=False; //таймер безповоротно выключен !!!
Form2.ShowModal; //этого не произойдёт !!! (таймер выключен)
Timer1.Enabled:=TRUE; //этого не произойдёт !!! (если только из другой процедуры)

end;


 
Song   (2002-03-09 10:11) [3]

2KvORubin
Почему Вы так думаете? Почему не произойдёт Timer1Timer??? Вы ведь не видели его начальное значение! Я уверен, что на TForm1.Create LLL поставил Timer1.Enabled:=True


 
Anatoly Podgoretsky   (2002-03-09 10:18) [4]

Timer1.Enabled:=False; //таймер временно выключен
Form2.ShowModal; //это произойдёт !!! (таймер не мешает)
Timer1.Enabled:=TRUE; //этого тоже произойдёт

Иожет стоило проверитьЮ прежде чем советовать, книжки почитать


 
LLL   (2002-03-11 21:12) [5]

> Song
Сделал так.
Unit1

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=False;
Form2.ShowModal;
Timer1.Enabled:=TRUE;
end;

procedure TForm2.CreateParams( var Params: TCreateParams );
begin
inherited CreateParams( Params );
with Params do
begin
WndParent:=0; // чтобы появлялось только это одно окно.
end;
end;

procedure TForm2.FormShow(Sender: TObject);
begin
SetForegroundWindow(Handle); // сделал как вы советовали.
end;

Но, окно появляется в неактивном состоянии, если в данный момент
активно другое приложение.Как мне сделать активным моё окно?



 
reonid   (2002-03-11 21:39) [6]

Попробуй так:


var
OldTimeOut: DWORD;
hWnd: Integer;
begin
hWnd := GetForegroundWindow;
if hWnd = Handle then Exit;
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @OldTimeOut, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Pointer(000), 0);
SetForegroundWindow(Handle);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Pointer(OldTimeOut), 0);
end;


 
Suntechnic   (2002-03-12 07:12) [7]

>LLL (11.03.02 21:12)
>Но, окно появляется в неактивном состоянии, если в данный момент
активно другое приложение...

Это специфика работы SetForegroundWindow для Win200. Она несколько отличается от Win98. Обойти это можно различными способами. Или так как советовал reonid © (11.03.02 21:39) или используя AttachThreadInput заставить свой поток "поучавствовать" в механизмах ввода и вызвать там SetForegroundWindow и затем ещё раз AttachThreadInput с последним параметром FALSE


 
Arhelon   (2002-03-12 08:45) [8]

У мня сделано так
procedure TfMain.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle:=Params.ExStyle or WS_EX_TOPMOST;
end;
потом когда те надо отобразить своё приложение делаешь
на главную форму SetFocus, а ужо потом Form2.ShowModal
Думаю должно прокатить


 
LLL   (2002-03-12 19:29) [9]

> reonid.
Спасибо!
Не совсем устойчиво срабатывает,
но нормально!
Спасибо Всем!




Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.073 c
1-80627
KvORubin
2002-03-11 21:27
2002.03.25
Какой КОМПОНЕНТ может просматривать *.GIF (Кроме RxLib и Web Браузера)


14-80688
mobcos
2002-02-08 21:53
2002.03.25
Господа программисты помогите!


3-80450
First
2002-02-26 08:42
2002.03.25
Безопасность интербейсовской базы


6-80645
star
2002-01-04 12:54
2002.03.25
Как уловить момент подключения компьютера к интернету


1-80483
KIR
2002-03-12 15:05
2002.03.25
Изменение шрифта отдельной ячейки TStringGrid a





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский