Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Как узнать какое окно закрывает форму?

Delphi , Программа и Интерфейс , Приложение своё

Как узнать какое окно закрывает форму?

Code:
//Find windows that may cover another window.
Var
hW: HWnd;
r: TRect;
begin
hw := Handle;
While IsWindow(hw) Do Begin
   hw := GetWindow( hw, GW_HWNDPREV );
   If IsWindowVisible(hw) and not IsIconic( hw ) Then Begin
     ... use GetWindowRect( hw, r ) to get candidate windows
     rect and check if it intersects the forms BoundsRects via
     IntersectRect
   End;
End;
end;

Here's the translation of the text into Russian:

Чтобы узнать, какой из окон закрывает другое окно, вы можете использовать функцию GetWindow с флагом GW_HWNDPREV. Этот флаг возвращает.handle предыдущего окна в порядке Z-отображения.

В вашем коде вы уже используете этот подход для перебора окон, которые могут закрывать другое окно. Вы получаете handle предыдущего окна в порядке Z-отображения, вызывая GetWindow(hw, GW_HWNDPREV), и затем проверяете, является ли оно видимым и не иконкой (т. е., миниатюрным окном).

Если вы хотите узнать, которое конкретное окно закрывает вашу форму, вы можете отслеживать handle предыдущего окна (hw) и проверять его видимость и статус иконы. Если оно видимо и не является иконкой, вы можете предположить, что оно закрывает вашу форму.

Вот модифицированная версия вашего кода:

// Найдите окно, которое закрывает другое окно
Var
  hW: HWnd;
  r: TRect;
begin
  hW := Handle; // Получите handle текущего окна (вашей формы)

  While IsWindow(hW) Do Begin
    hW := GetWindow(hW, GW_HWNDPREV); // Получите предыдущее окно в порядке Z-отображения

    If IsWindowVisible(hW) and not IsIconic(hW) Then Begin
      ... используйте GetWindowRect(hW, r) для получения прямоугольника кандидатского окна
      rect и проверьте, пересекается ли он с прямоугольником вашей формы BoundsRect с помощью IntersectRect

      // Поскольку IntersectRect возвращает true, это означает, что предыдущее окно закрывает вашу форму
      writeln('Окно, которое закрывает вашу форму, - ', hW);
    End;
  End;
end;

В этом модифицированном коде, когда вы находитесь в окне, которое закрывает вашу форму (т. е., IsWindowVisible(hW) and not IsIconic(hW)), вы можете записать handle этого окна в консоль с помощью writeln.

Обратите внимание, что этот код предполагает, что предыдущее окно в порядке Z-отображения является тем, которое закрывает вашу форму. Если есть несколько окон с одним и тем же порядком Z-отображения, это подход может не работать правильно.

В статье описывается способ определить, какое окно закрывает форму, используя функцию GetWindow и проверку видимости и состояния окна.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Приложение своё ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-05-19 17:45:16
2024-05-19 17:50:55/0.010473966598511/2