Помогите вызвать окно на передний план
От: Death Украина www.proantivirus.com
Дата: 10.02.02 13:14
Оценка:
В модуле формы описано:



procedure TForm1.FormCreate(Sender: TObject);
begin
application.OnMinimize:=MyMinimize;
application.OnRestore:=MyRestore;
end;

procedure TForm1.MyMinimize(Sender: TObject);
begin
ShowWindow(Application.Handle,sw_Hide);
end;

procedure TForm1.MyRestore(Sender: TObject);
begin
ShowWindow(Application.Handle,sw_ShowNormal);
SetForegroundWindow(Application.MainForm.Handle);
end;



Прога загружается уже минимизированной.
минимизируется в трей (TRxTrayIcon)! .
при двойном нажатии востанавливается отлично.

А теперь задача:
по таймеру (250 мс) проверяется список запущенных задач и если найденна некоторая задача (запуск её) — надо всплыть из трея и показаться на переднем плане.
Использую: Application.Restore
Под 9х всё работает, под 2000 и ХР (может и под НТ4 — непробовал) — только моргает в панели задач и все — наверх выползать и не собирается.
Пробовал включать на форме свойство "StayOnTop" — результат тот-же.

кто, что посоветует?
---
Sergey Bodnya
http://www.proantivirus.com
Re: Помогите вызвать окно на передний план
От: pezz Россия  
Дата: 10.02.02 13:51
Оценка:
Показать окно и на передний план. У меня вроде работает...
ShowWindow(SW_SHOWNORMAL);
SetForegroundWindow(m_hWnd);
Re[2]: Помогите вызвать окно на передний план
От: Death Украина www.proantivirus.com
Дата: 10.02.02 15:30
Оценка:
Здравствуйте pezz, Вы писали:

P>Показать окно и на передний план. У меня вроде работает...

P>
ShowWindow(SW_SHOWNORMAL);
P>SetForegroundWindow(m_hWnd);


ситуация тут такая: при запуске некоего файла, фейс моего приложения должен всплыть и вывести диалог. но суть в том, что до этого времени запускаемое приложение может ещё не успеть нарисовать свою морду... получается, что сначала мы показываемся, а потом уже происходит процесс открытия приложения и оно стаёт первым :)

наверное в таком случае не стоит и продолжать дальше искать решение...
---
Sergey Bodnya
http://www.proantivirus.com
Re[3]: Помогите вызвать окно на передний план
От: SergH Россия  
Дата: 11.02.02 00:49
Оценка:
Здравствуйте Death, Вы писали:

D>ситуация тут такая: при запуске некоего файла, фейс моего приложения должен всплыть и вывести диалог. но суть в том, что до этого времени запускаемое приложение может ещё не успеть нарисовать свою морду... получается, что сначала мы показываемся, а потом уже происходит процесс открытия приложения и оно стаёт первым :)


D>наверное в таком случае не стоит и продолжать дальше искать решение...


Насколько я понимаю (на практике не проверял), функция WaitForInputIdle() позволяет дождаться, пока нужный процесс закончит инициализацию. Если это действительно так, можно сначала немного подождать, а потом вывести своё окно на передний план.
Делай что должно, и будь что будет
Re: Помогите вызвать окно на передний план
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 11.02.02 03:44
Оценка:
Здравствуйте Death, Вы писали:

D>Под 9х всё работает, под 2000 и ХР (может и под НТ4 — непробовал) — только моргает в панели задач и все — наверх выползать и не собирается.

D>Пробовал включать на форме свойство "StayOnTop" — результат тот-же.

D>кто, что посоветует?


Как переместить окно на передний план?
Re: Помогите вызвать окно на передний план
От: Dimer  
Дата: 12.02.02 05:53
Оценка:
Здравствуйте Death, Вы писали:


Не знаю как в Delphi в Builder один из вариантов
void __fastcall TMainForm::Timer1Timer(TObject *Sender)
{
if( i > 5)
{
i=0;
HWND h = GetForegroundWindow();
if(h == Handle) return;
DWORD Strange = GetWindowThreadProcessId(GetForegroundWindow(), NULL);
DWORD My = GetWindowThreadProcessId(Handle, NULL);
if( !AttachThreadInput(Strange, My, true) )
{
Timer1->Enabled = false;
ShowMessage("!!!!!!");
}

Application->Restore();
Application->BringToFront();

if( !AttachThreadInput(Strange, My, false) )
{
Timer1->Enabled = false;
ShowMessage("??????");
}
}
else
{
i++;
}
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.