• 0
Tarik02

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

Вопросы

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 ответов на этот вопрос

  • 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

Да, я чуть позже скину пример, кстати еще немного информации TJSONObject был перенесен в System.JSON

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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-строку в файл

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От MAD_EVAL
      Добрый день!
      Сохраняю настройки приложения в текстовый файл, с расширением set на андроиде в директорию из TDocumentsPath.
      Android 5 Тело для тестов Blackview A8 (root)
      При запуске Clean Master удаляется этот файлик.
      Как защитить файл от удаления?
    • От Rusland
      Как вызвать стандартные настройки GPS чтобы пользователь мог самостоятельно включить геолокацию?
    • От 97mik
      Как сделать, чтобы при выходе из приложения значение переменной Integer сохранялось в место, не доступное пользователю, то есть чтобы он не мог изменить, а при входе в приложение переменная опять загружалась.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу