Перейти к содержанию
Fire Monkey от А до Я
  • 0

Универсальный способ хранения настроек


Tarik02

Вопрос

Какой универсальный способ для хранения настроек существует для основных платформ, или для каждой платформы свой код, но использование этого кода для всех будет одинаково. Я имею в виду, дайте код инициализации TIniFile для каждой из платформ.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Хранение информации о настройках в Ini файле на вой взгляд это прошлый век. Используй структуру XML или JSON.

 

Чтоб использовать JSON подключи стандартные модули Data.DBXJSON, Data.DBXJSONCommon, Data.DBXJSONReflect в свой проект и используй объекты TJSONobject, TJSONArray и другие. 

Ссылка на комментарий
  • 0

Хранение информации о настройках в Ini файле на вой взгляд это прошлый век. Используй структуру XML или JSON.

 

Чтоб использовать JSON подключи стандартные модули Data.DBXJSON, Data.DBXJSONCommon, Data.DBXJSONReflect в свой проект и используй объекты TJSONobject, TJSONArray и другие. 

Спасибо, можно код, или я поищу сам.

Ссылка на комментарий
  • 0
  • Администраторы

Я бы воспользовался новым механизмом, появившимся в XE7 Save State. Унифицировано, гибко. Описание работы и примеры, в документации: FireMonkey Save State

Ссылка на комментарий
  • 0

Я бы воспользовался новым механизмом, появившимся в XE7 Save State. Унифицировано, гибко. Описание работы и примеры, в документации: FireMonkey Save State

Да, но это для сбережения состояния приложения, а мне нужно для настроек. И я уже частично реализовал вышесказанный способ.

Ссылка на комментарий
  • 0

Пример по использованию JSON

uses 
   System.IOUtils, System.JSON;

procedure TForm1.btLoadClick(Sender: TObject);
var
  AOptions: TJSONObject;
  AGroup: TJSONObject;
  AParam: TJSONValue;
begin
  if FileExists(FFileName) then
  begin
    AOptions := TJSONObject(TJSONObject.ParseJSONValue(TFile.ReadAllText(FFileName)));

    AGroup := TJSONObject(AOptions.GetValue('group1'));
    if AGroup <> nil then
    begin
      AParam := AGroup.GetValue('edit1');
      if AParam <> nil then
        Edit1.Text := TJSONString(AParam).Value;

      AParam := AGroup.GetValue('edit2');
      if AParam <> nil then
        Edit2.Text := TJSONNumber(AParam).Value;
    end;

    AGroup := TJSONObject(AOptions.GetValue('group2'));
    if AGroup <> nil then
    begin
      AParam := AGroup.GetValue('checkbox1');
      if AParam <> nil then
        CheckBox1.IsChecked := AParam is TJSONTrue;
    end;
  end;
end;

procedure TForm1.btSaveClick(Sender: TObject);
var
  AOptions: TJSONObject;
  AGroup: TJSONObject;
  AParam: TJSONValue;
  APair: TJSONPair;
begin
  AOptions := TJSONObject.Create;

  AGroup := TJSONObject.Create;
  AGroup.AddPair('edit1', Edit1.Text);
  if Edit2.Text.Trim <> '' then
    AGroup.AddPair('edit2', TJSONNumber.Create(Edit2.Text));

  AOptions.AddPair('group1', AGroup);

  AGroup := TJSONObject.Create;
  if CheckBox1.IsChecked then
    AGroup.AddPair('checkbox1', TJSONTrue.Create)
  else
    AGroup.AddPair('checkbox1', TJSONFalse.Create);

  AOptions.AddPair('group2', AGroup);

  TFile.WriteAllText(FFileName, AOptions.ToString);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  {$IFDEF ANDROID}
  //Если файл во внутреннем накопителе то GetDocumentsPath
  //Если файл на внешнем накопителе то GetSharedDocumentsPath
  FFileName := TPath.Combine(TPath.GetSharedDocumentsPath, 'Options.json');
  {$ENDIF}

  {$IFDEF MSWINDOWS}
  FFileName := ExtractFilePath(ParamStr(0)) + 'Options.json';
  {$ENDIF}
end;

Также почитай http://www.webdelphi.ru/2011/10/rabota-s-json-v-delphi-2010-xe2/

Primer.zip

Ссылка на комментарий
  • 0

юзай Rest.Json.

 

пишешь свой класс настроек, например:

TSettings = class
  private 
    fname: string;
    fpass : string;
  public
    property name: string read fname write fname;
    property pass: string read fass write fpass;
end;

// вытягиваешь json-строку из файла

Settings:= TJson.JsonToObject<TSettings >( 'строка с json, которая из файла' );

// что-то поменял

s:= TJson.ObjectToJsonString( Settings );

// сохранил json-строку в файл
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...