델파이 응용 프로그램에 현재 모달 창이 있는지 어떻게 알 수 있습니까?

StackOverflow https://stackoverflow.com/questions/284581

  •  08-07-2019
  •  | 
  •  

문제

Delphi MDI 애플리케이션에서 타이머가 실행 중이며 백그라운드에서 무언가가 변경되면 메시지를 표시하는 데 사용하고 싶습니다. 그러나 사용자가 그것에 대해 아무것도 할 수 없기 때문에 응용 프로그램이 전경에 모달 대화 상자가있을 때 그 메시지가 팝업되는 것을 원하지 않습니다.

그래서 알고 싶은 것은 응용 프로그램에 모달 대화 상자의 존재를 어떻게 확인할 수 있습니까?

도움이 되었습니까?

해결책

이 코드로 시도 할 수 있습니다.

var
  ActForm: TCustomForm;
begin
  ActForm := Screen.ActiveForm;
  if (ActForm = nil) or not (fsModal in ActForm.FormState) then begin

  end;
end;

나는 Delphi 4로 테스트했고 나를 위해 일합니다.

편집] : 그러나 당신은 형태를 터뜨리고 초점을 훔치는 것이 좋은 생각인지 실제로 생각해야합니다. 응용 프로그램에 따라 다르지만 사용자가 현재 편집 필드에 무언가를 입력하거나 마우스로 무언가를 수행하는 경우 워크 플로를 깨뜨릴 수 있습니다.

다른 팁

Delphi 2005 이후로 당신은 a 모달 레벨 tapplication의 속성. 응용 프로그램에서 열린 모달 양식의 수를 계산합니다.

아마도 해결책은 실제로 초점을 훔치지 않는 힌트를 팝업하는 것입니다. 클릭 가능한 힌트 어딘가에 보이지만 너무 침습적이지는 않습니다. 따라서 사용자가 조치를 취하고 싶거나 자신이하고있는 일을 끝내고 조치를 취할 수 있습니다. 또는 아마도 그것을 완전히 무시하십시오.

사용 anypopup() 기능

에 대한 GetLastActivePopup(). 값을 반환 할 수 있습니다 값은 HWND 매개 변수와 동일합니다.

  • HWND로 식별 된 창은 가장 최근에 활성화되었습니다.
  • HWND로 식별 된 창에는 팝업 창이 소유하지 않습니다.
  • HWND로 식별되는 창은 최상위 창이 아니거나 다른 창이 소유합니다.

오늘 사용자 Histrio 올바르게 대답했습니다 다른 스레드 모달 델파이 형태를 모니터링하는 것만으로는 충분하지 않습니다. Windows에는 모달 대화 상자가있을 수 있습니다.

그의 다른 스레드에서 답하십시오 확인 방법을 보여줍니다.

-jeroen

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top