Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пользовательские настройки и их хранение, Пользовательские настройки и их хранение 
V
    Опции темы
VasRip
Дата 28.5.2013, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 16.9.2006
Где: РоссийскаяХохлянд ия

Репутация: нет
Всего: нет



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


В каком формате и если есть компоненты для хранения подскажите плизз
PM MAIL   Вверх
Dem_max
Дата 28.5.2013, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Ini File


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
VasRip
Дата 29.5.2013, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 16.9.2006
Где: РоссийскаяХохлянд ия

Репутация: нет
Всего: нет



говорят Ini  прошлый век. может есть еще какие варианты кроме INI ???


просто хочется рассмотреть все варианты и выбрать лучший  
PM MAIL   Вверх
Usper
Дата 29.5.2013, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Нагло врут! smile Как вариант хранить в реестре.


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Dem_max
Дата 29.5.2013, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Ну еще XML


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Alexeis
Дата 29.5.2013, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



 XML хорошо, поскольку позволяет хранить удобно древовидные структуры данных, юникодные строки и т.д. , но есть у него один минус - не умеет хранить массивы. С этой точки зрения лучше формат JSON . Он более современный, позволяет хранить не только древовидные структуры, но и массивы, и массивы объектов, но тоже имеет один недостаток - у него юникодные строки хранятся в нечитабельном для блокнота виде. 
  У билдера есть встроенные классы для работы с JSON, впрочем и MSXML тоже поддерживается.

  Если деревья не нужны, а уровень вложенности простой, то ini, почему нет. Возможно, его считали несовременным, потому что раньше его принято было хранить в папке с программой, в этом случае он был общим для всех пользователей. Но ведь ничего не мешает разместить его в пользовательской директории APPDATA . 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
VasRip
Дата 29.5.2013, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 16.9.2006
Где: РоссийскаяХохлянд ия

Репутация: нет
Всего: нет



ну ясно спс БОЛЬШОЕ
PM MAIL   Вверх
Alexeis
Дата 29.5.2013, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



  А ну да, еще Ini файлы по спецификации не поддерживают юникод. Если и можно работать в юникоде, то специальными библиотеками, выходящими за рамки спецификации. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Usper
Дата 2.7.2013, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



А где лучше хранить ini-файлы? Было бы не плохо положить рядом с исполняемым файлом, но ведь исполняемый файл может оказаться в папке куда у него не будет прав на запись... И как проверить, что файл вообще создан, если пользоваться встроенным в билдер классом TIniFile?


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
xvr
Дата 2.7.2013, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Usper @  2.7.2013,  09:00 Найти цитируемый пост)
А где лучше хранить ini-файлы?

У пользователя в профиле. Доступен в виде переменной окружения APPDATA (альтернатива - USERPROFILE)


PM MAIL   Вверх
Usper
Дата 2.7.2013, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Но всё-таки есть ли возможность что-нибудь записать в файл, который будет лежать рядом с исполняемым, где-нибудь в program files?


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Alca
Дата 2.7.2013, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Ну так попробуй  smile 


--------------------
PM WWW ICQ Skype Jabber   Вверх
Usper
Дата 2.7.2013, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Дык попробовал, не выходит ничего  smile стандартный класс TIniFile старичка билдера 6 ничего не делает (даже никаких сообщений об ошибке не выдаёт) на вин7, если я пытаюсь сохранить настройки рядышком в ProgramFiles. Понятно, что можно найти пользовательскую папку, но не хотелось бы smile 


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Alca
Дата 2.7.2013, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Код покажи


--------------------
PM WWW ICQ Skype Jabber   Вверх
volatile
Дата 2.7.2013, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



Цитата(Usper @  2.7.2013,  16:28 Найти цитируемый пост)
старичка билдера 6 ничего не делает (даже никаких сообщений об ошибке не выдаёт) на вин7, если я пытаюсь сохранить настройки рядышком в ProgramFiles.

