Difference between revisions of "Mac Preferences and About Menu/ru"

From Free Pascal wiki
Jump to navigationJump to search
(Created page with "{{Platform only|macOS}} {{Mac Preferences and About Menu}} Некоторые элементы должны отображаться в меню приложения по у...")
 
 
Line 4: Line 4:
 
Некоторые элементы должны отображаться в меню приложения по умолчанию в строке меню macOS вашего приложения. Хотя Lazarus автоматически добавляет:
 
Некоторые элементы должны отображаться в меню приложения по умолчанию в строке меню macOS вашего приложения. Хотя Lazarus автоматически добавляет:
  
* Services (Настройки)
+
* Services (Службы)
* Hide MyApp (Скрыть приложение)
+
* Hide MyApp (Скрыть MyApp)
 
* Hide Others (Скрыть остальное)
 
* Hide Others (Скрыть остальное)
 
* Show All (Показать все)
 
* Show All (Показать все)
* Quit MyApp (Выйти из приложения)
+
* Quit MyApp (Выйти из MyApp)
  
Lazarus does not add an "About MyApp" menu item or a "Preferences..." menu item. To add these two items on the same application menu as Quit, you have to perform a little trick.
+
Lazarus не добавляет пункт меню «О моем приложении» или «Настройки ...». Чтобы добавить эти два элемента в то же меню приложения, что и «Выход», вам нужно проделать небольшой трюк.
  
Add a MainMenu component from the Standard tab of the component palette to your main form. Create a menu item and change its caption property in the Object Inspector to the name of your application just for reference. Then, under that menu add three sub-menu items with the following captions: About MyApp, "-" (a separator) and "Preferences..."  
+
Добавьте компонент MainMenu со вкладки Standard палитры компонентов в основную форму. Создайте пункт меню и измените его свойство <code>Caption</code> в инспекторе объектов на имя вашего приложения только для справки. Затем в этом меню добавьте три пункта подменю со следующими заголовками: "About MyApp"(О моем приложении), «-» (разделитель) и "Preferences..."(Настройки).
  
 
[[File:MenuItems3new.jpg]]
 
[[File:MenuItems3new.jpg]]
  
Assign the "Preferences..." Menu Item Shortcut "Command ," using the ShortCut Editor (choose the Menu item ShortCut property in the Object Inspector and click on the ellipsis dots next to it). After checking the Meta key, change the Unknown key to a comma, this is how your shortcut will appear:
+
Назначьте ярлык "Command" пункту меню "Preferences..."(Настройки) редактора ярлыков (выберите свойство <code>ShortCut</code> пункта меню в Инспекторе объектов и щелкните точки с многоточием рядом с ним). После отметки мета-клавиши смените надпись в комбобоксе "Unknown" на запятую, нажав сначала клавишу "Grab key", а затем запятую на клавиатуре, в результате ваш ярлык будет выглядеть так:
  
 
[[File:MenuItemsGrab.png]]
 
[[File:MenuItemsGrab.png]]
  
Finally, to get these items on the MyApp application menu, we must change the caption of the first menu item in the main form's OnCreate event handler as follows:
+
Наконец, чтобы получить эти элементы в меню приложения MyApp, мы должны изменить заголовок первого элемента меню в обработчике событий OnCreate главной формы следующим образом:
  
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
Line 27: Line 27:
 
           AppMenu : TMenuItem;
 
           AppMenu : TMenuItem;
 
     begin
 
     begin
           AppMenu := TMenuItem.Create(Self); // Application menu
+
           AppMenu := TMenuItem.Create(Self); // Меню приложения
           AppMenu.Caption := #$EF#$A3#$BF;  // Unicode Apple logo char
+
           AppMenu.Caption := #$EF#$A3#$BF;  // Юникодный символ логотипа Apple
 
           MainMenu.Items.Insert(0, AppMenu);
 
           MainMenu.Items.Insert(0, AppMenu);
 
     end;  
 
     end;  
 
</syntaxhighlight>
 
</syntaxhighlight>
  
After recompiling your application and running it, you will notice that "About MyApp" and
+
После перекомпиляции вашего приложения и его запуска вы заметите, что "About MyApp" и "Preferences..." были добавлены в меню MyApp, где они и должны быть.
"Preferences..." have been added to the MyApp menu, which is where they should be.
 
  
 
[[File:MenuItems4new.png]]
 
[[File:MenuItems4new.png]]
  
Did you notice the problem? Do you really want to call your application "MyApp" and not "My App"?  
+
Вы заметили проблему? Вы действительно хотите назвать свое приложение «MyApp», а не «My App»?
  
No, you cannot change the project file "program MyApp" to "program My App" or you are told "MyApp.lpr(1,11) Fatal: Syntax error, ";" expected but "identifier APP" found".
+
Нет, вы не можете просто так изменить файл проекта «program MyApp» на «Program My App», иначе вам сообщат "MyApp.lpr(1,11) Fatal: Syntax error, ";" expected but "identifier APP" found"(ошибка синтаксиса: ожидается ";", но найден идентификатор APP).  
  
