Окно на передний план

Где то там
Дата: 20.11.2007 20:15:23
Почему данный код может не исполняться? То есть, окно не выходит на передний план.

  // закрывем окно предзагрузки  
  SendMessage(hPreLoad, WM_COMMAND, IDOK, 0);
  SetWindowPos(Wnd, 0, PosX, PosY, 0, 0, SWP_NOACTIVATE or SWP_NOSIZE);
  SetForegroundWindow(Wnd);

  if hThread <> 0 then
  begin
    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hThread);
  end;

  SetFocus(Wnd);
Где то там
Дата: 20.11.2007 21:21:25
Оказывается у данной проблемы длинная история. Гейтц как всегда накосячил, но имеется недокументированная функция (в Дельфи), которая все же выводит окно на передний план:

procedure SwitchToThisWindow(Wnd : HWND; B : Bool); stdcall; external user32 Name 'SwitchToThisWindow';
Где то там
Дата: 20.11.2007 21:59:07
Нашел более удобное решение:

  mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
  mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
  SetForegroundWindow(Wnd);
Kotъ-Begemotъ
Дата: 20.11.2007 23:54:21
Ничего не понял, но может быть спьяну :о) Если модальное окно не перекрывает окна у которого стоит StayOnTop, то это известная оошибка, и на это окно (которое StayOnTop) надо написать на
OnFormPaint
 Application.RestoreTopMosts;
и всё...
dsoft
Дата: 21.11.2007 01:52:42
А если программа на WinAPI, тогда что? То же Application.RestoreTopMosts?

========================
Обвиняя других, ты признаешься в своей слабости.
Где то там
Дата: 21.11.2007 02:23:04
Да программа на WinAPI. Ответ Кота-бегемота, хоть и запоздавший в корне неверен, программа не имеет флаг TOPMOST (не модальное) - это обычное окно. И на передний план оно выходит нормально, если не использовать нить, а вот с ней такие фокусы и происходят. Но решение найдено и дальнейшее обсуждение считаю излишним.