![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать, что мое окно находится над другим? [D6, D7, Win2k, WinXP]
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]>некоторые которые не подходят под следующее условие
Вернее подходят, но перерисовывать за ними не нужно.