Difference between revisions of "Mac Preferences Read and Write"

From Lazarus wiki
Jump to navigationJump to search
m (macOS only classification; added syntax highlighting wiki markup)
Line 1: Line 1:
For those who want to read and write preferences for an application on the Mac, this can be done using the following methods:
+
{{Platform only|macOS|macOS|macOS}}
 +
 
 +
For those who want to read and write preferences for a macOS application, this can be done using the following methods:
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 5: Line 7:
 
! CODE FOR READING PREFERENCES
 
! CODE FOR READING PREFERENCES
 
|-
 
|-
|
+
|}
 +
 
 +
<syntaxhighlight lang="pascal">
 
   uses MacOSAll, CFPreferences;
 
   uses MacOSAll, CFPreferences;
  
Line 52: Line 56:
 
     end;
 
     end;
 
   end;
 
   end;
|}
+
</syntaxhighlight>
  
  
Line 60: Line 64:
 
! CODE FOR WRITING PREFERENCES
 
! CODE FOR WRITING PREFERENCES
 
|-
 
|-
|
+
|}
 +
 
 +
<syntaxhighlight lang="pascal">
 
   uses MacOSAll, CFPreferences;
 
   uses MacOSAll, CFPreferences;
  
Line 119: Line 125:
 
         ShowMessage(E.ClassName+' error raised, with message : '+E.Message);
 
         ShowMessage(E.ClassName+' error raised, with message : '+E.Message);
 
     end;
 
     end;
 +
</syntaxhighlight>
  
 
[[File:Prefs1.png]]
 
[[File:Prefs1.png]]
|}
+
 
  
 
== See also ==
 
== See also ==

Revision as of 04:25, 3 July 2019

macOSlogo.png

This article applies to macOS only.

See also: Multiplatform Programming Guide

For those who want to read and write preferences for a macOS application, this can be done using the following methods:

CODE FOR READING PREFERENCES
  uses MacOSAll, CFPreferences;

  var
    IValid: Boolean;
    Pref: Integer;

  procedure TForm1.FormCreate(Sender: TObject);
  begin
    try
       Pref := CFPreferencesGetAppIntegerValue(CFStr('Check1'),kCFPreferencesCurrentApplication,IValid);
       if (Pref = 1) then
       begin
          CheckBox1.Checked := true;
       end
       else begin
          CheckBox1.Checked := false;
       end;
       Pref := CFPreferencesGetAppIntegerValue(CFStr('Check2'),kCFPreferencesCurrentApplication,IValid);
       if (Pref = 1) then
       begin
          CheckBox2.Checked := true;
       end
       else begin
          CheckBox2.Checked := false;
       end;
       Pref := CFPreferencesGetAppIntegerValue(CFStr('Check3'),kCFPreferencesCurrentApplication,IValid);
       if (Pref = 1) then
       begin
          CheckBox3.Checked := true;
       end
       else begin
          CheckBox3.Checked := false;
       end;
       Pref := CFPreferencesGetAppIntegerValue(CFStr('Check4'),kCFPreferencesCurrentApplication,IValid);
       if (Pref = 1) then
       begin
          CheckBox4.Checked := true;
       end
       else begin
          CheckBox4.Checked := false;
       end;
    except
      on E : Exception do
        ShowMessage(E.ClassName+' error raised, with message : '+E.Message);
    end;
  end;


CODE FOR WRITING PREFERENCES
  uses MacOSAll, CFPreferences;

  var
    ItemName: CFStringRef;
    ItemVal: CFPropertyListRef;

  procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
  begin
    try
       if (CheckBox1.Checked) then
       begin
          ItemName := CFStr('Check1');
          ItemVal := CFStringCreateWithPascalString(kCFAllocatorDefault,'1',kCFStringEncodingUTF8);
          CFPreferencesSetAppValue(ItemName,ItemVal,kCFPreferencesCurrentApplication);
       end
       else begin
          ItemName := CFStr('Check1');
          ItemVal := CFStringCreateWithPascalString(kCFAllocatorDefault,'0',kCFStringEncodingUTF8);
          CFPreferencesSetAppValue(ItemName,ItemVal,kCFPreferencesCurrentApplication);
       end;
       if (CheckBox2.Checked) then
       begin
          ItemName := CFStr('Check2');
          ItemVal := CFStringCreateWithPascalString(nil,'1',kCFStringEncodingUTF8);
          CFPreferencesSetAppValue(ItemName,ItemVal,kCFPreferencesCurrentApplication);
       end
       else begin
          ItemName := CFStr('Check2');
          ItemVal := CFStringCreateWithPascalString(kCFAllocatorDefault,'0',kCFStringEncodingUTF8);
          CFPreferencesSetAppValue(ItemName,ItemVal,kCFPreferencesCurrentApplication);
       end;
       if (CheckBox3.Checked) then
       begin
          ItemName := CFStr('Check3');
          ItemVal := CFStringCreateWithPascalString(kCFAllocatorDefault,'1',kCFStringEncodingUTF8);
          CFPreferencesSetAppValue(ItemName,ItemVal,kCFPreferencesCurrentApplication);
       end
       else begin
          ItemName := CFStr('Check3');
          ItemVal := CFStringCreateWithPascalString(kCFAllocatorDefault,'0',kCFStringEncodingUTF8);
          CFPreferencesSetAppValue(ItemName,ItemVal,kCFPreferencesCurrentApplication);
       end;
       if (CheckBox4.Checked) then
       begin
          ItemName := CFStr('Check4');
          ItemVal := CFStringCreateWithPascalString(kCFAllocatorDefault,'1',kCFStringEncodingUTF8);
          CFPreferencesSetAppValue(ItemName,ItemVal,kCFPreferencesCurrentApplication);
       end
       else begin
          ItemName := CFStr('Check4');
          ItemVal := CFStringCreateWithPascalString(kCFAllocatorDefault,'0',kCFStringEncodingUTF8);
          CFPreferencesSetAppValue(ItemName,ItemVal,kCFPreferencesCurrentApplication);
       end;
       CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
     except
     on E : Exception do
         ShowMessage(E.ClassName+' error raised, with message : '+E.Message);
     end;

Prefs1.png


See also