Sign in Join
Wiki copytemporary

Mac Preferences and About Menu/ru: what changed

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

Title: Mac Preferences and About Menu/ru

OldNewLine
1+*(macOS only)*
2+
3+Некоторые элементы должны отображаться в меню приложения по умолчанию в строке меню macOS вашего приложения. Хотя Lazarus автоматически добавляет:
4+
5+- Services (Службы)
6+- Hide MyApp (Скрыть MyApp)
7+- Hide Others (Скрыть остальное)
8+- Show All (Показать все)
9+- Quit MyApp (Выйти из MyApp)
10+
11+Lazarus не добавляет пункт меню «О моем приложении» или «Настройки ...». Чтобы добавить эти два элемента в то же меню приложения, что и «Выход», вам нужно проделать небольшой трюк.
12+
13+Добавьте компонент MainMenu со вкладки Standard палитры компонентов в основную форму. Создайте пункт меню и измените его свойство `Caption` в инспекторе объектов на имя вашего приложения только для справки. Затем в этом меню добавьте три пункта подменю со следующими заголовками: "About MyApp"(О моем приложении), «-» (разделитель) и "Preferences..."(Настройки).
14+
15+<figure>
16+<img src="MenuItems3new.jpg" title="MenuItems3new.jpg" />
17+<figcaption>MenuItems3new.jpg</figcaption>
18+</figure>
19+
20+Назначьте ярлык "Command" пункту меню "Preferences..."(Настройки) редактора ярлыков (выберите свойство `ShortCut` пункта меню в Инспекторе объектов и щелкните точки с многоточием рядом с ним). После отметки мета-клавиши смените надпись в комбобоксе "Unknown" на запятую, нажав сначала клавишу "Grab key", а затем запятую на клавиатуре, в результате ваш ярлык будет выглядеть так:
21+
22+<figure>
23+<img src="MenuItemsGrab.png" title="MenuItemsGrab.png" />
24+<figcaption>MenuItemsGrab.png</figcaption>
25+</figure>
26+
27+Наконец, чтобы получить эти элементы в меню приложения MyApp, мы должны изменить заголовок первого элемента меню в обработчике событий OnCreate главной формы следующим образом:
28+
29+``` pascal
30+ procedure TForm1.FormCreate(Sender: TObject);
31+ var
32+ AppMenu : TMenuItem;
33+ begin
34+ AppMenu := TMenuItem.Create(Self); // Меню приложения
35+ AppMenu.Caption := #$EF#$A3#$BF; // Юникодный символ логотипа Apple
36+ MainMenu.Items.Insert(0, AppMenu);
37+ end;
38+```
39+
40+После перекомпиляции вашего приложения и его запуска вы заметите, что "About MyApp" и "Preferences..." были добавлены в меню MyApp, где они и должны быть.
41+
42+<figure>
43+<img src="MenuItems4new.png" title="MenuItems4new.png" />
44+<figcaption>MenuItems4new.png</figcaption>
45+</figure>
46+
47+Вы заметили проблему? Вы действительно хотите назвать свое приложение «MyApp», а не «My App»?
48+
49+Нет, вы не можете просто так изменить файл проекта «program MyApp» на «Program My App», иначе вам сообщат "MyApp.lpr(1,11) Fatal: Syntax error, ";" expected but "identifier APP" found"(ошибка синтаксиса: ожидается ";", но найден идентификатор APP).
50+
51+Решение состоит в том, чтобы изменить файл Info.plist вашего приложения, открыв пакет вашего приложения, перейдя к Contents, дважды щелкнув Info.plist и используя редактор Xcode plist, чтобы изменить значение ключа «Bundle name» на строку "My App" и сохранить его. Теперь, когда вы запустите"MyApp", оно отобразится как "My App".
52+
53+Of course you would also now need to change the "About MyApp" caption too :-) Конечно, теперь вам также нужно будет изменить заголовок "About MyApp" :-)
54+
55+Все? Нет. Пункты меню, созданные Lazarus, по-прежнему показывают "Hide MyApp"(Скрыть MyApp) и "Quit MyApp"(Выйти из MyApp). Чтобы изменить их на "My App", вам необходимо изменить обработчик событий `OnCreate` основной формы, как показано ниже:
56+
57+``` pascal
58+ procedure TForm1.FormCreate(Sender: TObject);
59+ var
60+ AppMenu : TMenuItem;
61+ begin
62+ Application.Title := 'My App';
63+ AppMenu := TMenuItem.Create(Self); // Меню приложения
64+ AppMenu.Caption := #$EF#$A3#$BF; // Юникодный символ логотипа Apple
65+ MainMenu.Items.Insert(0, AppMenu);
66+ end;
67+```
68+
69+И вот окончательный результат:
70+
71+<figure>
72+<img src="macOSMenuFinal.png" title="macOSMenuFinal.png" />
73+<figcaption>macOSMenuFinal.png</figcaption>
74+</figure>
75+
76+Чтобы связать параметры меню с действием, добавьте TActionList в основную форму, добавьте действия для About и Preferences (отредактируйте свойства, а затем создайте соответствующие обработчики событий `OnExecute` для каждого действия), а затем измените обработчик событий `OnCreate` основной формы как ниже:
77+
78+``` pascal
79+procedure TForm1.FormCreate(Sender: TObject);
80+ var
81+ AppMenu : TMenuItem;
82+ AppAboutCmd : TMenuItem;
83+ AppSepCmd : TMenuItem;
84+ AppPrefCmd : TMenuItem;
85+ begin
86+ Application.Title := 'My App';
87+
88+ AppMenu := TMenuItem.Create(Self); // Меню приложения
89+ AppMenu.Caption := #$EF#$A3#$BF; // Юникодный символ логотипа Apple
90+ MainMenu.Items.Insert(0, AppMenu);
91+
92+ AppAboutCmd := TMenuItem.Create(Self);
93+ AppAboutCmd.Action:= ActionList1.Actions[1];
94+ AppMenu.Add(AppAboutCmd); // Добавляем About как пункт в меню приложения
95+
96+ AppSepCmd := TMenuItem.Create(Self);
97+ AppSepCmd.Caption := '-';
98+ AppMenu.Add(AppSepCmd); // добавляем разделитель меню
99+
100+ AppPrefCmd := TMenuItem.Create(Self);
101+ AppPrefCmd.Action:= ActionList1.Actions[2];
102+ AppMenu.Add(AppPrefCmd); // Добавляем Preferences как пункт в меню приложения
103+
104+ AppSepCmd := TMenuItem.Create(Self);
105+ AppSepCmd.Caption := '-';
106+ AppMenu.Add(AppSepCmd); // добавляем разделитель меню
107+ end;
108+```
109+
110+## См. также
111+
112+- [[Introduction to platform-sensitive development]]
113+- [[Mac Preferences Read and Write]]
114+- [[Mac Show Application Title, Version, and Company]]
115+- [[Add an Apple Help Book to your macOS app]]
116+- [[macOS Programming Tips]]
117+
118+---
119+*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