The solution is to change your application Info.plist file by opening your application bundle, navigating to Contents, double-clicking on Info.plist and using the Xcode plist editor to change the value of the "Bundle name" key to the string "My App" and saving it. Now when you run "MyApp" it displays as "My 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 :-)
 
Of course you would also now need to change the "About MyApp" caption too :-)
 +
Конечно, теперь вам также нужно будет изменить заголовок "About MyApp" :-)
  
Finished? No. The Lazarus-generated menu items still show "Hide MyApp" and "Quit MyApp". To change these to "My App" you need to modify the main form's OnCreate event handler as below:
+
Все? Нет. Пункты меню, созданные Lazarus, по-прежнему показывают "Hide MyApp"(Скрыть MyApp) и "Quit MyApp"(Выйти из MyApp). Чтобы изменить их на "My App", вам необходимо изменить обработчик событий <code>OnCreate</code> основной формы, как показано ниже:
  
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
Line 54: Line 54:
 
     begin
 
     begin
 
           Application.Title := 'My App';
 
           Application.Title := 'My App';
           AppMenu := TMenuItem.Create(Self); // Application menu
+
           AppMenu := TMenuItem.Create(Self); // Меню приложения
           AppMenu.Caption := #$EF#$A3#$BF;  // Unicode Apple logo char
+
           AppMenu.Caption := #$EF#$A3#$BF;  // Юникодный символ логотипа Apple
 
           MainMenu.Items.Insert(0, AppMenu);
 
           MainMenu.Items.Insert(0, AppMenu);
 
     end;  
 
     end;  
 
</syntaxhighlight>
 
</syntaxhighlight>
  
And here is the final result:
+
И вот окончательный результат:
  
 
[[File:macOSMenuFinal.png]]
 
[[File:macOSMenuFinal.png]]
  
To connect the menu options to an action, add a TActionList to the main form, add actions for About and Preferences (edit the properties and then create the appropriate OnExecute event handlers for each action), and then modify the main form's OnCreate event handler as below:
+
Чтобы связать параметры меню с действием, добавьте TActionList в основную форму, добавьте действия для About и Preferences (отредактируйте свойства, а затем создайте соответствующие обработчики событий <code>OnExecute</code> для каждого действия), а затем измените обработчик событий <code>OnCreate</code> основной формы как ниже:
  
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
Line 76: Line 76:
 
           Application.Title := 'My App';
 
           Application.Title := 'My App';
  
           AppMenu := TMenuItem.Create(Self); // Application menu
+
           AppMenu := TMenuItem.Create(Self); // Меню приложения
           AppMenu.Caption := #$EF#$A3#$BF;  // Unicode Apple logo char
+
           AppMenu.Caption := #$EF#$A3#$BF;  // Юникодный символ логотипа Apple
 
           MainMenu.Items.Insert(0, AppMenu);
 
           MainMenu.Items.Insert(0, AppMenu);
  
 
           AppAboutCmd := TMenuItem.Create(Self);
 
           AppAboutCmd := TMenuItem.Create(Self);
 
           AppAboutCmd.Action:= ActionList1.Actions[1];
 
           AppAboutCmd.Action:= ActionList1.Actions[1];
           AppMenu.Add(AppAboutCmd);  // Add About as item in application menu
+
           AppMenu.Add(AppAboutCmd);  // Добавляем About как пункт в меню приложения
  
 
           AppSepCmd := TMenuItem.Create(Self);
 
           AppSepCmd := TMenuItem.Create(Self);
 
           AppSepCmd.Caption := '-';
 
           AppSepCmd.Caption := '-';
           AppMenu.Add(AppSepCmd);  // Add menu separator
+
           AppMenu.Add(AppSepCmd);  // добавляем разделитель меню
  
 
           AppPrefCmd := TMenuItem.Create(Self);
 
           AppPrefCmd := TMenuItem.Create(Self);
 
           AppPrefCmd.Action:= ActionList1.Actions[2];
 
           AppPrefCmd.Action:= ActionList1.Actions[2];
           AppMenu.Add(AppPrefCmd);  // Add Preferences as item in application menu
+
           AppMenu.Add(AppPrefCmd);  // Добавляем Preferences как пункт в меню приложения
  
 
           AppSepCmd := TMenuItem.Create(Self);
 
           AppSepCmd := TMenuItem.Create(Self);
 
           AppSepCmd.Caption := '-';
 
           AppSepCmd.Caption := '-';
           AppMenu.Add(AppSepCmd);  // Add menu separator
+
           AppMenu.Add(AppSepCmd);  // добавляем разделитель меню
 
     end;
 
     end;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
  
== See also ==
+
== См. также ==
  
 
*[[Introduction to platform-sensitive development]]
 
*[[Introduction to platform-sensitive development]]

Latest revision as of 00:02, 21 August 2020

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;


См. также