Sign in Join
Wiki copytemporary

Mac Show Application Title, Version, and Company/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> **Warning:** Это работает, только **если** у программного обеспечения есть пакет приложений; в противном случае см. пожалуйста [[Show Application Title, Version, and Company/ru|Show Application Title, Version, and Company]]
44
55Для тех, кто хочет показать название приложения, версию и компанию для приложения в Mac OSX, это можно сделать с помощью следующего метода.
66
77**Осторожно** *CFBundleGetMainBundle* на самом деле не возвращает **nil**, если у приложения нет пакета. Вместо этого он пытается создать этот дескриптор. См. [документацию Apple](https://developer.apple.com/documentation/corefoundation/1537085-cfbundlegetmainbundle?language=objc). Таким образом, мы должны также проверить наличие *ValueRef*.
88
99``` pascal
1010// КОД ДЛЯ ПОКАЗА НАЗВАНИЯ, ВЕРСИИ И КОМПАНИИ ПРИЛОЖЕНИЯ
1111uses MacOSAll, CarbonProc, StrUtils;
1212
1313var
1414 BundleID: String;
1515 BundleName: String;
1616 BundleRef: CFBundleRef;
1717 BundleVer: String;
1818 CompanyName: String;
1919 KeyRef: CFStringRef;
2020 ValueRef: CFTypeRef;
2121
2222function GetInfoPlistString(const KeyName : string) : string;
2323begin
2424 try
2525 Result := '';
2626 BundleRef := CFBundleGetMainBundle;
2727 if BundleRef = nil then Exit; {Executable not in an app bundle?}
2828 KeyRef := CFStringCreateWithPascalString(nil,KeyName,kCFStringEncodingUTF8);
2929 ValueRef := CFBundleGetValueForInfoDictionaryKey(BundleRef, KeyRef);
3030 if ValueRef = nil then Exit; {Executable not in an app bundle!}
3131 if CFGetTypeID(ValueRef) <> CFStringGetTypeID then Exit; {Value not a string?}
3232 Result := CFStringToStr(ValueRef);
3333 except
3434 on E : Exception do
3535 ShowMessage(E.Message);
3636 end;
3737 FreeCFString(KeyRef);
3838end;
3939
4040procedure TForm1.FormCreate(Sender: TObject);
4141begin
4242 try
4343 Form1.Caption := 'About '+Application.Title;
4444 StaticTextAppTitle.Caption := Application.Title;
4545 BundleID := GetInfoPlistString('CFBundleIdentifier');
4646 '''// Предполагается, что имя компании имеет формат: com.Company.AppName'''
4747 CompanyName := AnsiMidStr(BundleID,AnsiPos('.',BundleID)+1,Length(BundleID));
4848 CompanyName := AnsiMidStr(CompanyName,0,AnsiPos('.',CompanyName)-1);
4949 BundleVer := GetInfoPlistString('CFBundleVersion');
5050 StaticTextAppVer.Caption := Application.Title+' version '+BundleVer;
5151 StaticTextCompany.Caption := CompanyName;
5252 except
5353 on E : Exception do
5454 ShowMessage(E.Message);
5555 end;
5656end;
5757```
5858
5959Пример вывода:
6060
61-<figure>
62-<img src="About1.png" title="About1.png" />
63-<figcaption>About1.png</figcaption>
64-</figure>
61+![](/wiki-images/a/a7/About1.png)
6562
6663## См.также
6764
6865- [[Mac Preferences and About Menu]]
6966- [[Show Application Title, Version, and Company]].
7067
7168---
7269*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).*
7370Category: Code Snippets
7471Category: macOS

Back to history