Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

BOTTOMMOST OKHO [D3, Win2k]


Шубин С. ©   (2004-06-01 23:14:00) 

Здравствуйте!
Мне нужно сделать окно, которое должно находиться под всеми окнами, даже если оно активно. Я нашел вот что:

procedure WMWindowPosChanging(var Message:TWMWindowPosChanging);
message WM_WINDOWPOSCHANGING;
//а вот это в implementation
procedure TForm1.WMWindowPosChanging(var Message:TWMWindowPosChanging);
begin
with message.WindowPos^ do flags:=flags or SWP_NOZORDER;
inherited;
end;

НО! Как это сделать без VCL?
Заранее благодарен, Шубин С.


DVM   (2004-06-02 20:49:00) [1]


> ХВНД окна на таскбаре НЕ СОВПАДАЛ с ХВНД видимого окна.
> Может быть поэтому эта ф-ция и не работает для ВЦЛ.

Да, я знаю, из-за скрытого окна объекта Application она не работает.

> Прошу прощения за ТРАНСЛИТ. У меня почему-то в ХР раскладка
> перестала переключаться, а копи/пасте задолбался делать...

PuntoSwitcher поставь.:) Глюк часто возникает, когда с эксплорером экспериментируют.


Шубин С.   (2004-06-02 20:28:00) [2]

Благодарю! А с VCL она не работает может быть вот почему:
Я написал приложение, которое показывает список окон, которые находятся на таскбаре в виде кнопок. Всё бы хорошо, но мне нужно было определить еще и активное приложение. Так получилось вот что: какая-то ВинАПИ функция возвращает ХВНД активного окна, и для не-ВЦЛ приложений этот ХВНД совпадал с тем ХВНД, окно которого было на таскбаре, а для ВЦЛ ХВНД окна на таскбаре НЕ СОВПАДАЛ с ХВНД видимого окна. Может быть поэтому эта ф-ция и не работает для ВЦЛ.
З.Ы.
Прошу прощения за ТРАНСЛИТ. У меня почему-то в ХР раскладка перестала переключаться, а копи/пасте задолбался делать...


DVM   (2004-06-02 20:11:00) [3]


> Что она будет делать при запущенном Эксполрером?

Ничего не будет. Без эксплорера закрепит окно на заднем плане.
С VCL не работает, кстати.


Шубин С.   (2004-06-02 19:33:00) [4]

To DVM:
Большое спасибо за ответ.
Сейчас проверю.
А что делает функция SetShellWindow?
Что она будет делать при запущенном Эксполрером?
А без него?
З.Ы.
Простите за назойливость...


Sceptic   (2004-06-02 19:29:00) [5]

To Gero:
Я вот тоже хочу узнать...


DVM   (2004-06-02 19:22:00) [6]


> А SetShellWindow я почему-то в MSDN'e не нашел, хотя многие
> на неё отсылают..

 function SetShellWindow(hWnd: HWND): dword; stdcall; external 'User32.dll' name 'SetShellWindow';


DVM   (2004-06-02 19:08:00) [7]

WM_WINDOWPOSCHANGING:
begin
 PWindowPos(lParam)^.flags:= PWindowPos(lParam)^.flags or SWP_NOZORDER;
 Result:=0;
end


Gero   (2004-06-02 18:08:00) [8]


> Не поверю, что глубокоуважаемые Мастера Delphi не знают,
> что на самом деле делает VCL...

А Вы раскроете мне эту тайну?
Что же на самом деле делает VCL?
Я хоть и не мастер, но все равно интересно.


Sceptic   (2004-06-02 18:03:00) [9]

Не поверю, что глубокоуважаемые Мастера Delphi не знают, что на самом деле делает VCL...


Шубин С.   (2004-06-02 17:31:00) [10]

Так же - не получается.
( я пробовал вот как:

WM_WINDOWPOSCHANGING:
 WINDOWPOS * ppos = (WINDOWPOS*) lparam;
 ppos->flags |= SWP_NOZORDER;

Не работает. Поэтому такой вопрос и задал.
)
А SetShellWindow я почему-то в MSDN'e не нашел, хотя многие на неё отсылают..


DVM   (2004-06-01 23:49:00) [11]

Да так же. Вы меня извините, но раз вы пишете на API, то в сообщениях надо же разбираться чуть чуть.
А еще советую поискать в сторону SetShellWindow()


DVM   (2004-06-01 23:47:00) [12]

Да так же. Вы меня извините, но раз вы пишете на API, то в сообщениях надо же разбираться чуть чуть.
А еще советую поискать в сторону SetShellWindow()


Наверх

Титульная страница Поиск, карта сайта Написать письмо