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

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

Как узнать, что мое окно находится над другим? [D6, D7, Win2k, WinXP]


Страницы:   1 2

dmk ©   (2005-01-06 01:00:00) 

Возможно ли это сделать без перечисления окон? (GetNextWindow и т.д.)


dmk   (2005-01-08 12:36:00) [1]

>Piter ©   (07.01.05 19:33) [22]
Да.

http://dmk.interwave.ru/files/Z-Order_Sample.zip
Вот примерчик. Если нужно. Сделан в D7, хотя в D6 тоже должен компильнуться.


Piter   (2005-01-07 19:33:00) [2]

ты одно скажи - окно, которое поверх все окон (даже если оно не активно), в Z последовательности первое?


dmk   (2005-01-07 17:49:00) [3]

>Но разве в Z последовательности учитывается,
>что окно поверх всех?
На сколько я понял окно просто находится в списке(Z-Order) под
индексом опиывающим его положение относительно других окон.
А когда происходит выбор активного окна, то индексы у этих окон меняются согласно новому положению и происходит пересортировка
в Z-Order'е.
Щя напишу пример в котором постараюсь отобразить поведение
Z-Order'а.=)


Piter   (2005-01-07 15:05:00) [4]

dmk ©   (07.01.05 3:00) [15]

я понимаю, что перечисляются все. Но разве в Z последовательности учитывается, что окно поверх всех? Там, имхо, учитываются только последние обращения.
Иными словами, окно может быть поверх всех остальных, но в получающейся Z последовательности оно будет в самом низу...


dmk   (2005-01-07 15:01:00) [5]

Около 2-х лет. Часов по 5 в неделю.


GanibalLector   (2005-01-07 14:03:00) [6]

2 dmk ©   (07.01.05 13:47) [17]
М-да...все по серьезному.
Сколько времени пишешь?


dmk   (2005-01-07 13:47:00) [7]

http://dmk.interwave.ru/files/InColor_src.zip482Kb
InfoPanel.pas
Function EnumWindowsProc(WindowHandle:HWND; Data:Pointer):Bool;stdcall;
Procedure TImageForm.RepaintImageAfterWindows(fX, fY, fPrevX, fPrevY, DeltaX, DeltaY: Integer; WndHandle:hWND);
Procedure TImageForm.RepaintTopFormIntersect(ImageX,ImageY:Integer; PrevImageX,PrevImageY, DeltaX,DeltaY:Integer; IntersectWND:hWND);
и т.д.


GanibalLector   (2005-01-07 03:28:00) [8]

>Могу дать код если надо
Ну,если Вы так добры,то почему бы и нет.Спасибо ;)


dmk   (2005-01-07 03:00:00) [9]

Так все окна перечисляются =)
Даже Диспетчер задач.
Могу дать код если надо


Piter   (2005-01-07 02:06:00) [10]

Усе работает говорите...

А например окна, которые поверх всех окон?
Или там терминальные окна...


dmk   (2005-01-07 00:45:00) [11]

>Ещё можно WindowFromPoint для каждой точки
Это не нужно.

>Однако проверил: стабильно cверху вниз.
>Откуда взял это - не помню :-(
А вот это правильно. Реально сверху вниз =)
Усё работает. Respect.


GuAV   (2005-01-06 02:36:00) [12]

Ещё можно WindowFromPoint для каждой точки


dmk   (2005-01-06 02:30:00) [13]

>При чём скролинг ? Вроде как GetUpdateRect вернёт нужно ли
>рисовать или нет.
У меня функция более универсальная. Она проверяет любое
затирание, в любом месте окна и при любом изменении
(скроллинге, изменении размеров окна, наезде окна на окно
и т.д.).

>Таки и я не нашел. Однако проверил: стабильно cверху вниз.
>Откуда взял это - не помню :-(
Завтра проверю. Если так, то уже легче. Tnx


GuAV   (2005-01-06 02:20:00) [14]


>>GetUpdateRect
> Вообще не реагирует на изменения в моем случае.

При чём скролинг ? Вроде как GetUpdateRect вернёт нужно ли рисовать или нет.

>В MSDN по этому поводу ни слова =(
Таки и я не нашел. Однако проверил: стабильно cверху вниз. Откуда взял это - не помню :-(


dmk   (2005-01-06 02:03:00) [15]

>В MSDN по этому поводу ни слова =(
По крайней мере в описании функций
EnumWindows, EnumDesktopWindows и EnumWindowsProc.


dmk   (2005-01-06 02:01:00) [16]

>GetUpdateRect
Вообще не реагирует на изменения в моем случае.
Т.е. она не реагирует на скроллинг содержимого окна.

>EnumWindows перечисляет с учётом Z-order.
В MSDN по этому поводу ни слова =(
Но если это так, то с откуда идет перечисление?
Сверху или снизу?


GuAV   (2005-01-06 01:54:00) [17]


>Думаю EnumWindowsProc надо убирать и делать
> перечисления с помощью GetNextWindow.

???

EnumWindows перечисляет с учётом Z-order.


dmk   (2005-01-06 01:47:00) [18]

Ну вопрос можно поставить еще так:
Как перечислить все окна находящиеся над моим?
Думаю EnumWindowsProc надо убирать и делать
перечисления с помощью GetNextWindow.
Если не прав - поправьте.

>GetNextWindow и т.д
>а это вряд ли поможет
Почему?


GuAV   (2005-01-06 01:46:00) [19]

GetUpdateRect


dmk   (2005-01-06 01:36:00) [20]

>некоторые которые не подходят под следующее условие
Вернее подходят, но перерисовывать за ними не нужно.


Страницы:   1 2

Наверх

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