2009-11-05 2 views
1

Как я могу реализовать действие Ctrl + F6 Next Window в меню Windows для приложения MDI в Delphi 7?Delphi MDI Application Next Window пункт меню

+0

Ummm .. Я дал вам именно это в своем ответе. Затем вы добавили «в меню Windows» в свой исходный пост. Опять же, я уже дал вам это в своем ответе. Здесь что-то не хватает? –

ответ

2

Используйте следующие и предыдущие методы родительского окна MDI. Вы можете сделать это из события меню и назначить ярлык, как любой другой пункт меню. В приведенном ниже коде родительская форма MDI - TFormMDIParent, и предполагается, что вы создали два элемента меню под заголовками «Следующий ребенок» и «Предыдущий ребенок», оставив их имена по умолчанию, сгенерированные IDE. Он также предполагает, что вы правильно настроили основную форму, чтобы быть родителем MDI (FormStyle = fsMDIForm).

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

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

Кен, на который вы отвечаете, работает, хотя следующие и предыдущие работают в обратном порядке, и я думаю, что это следующие и предыдущие окна. Если я открою 4 окна, и я нахожусь в третьем окне, которое было открыто, и я выполняю Self.Next, я думаю, что следующее окно будет 4-м окном, но на самом деле оно дает фокус второму окну. Работает аналогично со встроенными клавишами Ctrl + F6/Shift + Ctrl + F6. –

+0

Хммм ... Я этого не замечал, Майк, но я с готовностью признаю, что я прекратил делать приложения MDI еще в Delphi 2 дня. С тех пор они устарели от MS, и я никогда их не очень любил. :-) Я бы предположил, что интерпретация Next/Previous - это дело MS, потому что встроенные горячие клавиши работают так же (даже в приложениях, отличных от Delphi MDI). На самом деле, я думаю, что поведение меняется. Попробуйте сосредоточиться на окне 3, щелкнув мышью на выигрыше 1, нажмите на выигрыш 2 и затем нажмите «Далее». Где вы закончите? –

1

Я не думаю, что вам нужно что-либо делать - это подразумевается в приложениях MDI (в любом случае, созданных с помощью нового мастера MDI-приложений в Delphi 2006).

Он также «просто работает» в приложении, которое было изначально создано в Delphi 6.

+0

Я понимаю, что это работает, но некоторые из наших клиентов не знают комбинации клавиш Ctrl + Tab/Ctrl + F6 или Ctrl + Shift + Tab/Ctrl + Shift + F6. Мы просто хотим, чтобы он был доступен в меню Windows, чтобы помочь им изучить сочетания клавиш. –

1

Пришлите основную форму сообщения wm_SysCommand. Используйте sc_NextWindow или sc_PrevWindow для wParam параметр.

+0

Ненужный излишний, Роб. TCustomForm.Next и TCustomForm.Previous выполняют то же самое, и назначая их в пункты меню OnClick (с любыми ярлыками, которые вы хотите) - это детская игра. –

+0

Не знал, что эти методы существуют. И я разочарован тем, что в документации wm_SysCommand не упоминается сообщение wm_MdiNext, которое отправляет TCustomForm.Next. Есть несколько способов обмануть этого кота. –

+0

Несколько способов - это, как всегда. TCustomForm фактически реализовал Next/Previous, так как до этого даже * был * TCustomForm (Delphi 1), где базой для форм был TForm. Я подозреваю, что отсутствие документации по wm_MdiNext связано с тем, что MS устарела MDI со времен Delphi 2 и Win95. –