다양한 형태의 Delphi 애플리케이션 및 대화 상자
문제
나는 문서에 대해 두 가지 보기(예:WYSIWYG HTML 편집에는 실제 애플리케이션이 아닌 WYSIWYG 보기와 소스 보기가 있을 수 있습니다.별도의 창에서 열거나 기본 창의 탭에 도킹할 수 있습니다.
별도의 양식 중 하나에서 모달 대화 상자를 열면 기본 양식이 맨 앞으로 가져오고 Windows 작업 표시줄에 선택된 창으로 표시됩니다.기본 양식이 WYSIWYG 보기이고 소스 보기가 팝업되어 있다고 가정해 보겠습니다.소스 보기의 특정 지점으로 이동하여 이미지 태그를 삽입합니다.이미지에 대해 원하는 속성을 선택하고 입력할 수 있는 대화 상자가 나타납니다.WYSIWYG 보기와 소스 보기가 겹치는 경우 WYSIWYG 보기가 맨 앞으로 가져오고 소스 보기는 숨겨집니다.대화 상자가 닫히면 소스 보기가 다시 표시됩니다.
소유자 및 ParentWindow 속성을 관련된 양식으로 설정해 보았습니다.
dialog := TDialogForm.Create( parentForm );
dialog.ParentWindow := parentForm.Handle;
이 문제를 어떻게 해결할 수 있나요?또 무엇을 시도해야 합니까?
사람들이 내 예를 보고 걸림돌이 되는 것 같다면 아마도 더 나은 예를 들어 볼 수 있을 것입니다.동시에 두 개 이상의 파일을 열 수 있는 텍스트 편집기입니다.열려 있는 파일은 탭(예: Delphi IDE)이나 자체 창에 있습니다.사용자가 맞춤법 검사 대화 상자나 찾기 대화 상자를 불러온다고 가정해 보세요.파일이 자체 창에서 편집 중인 경우 모달 대화 상자가 표시될 때 해당 창은 z 순서로 기본 양식 아래로 전송됩니다.대화 상자가 닫히면 원래의 z 순서로 돌아갑니다.
메모:Delphi 7을 사용 중이고 이 문제에 대한 해결책을 찾고 있다면 페이지 하단에 있는 내 대답을 참조하여 내가 무엇을 했는지 확인하세요.
해결책
이 코드를 사용하겠습니다 ...(기본적으로 Lars가 말한 내용)
dialog := TDialogForm.Create( parentForm );
dialog.PopupParent := parentForm;
dialog.PopupMode := pmExplicit;
dialog.ShowModal();
다른 팁
결국 결국 찾았어요 답변 Google 그룹스를 사용합니다.간단히 말해서 모든 모달 대화 상자에는 다음이 추가되어야 합니다.
procedure TDialogForm.CreateParams(var Params: TCreateParams); begin inherited; Params.Style := Params.Style or WS_POPUP; Params.WndParent := (Owner as TWinControl).Handle; end;
나는 이것이 Delphi 7의 Lars와 Marius의 답변과 동일하다고 생각합니다.
ShowModal을 사용하여 대화 상자를 표시합니까, 아니면 그냥 표시합니까?아마도 대화 상자에 맞게 PopupMode 속성을 설정해야 할 것입니다.pmAuto가 아마도 최선의 선택일 것입니다.PopupParent 속성을 설정해야 하는지도 확인하세요.
우선, 제가 따르고 있는 것이 확실하지 않습니다. 현재 상황과 문제가 무엇인지 이해하는 데 도움이 되는 몇 가지 추가 세부정보를 제공해야 할 수도 있습니다.나는 당신이 달성하려는 목표와 문제가 무엇인지 정확히 이해하지 못하는 것 같습니다.
둘째, 대화 상자의 부모를 설정할 필요가 없습니다. 이는 기본적으로 Create 호출(부모 전달)에서 발생하는 일이기 때문입니다.당신이 설명하는 대화는 솔직하게 말하면 약간 "다시 생각"할 수 있는 것처럼 들립니다.이 대화 상자는 소스 창의 하위 이미지 속성을 입력하는 창입니까, 아니면 WYSIWYG 창입니까?
귀하가 무엇을 얻고 있는지 잘 이해하지 못하지만 시도해 볼 수 있는 몇 가지 제안은 다음과 같습니다.
- 이 동작은 Delphi 버전에 따라 달라집니다.저는 이것이 Delphi 2007에서 Windows Vista를 지원하기 위해 뛰어넘은 노력 때문이라고 생각합니다.
- Delphi 2007을 사용하는 경우 프로젝트 소스 파일에서 Application.MainFormOnTaskBar 부울 변수를 설정하는 줄을 제거해 보십시오.
- 이를 제거하면 다양한 Form의 BringToFront / SendToBack 메서드를 사용하여 원하는 Z 순서를 달성할 수 있습니다.
당신이 발견한 내용이 에서 논의된 것 같습니다. 이 링크물론 제가 귀하의 요점을 완전히 놓쳤을 수도 있으므로 미리 사과드립니다!