Sign in Join
Wiki copytemporary

Mac Preferences and About Menu/ru: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11*(macOS only)*
22
33Некоторые элементы должны отображаться в меню приложения по умолчанию в строке меню macOS вашего приложения. Хотя Lazarus автоматически добавляет:
44
55- Services (Службы)
66- Hide MyApp (Скрыть MyApp)
77- Hide Others (Скрыть остальное)
88- Show All (Показать все)
99- Quit MyApp (Выйти из MyApp)
1010
1111Lazarus не добавляет пункт меню «О моем приложении» или «Настройки ...». Чтобы добавить эти два элемента в то же меню приложения, что и «Выход», вам нужно проделать небольшой трюк.
1212
1313Добавьте компонент MainMenu со вкладки Standard палитры компонентов в основную форму. Создайте пункт меню и измените его свойство `Caption` в инспекторе объектов на имя вашего приложения только для справки. Затем в этом меню добавьте три пункта подменю со следующими заголовками: "About MyApp"(О моем приложении), «-» (разделитель) и "Preferences..."(Настройки).
1414
15-<figure>
16-<img src="MenuItems3new.jpg" title="MenuItems3new.jpg" />
17-<figcaption>MenuItems3new.jpg</figcaption>
18-</figure>
15+![](/wiki-images/3/32/MenuItems3new.jpg)
1916
2017Назначьте ярлык "Command" пункту меню "Preferences..."(Настройки) редактора ярлыков (выберите свойство `ShortCut` пункта меню в Инспекторе объектов и щелкните точки с многоточием рядом с ним). После отметки мета-клавиши смените надпись в комбобоксе "Unknown" на запятую, нажав сначала клавишу "Grab key", а затем запятую на клавиатуре, в результате ваш ярлык будет выглядеть так:
2118
22-<figure>
23-<img src="MenuItemsGrab.png" title="MenuItemsGrab.png" />
24-<figcaption>MenuItemsGrab.png</figcaption>
25-</figure>
19+![](/wiki-images/5/50/MenuItemsGrab.png)
2620
2721Наконец, чтобы получить эти элементы в меню приложения MyApp, мы должны изменить заголовок первого элемента меню в обработчике событий OnCreate главной формы следующим образом:
2822
2923``` pascal
3024 procedure TForm1.FormCreate(Sender: TObject);
3125 var
3226 AppMenu : TMenuItem;
3327 begin
3428 AppMenu := TMenuItem.Create(Self); // Меню приложения
3529 AppMenu.Caption := #$EF#$A3#$BF; // Юникодный символ логотипа Apple
3630 MainMenu.Items.Insert(0, AppMenu);
3731 end;
3832```
3933
4034После перекомпиляции вашего приложения и его запуска вы заметите, что "About MyApp" и "Preferences..." были добавлены в меню MyApp, где они и должны быть.
4135
42-<figure>
43-<img src="MenuItems4new.png" title="MenuItems4new.png" />
44-<figcaption>MenuItems4new.png</figcaption>
45-</figure>
36+![](/wiki-images/0/05/MenuItems4new.png)
4637
4738Вы заметили проблему? Вы действительно хотите назвать свое приложение «MyApp», а не «My App»?
4839
4940Нет, вы не можете просто так изменить файл проекта «program MyApp» на «Program My App», иначе вам сообщат "MyApp.lpr(1,11) Fatal: Syntax error, ";" expected but "identifier APP" found"(ошибка синтаксиса: ожидается ";", но найден идентификатор APP).
5041
5142Решение состоит в том, чтобы изменить файл Info.plist вашего приложения, открыв пакет вашего приложения, перейдя к Contents, дважды щелкнув Info.plist и используя редактор Xcode plist, чтобы изменить значение ключа «Bundle name» на строку "My App" и сохранить его. Теперь, когда вы запустите"MyApp", оно отобразится как "My App".
5243
5344Of course you would also now need to change the "About MyApp" caption too :-) Конечно, теперь вам также нужно будет изменить заголовок "About MyApp" :-)
5445
5546Все? Нет. Пункты меню, созданные Lazarus, по-прежнему показывают "Hide MyApp"(Скрыть MyApp) и "Quit MyApp"(Выйти из MyApp). Чтобы изменить их на "My App", вам необходимо изменить обработчик событий `OnCreate` основной формы, как показано ниже:
5647
5748``` pascal
5849 procedure TForm1.FormCreate(Sender: TObject);
5950 var
6051 AppMenu : TMenuItem;
6152 begin
6253 Application.Title := 'My App';
6354 AppMenu := TMenuItem.Create(Self); // Меню приложения
6455 AppMenu.Caption := #$EF#$A3#$BF; // Юникодный символ логотипа Apple
6556 MainMenu.Items.Insert(0, AppMenu);
6657 end;
6758```
6859
6960И вот окончательный результат:
7061
71-<figure>
72-<img src="macOSMenuFinal.png" title="macOSMenuFinal.png" />
73-<figcaption>macOSMenuFinal.png</figcaption>
74-</figure>
62+![](/wiki-images/9/92/MacOSMenuFinal.png)
7563
7664Чтобы связать параметры меню с действием, добавьте TActionList в основную форму, добавьте действия для About и Preferences (отредактируйте свойства, а затем создайте соответствующие обработчики событий `OnExecute` для каждого действия), а затем измените обработчик событий `OnCreate` основной формы как ниже:
7765
7866``` pascal
7967procedure TForm1.FormCreate(Sender: TObject);
8068 var
8169 AppMenu : TMenuItem;
8270 AppAboutCmd : TMenuItem;
8371 AppSepCmd : TMenuItem;
8472 AppPrefCmd : TMenuItem;
8573 begin
8674 Application.Title := 'My App';
8775
8876 AppMenu := TMenuItem.Create(Self); // Меню приложения
8977 AppMenu.Caption := #$EF#$A3#$BF; // Юникодный символ логотипа Apple
9078 MainMenu.Items.Insert(0, AppMenu);
9179
9280 AppAboutCmd := TMenuItem.Create(Self);
9381 AppAboutCmd.Action:= ActionList1.Actions[1];
9482 AppMenu.Add(AppAboutCmd); // Добавляем About как пункт в меню приложения
9583
9684 AppSepCmd := TMenuItem.Create(Self);
9785 AppSepCmd.Caption := '-';
9886 AppMenu.Add(AppSepCmd); // добавляем разделитель меню
9987
10088 AppPrefCmd := TMenuItem.Create(Self);
10189 AppPrefCmd.Action:= ActionList1.Actions[2];
10290 AppMenu.Add(AppPrefCmd); // Добавляем Preferences как пункт в меню приложения
10391
10492 AppSepCmd := TMenuItem.Create(Self);
10593 AppSepCmd.Caption := '-';
10694 AppMenu.Add(AppSepCmd); // добавляем разделитель меню
10795 end;
10896```
10997
11098## См. также
11199
112100- [[Introduction to platform-sensitive development]]
113101- [[Mac Preferences Read and Write]]
114102- [[Mac Show Application Title, Version, and Company]]
115103- [[Add an Apple Help Book to your macOS app]]
116104- [[macOS Programming Tips]]
117105
118106---
119107*From the Free Pascal wiki, page "Mac Preferences and About Menu/ru", as it stood on 2020-08-20 after a change by Zoltanleo, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history