
Взаимоисключающие пункты-переключатели
В Windows 95 стал широко применяться еще один способ пометки пунктов — жирной точкой. Он используется в тех случаях, когда несколько пунктов меню работают согласованно как один переключатель с множеством состояний. В нашем примере с помощью жирной точки удобно реализовать выбор масштаба для картинки. Рассмотрим, как это делается.
Шаг 13. Добавьте в меню View три пункта: Half Size (программное имя HalfSizeltem), Normal Size (программное имя NormalSizeltem) и Double Size (программное имяDoubleSizeltem), отделив их от остальных пунктов меню с помощью разделительной линии.
Шаг 14. Прежде всего сделайте метку жирной точкой, установив в каждом новом пункте свойство Radioltem в значение Тше. Теперь объедините пункты меню в одну согласованно работающую группу, для этого в каждом пункте установите одинаковый ненулевой Grouplndex (например, 1). Один из пунктов (например, Normal Size) пометьте (рис. 16).
Шаг 15. Чтобы привести в действие механизм переключения пунктов, определите в них следующие обработчики события OnClick:
procedure TPictureForm.Half SizeItemClickfSender: TObject);
begin
HalfSizeItem.Checked := True;
{ Показать картинку половинного размера }
end;
procedure TPictureForm.NormalSizeItemClick(Sender: TObject);
begin
NormalSizeItem.Checked := True;
{ Показать картинку нормального размера }
end;
procedure TPictureForm. DoubleSizeItemClick (Sender: TObject);
begin
DoubleSizeItem.Checked := True;
{ Показать картинку двойного размера }
end;
Скомпилируйте проект и удостоверьтесь, что новые пункты меню работают как взаимоисключающие переключатели.
Запрещенные пункты меню
Некоторые режимы работы приложения могут быть недоступны пользователю в тот или иной момент времени. Пункты меню, соответствующие недоступным режимам, делаются запрещенными. Запрещенные пункты выглядят тусклыми, и их выбор игнорируется.
Шаг 16. Согласитесь, что легче запретить выбор отдельных пунктов меню, чем программировать логику поведения на случай, когда пользователь выбрал неправильную команду. Поэтому в нашем примере логично было бы запретить пункты Save As..., Close, а также Half Size, Normal Size и Double Size, когда нет открытого графического файла. Для этого в каждом из указанных пунктов меню установите свойство Enabled в значение False (рис. 17).
Шаг 17. Во время работы приложения нужно еще динамически разрешать и запрещать пункты меню в зависимости от того, открыт графический файл или нет. Так как эти действия достаточно универсальны, оформим их в виде частного (private) метода формы EnableCommands:
type
TPictureForm = class(TForm)
private
procedure EnableCommands(Enable: Boolean);
end;
procedure TPictureForm. EnableCommands (Enable: Boqriean);
begin
SaveAsItem.Enabled := Enable;
Closeltem.Enabled := Enable;
HalfSizeltem.Enabled := Enable;
NormalSizeItem.Enabled := Enable;
DoubleSizeItem.Enabled := Enable;
end;
Параметр Enable данного метода регулирует, что именно нужно сделать: разрешить (значение True) или запретить (значение False) множество пунктов меню.
Шаг 18. Как вы понимаете, в обработчик команды меню Open... следует поместить вызов метода EnableCommands с параметром True, а в обработчик команды Close — вызов метода EnableCommands с параметром False:
procedure TPictureForm.OpenItemClick(Sender: TObject);
begin
{ Открыть файл картинки и разрешить команды }
EnableCommands(True) ;
end;
procedure TPictureForm.CloseItemClick(Sender: TObject);
begin
{ Закрыть файл картинки и запретить команды }
EnableCommands(False);
end;
Скомпилируйте и запустите проект. Посмотрите, как изменилось меню приложения . В самом начале работы отдельные режимы выпадающих меню File и View запрещены. Выбор команды File | Open... разрешает их использование, а выбор команды File | Close — запрещает.
Итак, вы изучили все основные аспекты программирования главного меню, поэтому перейдем к вопросу разработки всплывающих меню.