Difference between revisions of "Mac Show Application Title, Version, and Company/ru"

From Free Pascal wiki
Jump to navigationJump to search
 
Line 10: Line 10:
  
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
// CODE FOR SHOWING APPLICATION TITLE, VERSION, AND COMPANY
+
// КОД ДЛЯ ПОКАЗА НАЗВАНИЯ, ВЕРСИИ И КОМПАНИИ ПРИЛОЖЕНИЯ
 
uses MacOSAll, CarbonProc, StrUtils;
 
uses MacOSAll, CarbonProc, StrUtils;
  
Line 46: Line 46:
 
     StaticTextAppTitle.Caption := Application.Title;
 
     StaticTextAppTitle.Caption := Application.Title;
 
     BundleID := GetInfoPlistString('CFBundleIdentifier');
 
     BundleID := GetInfoPlistString('CFBundleIdentifier');
     '''// CompanyName is presumed to be in the form of: com.Company.AppName'''
+
     '''// Предполагается, что имя компании имеет формат: com.Company.AppName'''
 
     CompanyName := AnsiMidStr(BundleID,AnsiPos('.',BundleID)+1,Length(BundleID));
 
     CompanyName := AnsiMidStr(BundleID,AnsiPos('.',BundleID)+1,Length(BundleID));
 
     CompanyName := AnsiMidStr(CompanyName,0,AnsiPos('.',CompanyName)-1);
 
     CompanyName := AnsiMidStr(CompanyName,0,AnsiPos('.',CompanyName)-1);
Line 59: Line 59:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Sample output:
+
Пример вывода:
  
 
[[File:About1.png]]
 
[[File:About1.png]]
  
== See also ==
+
== См.также ==
 
*[[Mac Preferences and About Menu]]
 
*[[Mac Preferences and About Menu]]
 
*[[Show Application Title, Version, and Company]].
 
*[[Show Application Title, Version, and Company]].

Latest revision as of 14:54, 18 August 2020

macOSlogo.png

Эта статья относится только к macOS.

См. также: Multiplatform Programming Guide

English (en) русский (ru)

Warning-icon.png

Предупреждение: Это работает, только если у программного обеспечения есть пакет приложений; в противном случае см. пожалуйста 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;

Пример вывода:

About1.png

См.также