2009-11-05 4 views
1

Delphi 7의 MDI 응용 프로그램에 대한 Windows 메뉴에서 Ctrl + F6 다음 창 동작을 구현하려면 어떻게해야합니까?Delphi MDI 응용 프로그램 다음 창 메뉴 항목

+0

음 ... 나는 내 대답에서 정확히 그 것을주었습니다. 그런 다음 "Windows 메뉴에서"원래 게시물에 추가했습니다. 다시 말하지만, 나는 이미 대답 해 주셨습니다. 내가 여기서 누락 된 것이 있습니까? –

답변

2

MDI 부모 창의 다음 및 이전 방법을 사용하십시오. 메뉴 이벤트에서이 작업을 수행하고 다른 메뉴 항목처럼 단축키를 지정할 수 있습니다. 아래 코드에서 MDI 부모 폼은 TFormMDIParent이며, "Next Child"와 "Previous Child"라는 캡션이 붙은 두 개의 메뉴 항목을 만들고 IDE에서 생성 된 기본값으로 설정된 채로 있다고 가정합니다. 또한 기본 폼을 MDI 상위 (FormStyle = fsMDIForm)로 올바르게 설정했다고 가정합니다.

procedure TFormMDIParent.NextChild1Click(Sender: TObject); 
begin 
    Self.Next; 
end; 

procedure TFormMDIParent.PreviousChild1Click(Sender: TObject); 
begin 
    Self.Previous; 
end; 
+0

켄 (Ken) 네가 대답 하긴하지만, 다음과 이전은 내가 생각하는 것과 반대 순서로 다음과 이전 창으로 작동한다. 4 개의 창을 열었을 때 열린 3 번째 창에서 Self.Next를 수행하면 다음 창은 4 번째 창이지만 실제로는 2 번째 창에 포커스가 있다고 생각합니다. 기본 제공 Ctrl + F6/Shift + Ctrl + F6 키를 사용하여 동일한 방식으로 작동합니다. –

+0

흠 ... 나는 Mike를 알아 차리지 못했다. 그러나 나는 델파이에서 MDI 애플리케이션을 2 일 만에 끝낸다는 것을 쉽게 인정할 것이다. 그때 이후로 그들은 MS에 의해 사용되지 않았으며 어쨌든 나는 그다지 좋아하지 않았습니다. :-) 나는 Next/Previous의 해석은 내장 된 단축키가 (델파이가 아닌 다른 MDI 응용 프로그램에서도) 잘 작동하기 때문에 MS의 것임을 짐작할 수 있습니다. 사실, 나는 행동이 다양하다고 생각합니다. 포커싱 윈도우 3을 시도하고, 승리 1에서 마우스로 클릭하고, 승리 2를 클릭 한 후, 다음을 시도하십시오. 어디서 끝내 죠? –

1

아무 것도 할 필요가 없다고 생각합니다. MDI 앱에 암시 적이 어서 (어쨌든 델파이 2006의 새로운 MDI 앱 마법사로 생성되었습니다).

또한 원래 Delphi 6에서 만들어진 앱에서도 "그냥 작동합니다".

+0

나는 그것이 작동한다는 것을 깨달았지만 몇몇 고객은 Ctrl + Tab/Ctrl + F6 또는 Ctrl + Shift + Tab/Ctrl + Shift + F6 바로 가기를 인식하지 못합니다. 키보드 단축키를 배우는 데 도움이되는 Windows 메뉴에서만 사용할 수 있습니다. –

1

메인 양식을 wm_SysCommand 메시지를 보냅니다. wParam 매개 변수는 sc_NextWindow 또는 sc_PrevWindow을 사용하십시오.

+0

불필요한 잔인 함, Rob. TCustomForm.Next와 TCustomForm.Previous는 동일한 것을 수행하고 메뉴 항목 OnClick 이벤트에 할당합니다 (원하는 바로 가기가있는 경우). –

+0

존재하는 방법을 모르셨습니까? 그리고 나는 wm_SysCommand 문서가 TCustomForm.Next가 보내는 wm_MdiNext 메시지를 언급하지 않는다는 점에 실망했다. 이 고양이를 껍질을 벗기는 몇 가지 방법이 있습니다. –

+0

항상 그렇듯이 몇 가지 방법이 있습니다. TCustomForm은 실제로 양식의 기본이 TForm 인 TCustomForm (델파이 1)이되기도 전에 실제로 Next/Previous를 구현했습니다. 나는 wm_MdiNext에 관한 문서가 없다고 의심하고있다. MS가 Delphi 2와 Win95에서 MDI를 사용하지 않기 때문이다. –

관련 문제