2013-04-11 2 views
0

나는 Delphi XE3에 포팅 한 largish Delphi 6 앱을 가지고 있습니다. 어느 순간 메인 폼은 다른 넌 모달 폼을 시작합니다. 두 번째 또는 두 개의 새로 작성된 양식이 기본 양식 뒤쪽으로 이동 한 후 (가령 50 %) 가끔 있습니다. 이제는 뒤쪽에 있다고 생각하더라도 새로 생성 된 양식에는 여전히 포커스가 있으므로 활성화/비활성화 이벤트가 없습니다. 몇 가지 타이머 컨트롤이 있으며 비활성화되었습니다. 그것은 여전히 ​​발생합니다.형태가 등 뒤로 움직이며 활성 상태가 유지됨

내 코드를 수락 할 수는 있지만 어떻게되는지 알 수 있습니까? 새 양식이 뒤쪽으로 움직일 때 가로 챌 수있는 방법이 있습니까?

그냥 분명히 : 두 가지 양식을 따로 사용해야합니다. 그들 중 누구도 다른 뒤에 나타날 수 있습니다. 현재 무슨 일이 일어나고 있는지는 z-order가 변화하고있는 것 같습니다.

+0

문제를 보여주는 완전한 프로그램을 제공해주십시오. –

+0

알았어 - 나는 몇 가지 답변을 알려주려고했다. – Rob

+0

이것은 고전적인 델피 문제이며, 문제의 이름은 델파이 2007에'PopupMode'와'PopupParent'가 추가 된 이유입니다. 나는 최신 유니 코드 버전이 아니라면 2007 년으로 옮길 것을 진지하게 제안합니다. –

답변

0

나는 이것에 대한 답을 발견했다. 나는 이것을 한 CreateParams 오버라이드를 추가했다는 것을 발견했다.

// make a taskbar window 
inherited CreateParams(params); 
params.ExStyle := params.ExStyle or WS_EX_APPWINDOW; 
params.WndParent := GetDesktopwindow; // this line caused the problem 

WndParent가 주석을 달았다. 효과는 기괴합니다. 마치 다른 사람 뒤로 창을 강제로 누르는 키 또는 마우스 이벤트가 발생하면 약 1 초 후에 꺼지는 타이머가있는 것입니다. David Heffernan 덕분에 CreateParam을 스테핑하는 것에 대한 의견은 저에게 그것을 알리게했습니다.

+2

Raymond Chen은 데스크톱 창이 귀하의 주인이 될 수있는 위험에 대해 작성했습니다. 앱 창 스타일을 추가 할 필요가 없습니다. 단순히 WndParent를 0으로 설정하십시오. 작업 표시 줄에 소유되지 않은 최상위 창이 나타납니다. –

+0

도움 주셔서 감사합니다. David – Rob

관련 문제