Чтобы писать реально в ProgramFiles/*.* нужно запускать программу с правами админа.

Для старых программ вин7 перенаправляет запись в какой-то из каталогов пользователя (точно не помню).
Так что искать этот ини файл, в ProgramFiles не нужно.

PM MAIL   Вверх
Dem_max
Дата 3.7.2013, 04:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Цитата(Alexeis @ 29.5.2013,  10:49)
А ну да, еще Ini файлы по спецификации не поддерживают юникод. Если и можно работать в юникоде, то специальными библиотеками, выходящими за рамки спецификации.

Не знаю как у тебя, но у меня в Ini файле хранятся юникодные строки, и пользуюсь обычным TIniFile !!!!


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Usper
Дата 3.7.2013, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



volatile, у меня в ProgramFiles в семёрке в каталоге оперы валяются какие-то логи. Значит ли это, что всё-таки можно исхитрится и записать что-нибудь в ProgramFiles без админских прав? На самом деле мне не ini файл нужно сохранять, а результаты калибровки прибора (по сути просто текстовый файл с цифрами) и как-то не логично их хранить где-то отдельно. Но похоже другого выхода нет.


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
xvr
Дата 3.7.2013, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Usper @  3.7.2013,  09:51 Найти цитируемый пост)
Значит ли это, что всё-таки можно исхитрится и записать что-нибудь в ProgramFiles без админских прав?

Почти. Вот на wiki есть статья по этому поводу

PM MAIL   Вверх
volatile
Дата 3.7.2013, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



Цитата(Usper @  3.7.2013,  09:51 Найти цитируемый пост)
у меня в ProgramFiles в семёрке в каталоге оперы валяются какие-то логи.

Скорей всего это логи инсталятора, который всегда запускаецца с админ правами.
Опера врядли будет туда писать.

Добавлено через 7 минут и 18 секунд
Вообще по идеологии M$, в ProgramFiles обычная программа не должна ничего писать.
Если нужно что-то общее для всех, то есть соответствующий каталог "\Users\All Users\" или что-то типо того.

Добавлено через 13 минут и 9 секунд
Цитата(volatile @  3.7.2013,  11:43 Найти цитируемый пост)
 "\Users\All Users\" или что-то типо того. 

есть переменная окружения ALLUSERSPROFILE

PM MAIL   Вверх
Usper
Дата 3.7.2013, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Да нет, это логи краша Java-машины smile правда они подозрительно старые.
В общем картина вцелом ясна, нужно забить на порочную практику писать куда хочешь и что хочешь smile даже если это вызывает определённые (на самом деле довольно сильные! приборов к компу может быть подключено несколько и калибровочные данные у каждого свои, пока это решается созданием отдельных папочек для каждого прибора) неудобства. Всем спасибо!



--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
VasRip
Дата 8.7.2013, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 16.9.2006
Где: РоссийскаяХохлянд ия

Репутация: нет
Всего: нет



ну первое это права админа) а второе не вижу не каких проблем писать рядом с исполнимым файлом
пишу
Код

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
TIniFile *Ini=new  TIniFile(GetCurrentDir()+"/options.ini"); //настройк
Ini->WriteInteger("Edits","DBGrid1",DBGrid1->Width);
Ini->WriteInteger("Edits","DBGrid1_ID_OBJECT",DBGrid1->Columns->Items[0]->Width);
Ini->WriteInteger("Edits","DBGrid1_FIO",DBGrid1->Columns->Items[1]->Width);
Ini->WriteInteger("Edits","DBGrid1_ADDRESS",DBGrid1->Columns->Items[2]->Width);

Ini->WriteInteger("Edits","DBGrid2",DBGrid2->Width);
Ini->WriteInteger("Edits","DBGrid2_ID_OBJECT",DBGrid2->Columns->Items[0]->Width);
Ini->WriteInteger("Edits","DBGrid2_DAT",DBGrid2->Columns->Items[1]->Width);
Ini->WriteInteger("Edits","DBGrid2_RESULT",DBGrid2->Columns->Items[4]->Width);

delete Ini;
}


читаю
Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{



TIniFile *Ini=new  TIniFile(GetCurrentDir()+"/options.ini"); //настройк
 DBGrid1->Width=Ini->ReadInteger("Edits","DBGrid1",0);
 DBGrid1->Columns->Items[0]->Width=Ini->ReadInteger("Edits","DBGrid1_ID_OBJECT",0);
 DBGrid1->Columns->Items[1]->Width=Ini->ReadInteger("Edits","DBGrid1_FIO",0);
 DBGrid1->Columns->Items[2]->Width=Ini->ReadInteger("Edits","DBGrid1_ADDRESS",0);
 DBGrid1->Font->Size=Ini->ReadInteger("Font","Font_size",0);
 DBGrid1->Font->Name=Ini->ReadString("Font","Font_Font","000");

 DBGrid2->Width=Ini->ReadInteger("Edits","DBGrid2",0);
 DBGrid2->Columns->Items[0]->Width=Ini->ReadInteger("Edits","DBGrid2_ID_OBJECT",0);
 DBGrid2->Columns->Items[1]->Width=Ini->ReadInteger("Edits","DBGrid2_DAT",0);
 DBGrid2->Columns->Items[4]->Width=Ini->ReadInteger("Edits","DBGrid2_RESULT",0);
 DBGrid2->Font->Size=Ini->ReadInteger("Font","Font_size",0);
 DBGrid2->Font->Name=Ini->ReadString("Font","Font_Font","000");
 delete Ini;



}


Единственная проблема это права админа. 

PM MAIL   Вверх
volatile
Дата 8.7.2013, 22:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



1.
Цитата(VasRip @  8.7.2013,  13:54 Найти цитируемый пост)
Единственная проблема это права админа. 

а никто и не говорил что там какие-то проблемы, кроме прав админа.

2.
Цитата(VasRip @  8.7.2013,  13:54 Найти цитируемый пост)
 TIniFile(GetCurrentDir()+"/options.ini"); //настройк

Вы пишете не в каталог программы, а в текущую директорию.
То что они у вас по случаю совпадают, не означает что так будет всегда.

PM MAIL   Вверх
Dem_max
Дата 9.7.2013, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Цитата

То что они у вас по случаю совпадают, не означает что так будет всегда.

Все верно, а иногда current dir может выдавать хитрый путь куда либо !!!


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0979 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.