Функция BringWindowToTop() наоборот или как поместить окно на задний план
Ты хочешь применять ко всем окнам или только к окнам своей программы
Ради имнтереса - для чего
Ты хочешь применять ко всем окнам или только к окнам своей программы
Нет, только к своей программе (в том то и дело, что только к ней). Грубо говоря, нужно, чтобы при активации окна оно не активировалось :) и не вылезало на передний план... Прям как с десктопом (ведь когда мы кликаем на нем оно у нас не вылазиет поверх всех!)
отлавливай сообщение WM_ACTIVATE и если его славливает окно которое должно стоять и недергаться, то в обработке сообщения отдавай фокус главному окну
Если MDI - то ничего не получиться, иначе
отлавливай сообщение WM_ACTIVATE и если его славливает окно которое должно стоять и недергаться, то в обработке сообщения отдавай фокус главному окну
Пробовал. WM_ACTIVATE возвращает хэндл 0. Отлавливал через WindowProc, т.к. Application->OnMessage не ловит это сообщение. Есть другие варианты?
Вот тебе пример - работает как ты хотел. Builder6
Спасибо за пример, но это не то, что надо... Всеравно при клике на заблокированной форме оно выползает поверх остальных. Может нужно отлавливать не WM_ACTIVATE, а что-то, что отвечает за перенос окна на самый верх Z-order'а?
Да нет, заблокированая форма моргнет а потом падае за главную форму. Другое дело что она перекрывает другие формы. А не проще ли сделать форму Hide и не мучиться. Зачем пользователю видеть окно к котороему он не может получить доступ?
Нет. Метод hide тут совсем не подойдет. Нужно создать свой "робочий стол". В WinAPI нашел ф-цию CreateDesktop и остальный зависимымые ф-ции. Может её стоит юзать?
Идея следующая
FormStyle=StayOnTop
BorderStyle=bsNone
При запуске растягивал эту форму на весь экран и все - получалось некоторое подобие DeskTop. Осталось только отловить нажание Alt+Tab, Скрыть из Ctrl+Alt+Del И спратать меню "ПУСК". Как это сделать очень хорошо расказано в инете
Я работаю с окнами разных приложений!
И мое приложение состоит только из одного окна.... Вот его то и нужно сделать ниже всех и убрать его активизацию, чтобы оно не вылазило поверх остальных ПРИЛОЖЕНИЙ ЗАПУЩЕННЫХ В СИСТЕМЕ! :-) Вот в чем вопрос!
читайте предыдущие посты внимательней. Эта ф-ция уже обсуждалась и она не дает требуемого результата
http://www.delphiworld.narod.ru/desktop.html
Ну и из Helpa
[COLOR=darkblue]Функция BringWindowToTop помещает указанное окно в вершину Z-последовательности. Если окно является окном верхнего уровня – оно активизируется. Если окно представляет собой дочернее окно – активизируется родительское окно верхнего уровня.
BOOL BringWindowToTop(
HWND hWnd // дескриптор окна
);
Параметры
hWnd – идентифицирует окно, помещаемое в вершину Z-последовательности.
Возвращаемые значения
В случае успеха возвращается ненулевое значение.
В случае неудачи возвращается нуль. Для получения дополнительной информации вызовите функцию GetLastError.
Комментарии
Используйте функцию BringWindowToTop для вывода окна, частично или полностью закрытого другими окнами, на передний план.
Результат вызова этой функции похож на результат вызова SetWindowPos для изменения позиции окна в Z-последовательности, но вызов BringWindowToTop не делает указанное окно окном верхнего уровня.
Если приложение не находится на переднем плане, и необходимо сделать его приложением переднего плана, вызовите функцию SetForegroundWindow.
См. также
SetWindowPos, SetActiveWindow, SetForegroundWindow.[/COLOR]
Ну и еще
[COLOR=orangered]Функция SetForegroundWindow помещает поток, создавший указанное окно на передний план и активизирует окно. Ввод с клавиатуры направляется в окно.
BOOL SetForegroundWindow(
HWND hWnd // дескриптор окна, помещаемого на передний план
);
Параметры
hWnd – идентифицирует окно, которое должно быть активизировано и помещено на передний план.
Возвращаемые значения
В случае успеха возвращается ненулевое значение.
В случае неудачи возвращается нуль. Для дополнительной информации об ошибке вызовите функцию GetLastError.
Комментарии
Окном переднего плана является окно, находящееся в вершине Z-последовательности. Это окно, с которым пользователь работает в настоящий момент. В среде с вытесняющей многозадачностью вы должны позволять пользователю самому распоряжаться, какое окно является активным. Тем не менее, приложение может вызвать SetForegroundWindow, если ему необходимо поместить себя на передний план для отображения критической ошибки или информации, которая требует немедленного рассмотрения пользователем. Хорошим примером является отладчик, когда он попадает на точку останова.
Система предоставляет потоку, создавшему окно переднего плана несколько более высокий приоритет, чем другим потокам.
См. также
GetForegroundWindow.[/COLOR]
Ну и еще
[COLOR=indigo]Функция ShowWindow устанавливает режим отображения заданного окна.
BOOL ShowWindow(
HWND hWnd, // дескриптор окна
int nCmdShow // режим отображения окна
);
Параметры
hWnd – идентифицирует окно.
nCmdShow – определяет, как будет отображаться окно. Этот параметр не учитывается, если приложение первый раз вызывает функцию ShowWindow, а программа, запустившая данное приложение, предоставила структуру типа STARTUPINFO. В других случаях, когда функция ShowWindow вызывается первый раз, значение параметра nCmdShow должно быть равно значению, переданному функции WinMain ее параметром nCmdShow. В последующих вызовах ShowWindow, параметр nCmdShow может принимать одно из следующих значений:
Значение Пояснение
SW_HIDE Скрывает заданное окно и активизирует другое окно.
SW_MAXIMIZE Максимизирует окно.
SW_MINIMIZE Минимизирует заданное окно и активизирует следующее окно верхнего уровня в Z-упорядоченности.
SW_RESTORE Активизирует и отображает окно. Если окно минимизировано или максимизировано, то Windows восстанавливает его первоначальные размеры и положение. Приложение должно задать этот флаг, восстанавливая минимизируемое окно.
SW_SHOW Активизирует окно и отображает его в соответствии с текущим положением и размерами.
SW_SHOWDEFAULT Устанавливает режим отображения в соответствии с флагом SW_, определенном в структуре типа STARTUPINFO, переданной функции CreateProcess программой, запустившей данное приложение.
SW_SHOWMAXIMIZED Активизирует окно и отображает его максимизированным.
SW_SHOWMINIMIZED Активизирует окно и отображает его минимизированным.
SW_SHOWMINNOACTIVE Минимизирует окно. Активное окно остается активным.
SW_SHOWNA Отображает окно в его текущем состоянии. Активное окно остается активным.
SW_SHOWNOACTIVATE Отображает окно в соответствии с его последними размерами и положением. Активное окно остается активным.
SW_SHOWNORMAL Активизирует и отображает окно. Если окно минимизировано или максимизировано, Windows восстанавливает его начальные размеры и положение. Приложение должно задать этот флаг, отображая окно в первый раз.
Возвращаемые значения
Если окно перед вызовом функции было видимым, то возвращается ненулевое значение.
Если окно перед вызовом функции было скрытым, то возвращается нуль.
Комментарии
Первый раз, когда приложение вызывает функцию ShowWindow, оно использует параметр nCmdShow функции WinMain в качестве параметра nCmdShow функции ShowWindow. Последующие вызовы ShowWindow должны использовать одно из значений из приведенного выше списка вместо значения параметра nCmdShow функции WinMain.
Значение nCmdShow не учитывается при первом вызове функции ShowWindow, если программа, запустившая данное приложение, задала информацию для запуска в структуре типа STARTUPINFO. В этом случае, ShowWindow для отображения окна использует информацию из этой структуры. При последующих вызовах приложение должно вызывать ShowWindow со значением параметра nCmdShow, установленным в SW_SHOWDEFAULT для использования информации для запуска, предоставленной программой, запустившей данной приложение. Например, Диспетчер Программ (Program Manager) определяет, что приложения запускаются с минимизированным главным окном. Такое поведение предназначено для следующих ситуаций:
Приложения создают свое собственное главное окно, вызывая функцию CreateWindow с установленным флагом WS_VISIBLE.
Приложения создают свое собственное главное окно, вызывая функцию CreateWindow с неустановленным флагом WS_VISIBLE, вызывая впоследствии ShowWindow с флагом установленным SW_SHOW.
См. также
CreateProcess, CreateWindow, ShowOwnedPopups, STARTUPINFO, WinMain.[/COLOR]