Перейти к содержанию
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 эмодзи.

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

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

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

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