Показ и скрытие дочерних MDI-окон

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: Neil

…да, я понял: необходим гарантированный показ или скрытие MDI-окна. Гарантированно скрыть можно вызовом ShowWindow(theHandle, SW_HIDE), но в этом случае при показе *НЕ* используется ShowWindow. Вместо это сделайте так:

SetWindowPos(theHandle, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE OR

SWP_NOSIZE OR SWP_SHOWWINDOW);

Далее я обнаружил, что дочерние окна не скрывались/показывались, *ЕСЛИ* для осуществления этих функций использовались оконные компоненты (например, кнопки). Для решения проблемы добавьте следующую строку после вызова SetWindowPos:

WinProcs.SetFocus(TheHandle);

*НЕ* используйте метод SetFocus; SetFocus здесь — Windows API функция.

Дополнение

По моему,все-таки, вызов ShowWindow(theHandle, SW_HIDE)проще, короче и, по крайней мере, в Delphi5 нормально работает с оконными компонентами.

procedure TMainForm.Button1Click(Sender: TObject);

begin

//кнопка для показа/скрытия дочернего MDI-окна

If ShowWindow(form1MDI.Handle, SW_HIDE)=False then

ShowWindow(form1MDI.Handle, SW_SHOW);

end;

С уважением Михаил Шпанер

{/codecitation}

Добавить комментарий