Mac Preferences and About Menu/ru

From Lazarus wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
macOSlogo.png

Эта статья относится только к 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..."(Настройки).

MenuItems3new.jpg

Назначьте ярлык "Command" пункту меню "Preferences..."(Настройки) редактора ярлыков (выберите свойство ShortCut пункта меню в Инспекторе объектов и щелкните точки с многоточием рядом с ним). После отметки мета-клавиши смените надпись в комбобоксе "Unknown" на запятую, нажав сначала клавишу "Grab key", а затем запятую на клавиатуре, в результате ваш ярлык будет выглядеть так:

MenuItemsGrab.png

Наконец, чтобы получить эти элементы в меню приложения 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, где они и должны быть.

MenuItems4new.png

Вы заметили проблему? Вы действительно хотите назвать свое приложение «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;

И вот окончательный результат:

macOSMenuFinal.png

Чтобы связать параметры меню с действием, добавьте 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;


См. также