Sign in Join
Wiki copytemporary

Mac Show Application Title, Version, and Company/ru: what changed

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

Title: Mac Show Application Title, Version, and Company/ru

OldNewLine
1+*(macOS only)*
2+
3+> **Warning:** Это работает, только **если** у программного обеспечения есть пакет приложений; в противном случае см. пожалуйста [[Show Application Title, Version, and Company/ru|Show Application Title, Version, and Company]]
4+
5+Для тех, кто хочет показать название приложения, версию и компанию для приложения в Mac OSX, это можно сделать с помощью следующего метода.
6+
7+**Осторожно** *CFBundleGetMainBundle* на самом деле не возвращает **nil**, если у приложения нет пакета. Вместо этого он пытается создать этот дескриптор. См. [документацию Apple](https://developer.apple.com/documentation/corefoundation/1537085-cfbundlegetmainbundle?language=objc). Таким образом, мы должны также проверить наличие *ValueRef*.
8+
9+``` pascal
10+// КОД ДЛЯ ПОКАЗА НАЗВАНИЯ, ВЕРСИИ И КОМПАНИИ ПРИЛОЖЕНИЯ
11+uses MacOSAll, CarbonProc, StrUtils;
12+
13+var
14+ BundleID: String;
15+ BundleName: String;
16+ BundleRef: CFBundleRef;
17+ BundleVer: String;
18+ CompanyName: String;
19+ KeyRef: CFStringRef;
20+ ValueRef: CFTypeRef;
21+
22+function GetInfoPlistString(const KeyName : string) : string;
23+begin
24+ try
25+ Result := '';
26+ BundleRef := CFBundleGetMainBundle;
27+ if BundleRef = nil then Exit; {Executable not in an app bundle?}
28+ KeyRef := CFStringCreateWithPascalString(nil,KeyName,kCFStringEncodingUTF8);
29+ ValueRef := CFBundleGetValueForInfoDictionaryKey(BundleRef, KeyRef);
30+ if ValueRef = nil then Exit; {Executable not in an app bundle!}
31+ if CFGetTypeID(ValueRef) <> CFStringGetTypeID then Exit; {Value not a string?}
32+ Result := CFStringToStr(ValueRef);
33+ except
34+ on E : Exception do
35+ ShowMessage(E.Message);
36+ end;
37+ FreeCFString(KeyRef);
38+end;
39+
40+procedure TForm1.FormCreate(Sender: TObject);
41+begin
42+ try
43+ Form1.Caption := 'About '+Application.Title;
44+ StaticTextAppTitle.Caption := Application.Title;
45+ BundleID := GetInfoPlistString('CFBundleIdentifier');
46+ '''// Предполагается, что имя компании имеет формат: com.Company.AppName'''
47+ CompanyName := AnsiMidStr(BundleID,AnsiPos('.',BundleID)+1,Length(BundleID));
48+ CompanyName := AnsiMidStr(CompanyName,0,AnsiPos('.',CompanyName)-1);
49+ BundleVer := GetInfoPlistString('CFBundleVersion');
50+ StaticTextAppVer.Caption := Application.Title+' version '+BundleVer;
51+ StaticTextCompany.Caption := CompanyName;
52+ except
53+ on E : Exception do
54+ ShowMessage(E.Message);
55+ end;
56+end;
57+```
58+
59+Пример вывода:
60+
61+<figure>
62+<img src="About1.png" title="About1.png" />
63+<figcaption>About1.png</figcaption>
64+</figure>
65+
66+## См.также
67+
68+- [[Mac Preferences and About Menu]]
69+- [[Show Application Title, Version, and Company]].
70+
71+---
72+*From the Free Pascal wiki, page "Mac Show Application Title, Version, and Company/ru", as it stood on 2020-08-18 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).*
73+Category: Code Snippets
74+Category: macOS

Back to history