안녕하세요.
문제는 나중에 생성되는 폼이 기존 폼 뒤쪽에 그려진다는 것인데요.
보시는 그림처럼 창 A, B가 있습니다. 각각 form 이지요.
상황 ) 창 A에 있는 command1 버튼을 누르면 창 B가 show 됩니다.
2번째 그림처럼 폼이 그려지는게 정상일 때
현재는 3번째 그림처럼 포커스는 창 B가 가져가면서도 창 A 뒤쪽에 그려지는 문제가 발생합니다.
더우기 창 B를 클릭해도 창 A위쪽으로 올라오지 않습니다.
방안 ) 임시방편으로 창 B.show 하기 직전에 창 A.sendtoback 를 해줬습니다.
이렇게 했을 때의 문제는 창 A가 아주 않보였다가 창 B.close된 후에야 창 A가 다시 올라옵니다.
결론적으로 세번째 그림처럼 창 B가 창 A 위로 올라와야 한다는 것이지요.
인터넷을 찾아보니 Z-order라는 것이 있어서 창 A.sendbackward 하면
(sendtoback 처럼 완전히 사라지는 것이 아니라) 1단계만 아래로 내려가서 3번째 그림처럼 된다고 되어있더군요. 바로 제가 바라는 정답이지요.
문제 ) 문제는 사용중인 delphi 2005와 delphi 6 두 버전 모두 .sendbackward 메소드가 없는거 같습니다.
sendtoback, bringtofront는 모두 있고요. F1에서 찾아보니 .sendbackward 메소드도 나오는데
ASP나 그림객체에 한해서 적용되는거 같습니다.
나중에 호출되는 자식창이 부모창 위에서 그려지는게 당연한거 아닌가요?
이건 별다른 코딩이 없어도 원래 되어야 하는거 아닌가요? 창 A의 속성으로 제가 잘못 건드린것이 있을까요?
창이 백여개도 넘는데 일일히 수정하기도 어려울꺼 같고 ... 고수님들의 지혜를 부탁드려봅니다.
WndParent 를 조정해 보심은 어떨런지요?
Delphi2005 는 어떻게 돌아가는지 잘모르겠습니다만
Delphi7을 포함해 이전버젼과 Delphi2006이상은 윈도우클래스(Form)의 WndParent 설정이 좀 다릅니다.
Delphi7 이전은 모든 폼의 wndParent는 Application.Handle 이었습니다.
Delphi2006 ,2007 은 설정에 따람 Form의 WndParent가 Application.Handle 일수도 있고 MainForm일수도 잇습니다.
Active되는 Window가 항상 앞에 오려면 WndParent를 Application.Handle 으로 하도록 하면 될것입니다.
Delphi7과 그 이전은 기본이 그렇구
2006-2007에서는 Application->MainFormOnTaskBar=false; 를 하면
모든 Form의 WndParent가 Application.Handle 이 됩니다.
만약 WndParent를 내가 원하는 윈도우(Form)으로 바꾸고 싶다면
CreateParams 에서 하면 됩니다.
위 세번째 그림은?
Form1의 WndParent가 Form3가 되어버린것 같기두 하고... 이상하긴 하네요