Mac Preferences Read and Write

From Lazarus wiki
Revision as of 07:25, 22 July 2012 by Cringer000 (talk | contribs) (Moving example photo to the bottom part which is where it belonged the start with.)
Jump to navigationJump to search

For those who want to read and write preferences for an application on the Mac, 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