Mac Show Application Title, Version, and Company/ru
From Lazarus wiki
Jump to navigationJump to search
Эта статья относится только к macOS.
См. также: Multiplatform Programming Guide
│ English (en) │ русский (ru) │
Предупреждение: Это работает, только если у программного обеспечения есть пакет приложений; в противном случае см. пожалуйста Show Application Title, Version, and Company
Для тех, кто хочет показать название приложения, версию и компанию для приложения в Mac OSX, это можно сделать с помощью следующего метода.
Осторожно CFBundleGetMainBundle на самом деле не возвращает nil, если у приложения нет пакета. Вместо этого он пытается создать этот дескриптор. См. документацию Apple. Таким образом, мы должны также проверить наличие ValueRef.
// КОД ДЛЯ ПОКАЗА НАЗВАНИЯ, ВЕРСИИ И КОМПАНИИ ПРИЛОЖЕНИЯ
uses MacOSAll, CarbonProc, StrUtils;
var
BundleID: String;
BundleName: String;
BundleRef: CFBundleRef;
BundleVer: String;
CompanyName: String;
KeyRef: CFStringRef;
ValueRef: CFTypeRef;
function GetInfoPlistString(const KeyName : string) : string;
begin
try
Result := '';
BundleRef := CFBundleGetMainBundle;
if BundleRef = nil then Exit; {Executable not in an app bundle?}
KeyRef := CFStringCreateWithPascalString(nil,KeyName,kCFStringEncodingUTF8);
ValueRef := CFBundleGetValueForInfoDictionaryKey(BundleRef, KeyRef);
if ValueRef = nil then Exit; {Executable not in an app bundle!}
if CFGetTypeID(ValueRef) <> CFStringGetTypeID then Exit; {Value not a string?}
Result := CFStringToStr(ValueRef);
except
on E : Exception do
ShowMessage(E.Message);
end;
FreeCFString(KeyRef);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
try
Form1.Caption := 'About '+Application.Title;
StaticTextAppTitle.Caption := Application.Title;
BundleID := GetInfoPlistString('CFBundleIdentifier');
'''// Предполагается, что имя компании имеет формат: com.Company.AppName'''
CompanyName := AnsiMidStr(BundleID,AnsiPos('.',BundleID)+1,Length(BundleID));
CompanyName := AnsiMidStr(CompanyName,0,AnsiPos('.',CompanyName)-1);
BundleVer := GetInfoPlistString('CFBundleVersion');
StaticTextAppVer.Caption := Application.Title+' version '+BundleVer;
StaticTextCompany.Caption := CompanyName;
except
on E : Exception do
ShowMessage(E.Message);
end;
end;
Пример вывода: