Как я могу реализовать действие Ctrl + F6 Next Window в меню Windows для приложения MDI в Delphi 7?Delphi MDI Application Next Window пункт меню
ответ
Используйте следующие и предыдущие методы родительского окна 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;
Кен, на который вы отвечаете, работает, хотя следующие и предыдущие работают в обратном порядке, и я думаю, что это следующие и предыдущие окна. Если я открою 4 окна, и я нахожусь в третьем окне, которое было открыто, и я выполняю Self.Next, я думаю, что следующее окно будет 4-м окном, но на самом деле оно дает фокус второму окну. Работает аналогично со встроенными клавишами Ctrl + F6/Shift + Ctrl + F6. –
Хммм ... Я этого не замечал, Майк, но я с готовностью признаю, что я прекратил делать приложения MDI еще в Delphi 2 дня. С тех пор они устарели от MS, и я никогда их не очень любил. :-) Я бы предположил, что интерпретация Next/Previous - это дело MS, потому что встроенные горячие клавиши работают так же (даже в приложениях, отличных от Delphi MDI). На самом деле, я думаю, что поведение меняется. Попробуйте сосредоточиться на окне 3, щелкнув мышью на выигрыше 1, нажмите на выигрыш 2 и затем нажмите «Далее». Где вы закончите? –
Я не думаю, что вам нужно что-либо делать - это подразумевается в приложениях MDI (в любом случае, созданных с помощью нового мастера MDI-приложений в Delphi 2006).
Он также «просто работает» в приложении, которое было изначально создано в Delphi 6.
Я понимаю, что это работает, но некоторые из наших клиентов не знают комбинации клавиш Ctrl + Tab/Ctrl + F6 или Ctrl + Shift + Tab/Ctrl + Shift + F6. Мы просто хотим, чтобы он был доступен в меню Windows, чтобы помочь им изучить сочетания клавиш. –
Пришлите основную форму сообщения wm_SysCommand
. Используйте sc_NextWindow
или sc_PrevWindow
для wParam параметр.
Ненужный излишний, Роб. TCustomForm.Next и TCustomForm.Previous выполняют то же самое, и назначая их в пункты меню OnClick (с любыми ярлыками, которые вы хотите) - это детская игра. –
Не знал, что эти методы существуют. И я разочарован тем, что в документации wm_SysCommand не упоминается сообщение wm_MdiNext, которое отправляет TCustomForm.Next. Есть несколько способов обмануть этого кота. –
Несколько способов - это, как всегда. TCustomForm фактически реализовал Next/Previous, так как до этого даже * был * TCustomForm (Delphi 1), где базой для форм был TForm. Я подозреваю, что отсутствие документации по wm_MdiNext связано с тем, что MS устарела MDI со времен Delphi 2 и Win95. –
Ummm .. Я дал вам именно это в своем ответе. Затем вы добавили «в меню Windows» в свой исходный пост. Опять же, я уже дал вам это в своем ответе. Здесь что-то не хватает? –