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" — результат тот-же.
ситуация тут такая: при запуске некоего файла, фейс моего приложения должен всплыть и вывести диалог. но суть в том, что до этого времени запускаемое приложение может ещё не успеть нарисовать свою морду... получается, что сначала мы показываемся, а потом уже происходит процесс открытия приложения и оно стаёт первым :)
наверное в таком случае не стоит и продолжать дальше искать решение...
Здравствуйте Death, Вы писали:
D>ситуация тут такая: при запуске некоего файла, фейс моего приложения должен всплыть и вывести диалог. но суть в том, что до этого времени запускаемое приложение может ещё не успеть нарисовать свою морду... получается, что сначала мы показываемся, а потом уже происходит процесс открытия приложения и оно стаёт первым :)
D>наверное в таком случае не стоит и продолжать дальше искать решение...
Насколько я понимаю (на практике не проверял), функция WaitForInputIdle() позволяет дождаться, пока нужный процесс закончит инициализацию. Если это действительно так, можно сначала немного подождать, а потом вывести своё окно на передний план.
Здравствуйте Death, Вы писали:
D>Под 9х всё работает, под 2000 и ХР (может и под НТ4 — непробовал) — только моргает в панели задач и все — наверх выползать и не собирается. D>Пробовал включать на форме свойство "StayOnTop" — результат тот-же.
D>кто, что посоветует?
Не знаю как в 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("!!!!!!");
}