Mac Preferences and About Menu/ru
Эта статья относится только к macOS.
См. также: Multiplatform Programming Guide
│
English (en) │
русский (ru) │
Некоторые элементы должны отображаться в меню приложения по умолчанию в строке меню macOS вашего приложения. Хотя Lazarus автоматически добавляет:
- Services (Службы)
- Hide MyApp (Скрыть MyApp)
- Hide Others (Скрыть остальное)
- Show All (Показать все)
- Quit MyApp (Выйти из MyApp)
Lazarus не добавляет пункт меню «О моем приложении» или «Настройки ...». Чтобы добавить эти два элемента в то же меню приложения, что и «Выход», вам нужно проделать небольшой трюк.
Добавьте компонент MainMenu со вкладки Standard палитры компонентов в основную форму. Создайте пункт меню и измените его свойство Caption
в инспекторе объектов на имя вашего приложения только для справки. Затем в этом меню добавьте три пункта подменю со следующими заголовками: "About MyApp"(О моем приложении), «-» (разделитель) и "Preferences..."(Настройки).
Назначьте ярлык "Command" пункту меню "Preferences..."(Настройки) редактора ярлыков (выберите свойство ShortCut
пункта меню в Инспекторе объектов и щелкните точки с многоточием рядом с ним). После отметки мета-клавиши смените надпись в комбобоксе "Unknown" на запятую, нажав сначала клавишу "Grab key", а затем запятую на клавиатуре, в результате ваш ярлык будет выглядеть так:
Наконец, чтобы получить эти элементы в меню приложения MyApp, мы должны изменить заголовок первого элемента меню в обработчике событий OnCreate главной формы следующим образом:
procedure TForm1.FormCreate(Sender: TObject);
var
AppMenu : TMenuItem;
begin
AppMenu := TMenuItem.Create(Self); // Меню приложения
AppMenu.Caption := #$EF#$A3#$BF; // Юникодный символ логотипа Apple
MainMenu.Items.Insert(0, AppMenu);
end;
После перекомпиляции вашего приложения и его запуска вы заметите, что "About MyApp" и "Preferences..." были добавлены в меню MyApp, где они и должны быть.
Вы заметили проблему? Вы действительно хотите назвать свое приложение «MyApp», а не «My App»?
Нет, вы не можете просто так изменить файл проекта «program MyApp» на «Program My App», иначе вам сообщат "MyApp.lpr(1,11) Fatal: Syntax error, ";" expected but "identifier APP" found"(ошибка синтаксиса: ожидается ";", но найден идентификатор APP).
Решение состоит в том, чтобы изменить файл Info.plist вашего приложения, открыв пакет вашего приложения, перейдя к Contents, дважды щелкнув Info.plist и используя редактор Xcode plist, чтобы изменить значение ключа «Bundle name» на строку "My App" и сохранить его. Теперь, когда вы запустите"MyApp", оно отобразится как "My App".
Of course you would also now need to change the "About MyApp" caption too :-) Конечно, теперь вам также нужно будет изменить заголовок "About MyApp" :-)
Все? Нет. Пункты меню, созданные Lazarus, по-прежнему показывают "Hide MyApp"(Скрыть MyApp) и "Quit MyApp"(Выйти из MyApp). Чтобы изменить их на "My App", вам необходимо изменить обработчик событий OnCreate
основной формы, как показано ниже:
procedure TForm1.FormCreate(Sender: TObject);
var
AppMenu : TMenuItem;
begin
Application.Title := 'My App';
AppMenu := TMenuItem.Create(Self); // Меню приложения
AppMenu.Caption := #$EF#$A3#$BF; // Юникодный символ логотипа Apple
MainMenu.Items.Insert(0, AppMenu);
end;
И вот окончательный результат:
Чтобы связать параметры меню с действием, добавьте TActionList в основную форму, добавьте действия для About и Preferences (отредактируйте свойства, а затем создайте соответствующие обработчики событий OnExecute
для каждого действия), а затем измените обработчик событий OnCreate
основной формы как ниже:
procedure TForm1.FormCreate(Sender: TObject);
var
AppMenu : TMenuItem;
AppAboutCmd : TMenuItem;
AppSepCmd : TMenuItem;
AppPrefCmd : TMenuItem;
begin
Application.Title := 'My App';
AppMenu := TMenuItem.Create(Self); // Меню приложения
AppMenu.Caption := #$EF#$A3#$BF; // Юникодный символ логотипа Apple
MainMenu.Items.Insert(0, AppMenu);
AppAboutCmd := TMenuItem.Create(Self);
AppAboutCmd.Action:= ActionList1.Actions[1];
AppMenu.Add(AppAboutCmd); // Добавляем About как пункт в меню приложения
AppSepCmd := TMenuItem.Create(Self);
AppSepCmd.Caption := '-';
AppMenu.Add(AppSepCmd); // добавляем разделитель меню
AppPrefCmd := TMenuItem.Create(Self);
AppPrefCmd.Action:= ActionList1.Actions[2];
AppMenu.Add(AppPrefCmd); // Добавляем Preferences как пункт в меню приложения
AppSepCmd := TMenuItem.Create(Self);
AppSepCmd.Caption := '-';
AppMenu.Add(AppSepCmd); // добавляем разделитель меню
end;