Сохранение состояния формы | |
---|---|
ZenTigra Сообщений: 514 Дата регистрации: 03.12.2004 |
Возникла необходимость сохранят состояние формы, ведь всем пользователям не угодишь...
Например, на форме есть Grid, нужно предоставить пользователям самим настраивать в каком порядке размещать колонки, и какие из них отображать. Или выбор по умолчанию какой из Option1 должен быть активным в Optiongroup1 и т.п. Сейчас пробую, но что-то не очень нравиться. Не могу ничего придумать универсального, чтоб подходило к разным формам. Хочется эти настройки сохранять в таблице, для КАЖДОГО пользователя. Вопрос чисто теоретически, посоветуйте как это лучше реализовать? И где лучше разместить кнопку или меню, для сохранение/восстановления состояния формы. |
Re: Сохранение состояния формы | |
---|---|
lulgu Автор Сообщений: 1838 Дата регистрации: 30.11.2016 |
Лучше всего сохранять такие данные поименно в ini-файле, примеры легко найти.
Кнопки не нужны, сохранение параметров выполняется в Destroy формы, их восстановление в Init. Если нужно универсальное решение, то проще для размещения этих кодов создать класс Custom, который добавляется на форму. Сохранение данных в таблице или др. отличается только кодами вызова. Другие способы работы с пересчетом объектов обычно громоздки. |
Re: Сохранение состояния формы | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Полезные места для сохранения ГДЕ:
GETENV("AppData") = 'C:\users\user\AppData\Roaming' - в XP - users\user\Application Data GETENV("ALLUSERSPROFILE") = 'C:\ProgramData' - в XP - users\All Users GETENV("ProgramData") = 'C:\ProgramData' - в XP - пусто GETENV("PUBLIC") = 'C:\users\PUBLIC' - в XP - пусто GETENV('HOMEDRIVE')+GETENV('HOMEPATH') = 'C:\users\user' Сохранить ЧТО: - можно отметить обьекты на форме, координаты которых хочется сохранить, например, непустым свойство Tag (и сделать подпрограмму-обходчик всех обьектов, включая вложенные, в поиске таких обьектов и сохранении их координат) - или завести подпрограмму Сохранить(обьект-форма, имя_на_форме, имя_свойства), и форма (при уничтожении) пусть сама вызывает подпрограмму нужное кол. раз, и при старте восстанавливает ... |
Re: Сохранение состояния формы | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
У меня для грида сделано так:
1. Табличка с гридамИ для юзеров проги
2. В Grid.Init: - получаем "путь" относительно формы - на основании "пути" вынимаем из таблички колонки грида, вызываем ХП - расставляем их ширину, ColumnOrder 3. В Grid.Destroy: - проходим по гриду, формируем временный курсор настроек - в ХП передаём курсор настроек, сохраняем грид в табличке ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Сохранение состояния формы | |
---|---|
AndyNigmatec Сообщений: 1552 Откуда: Волгоград Дата регистрации: 28.06.2015 |
я как-то привык такие настройки сохранять в реестре ... проблем нету, правда я не сохраняю положение отдельных контролов на форме - не было нужды как-то. Вот ширина/порядок/сортировка для грида - да, вполне себе сохраняю в виде четырех строк в реестре - один раз прописал в классе грида - и пользую ))), а также положение и размер формочек ну и прочие параметры по необходимости - и все разумеется без всяких вопросов юзверю - при закрытии сохраняется, при ините - восстанавливаю.
В реестр обычно пишу в ветку - HKEY_CURRENT_USER\ИМЯ_ПРИЛОЖЕНИЯ\ИМЯ_ФОРМЫ - проблем с правами на запись не возникало ни у кого |
Re: Сохранение состояния формы | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Не пробовал в реестре сохранять (боюсь этой Виндовс-махины для сохранения моей разной ерунды). Если на удаленном столе выполняется прога, то какой эффект имеет "сохранение в реестре"? Сохраняется ли после перезапуска удаленного рабочего стола (сохраняется скорее всего, но, чтобы не пробовать, - это ответ "да"?)
|
Re: Сохранение состояния формы | |
---|---|
AndyNigmatec Сообщений: 1552 Откуда: Волгоград Дата регистрации: 28.06.2015 |
сохраняется все ))) причем для того юзверя под которым в систему (винду) вошли - ветка то - HKEY_CURRENT_USER
|
Re: Сохранение состояния формы | |
---|---|
Sawradym Сообщений: 2244 Откуда: Винница Дата регистрации: 15.05.2007 |
А если с другого рабочего места вошел? Не, не годится! ------------------ |
Re: Сохранение состояния формы | |
---|---|
AndyNigmatec Сообщений: 1552 Откуда: Волгоград Дата регистрации: 28.06.2015 |
- я же говорю - все зависит от потребности задачи, у меня не было необходимости такие настройки строго под пользователя проги хранить/подгружать - если непременно нужно именно это - то тады сие в базе сохранять нужно, типа как PaulWist выше написал |
Re: Сохранение состояния формы | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
|
Re: Сохранение состояния формы | |
---|---|
ZenTigra Сообщений: 514 Дата регистрации: 03.12.2004 |
Именно, практика показала, что нужны настройки под каждого пользователя или (группы пользователей).
Автоматическое сохранение настроек также не вариант, не всегда это нужно. И есть необходимость восстановление состояние формы в первоначальное состояние. Сейчас у меня реализовано сохранение настроек на каждом компьютере, а это неудобно, так как приходиться настраивать каждое рабочее место. Тому решил улучшить эту функцию. Первое - это сделать новую структуру для сохранения настроек, и сохранять ее на сервере. Сама структуру таблиц еще в процессе (вот некоторые поля) Главная таблица Key - уникальный номер Form - имя формы User - Код пользователя/группы пользователей BackColor - цвет формы (да есть такие кадры, которые просят индивидуальный цвет для формы) и т.п. (размер формы, положение...) И настройки для объектов которые размещены на форме (думаю будут две таблицы одна для настройки Grid-ов вторая для объектов Check, Optiongroup...) Key - для связи с главной формой Clas - вид объекта (Grid, Combo и т.п.) Name - имя объекта Value- состояние объекта (Check, Optiongroup и т.п.) Order- положение поля (для Grid) Width- размер поля (для Grid) Visible - отображать объекта (для Grid) Использовать поле memo для сохранения настроек боюсь, не внушают они мне доверия. А можно ли изменить вот это меню, добавив туда парочку своих пунктов [attachment 29114 Menu2.png] Исправлено 2 раз(а). Последнее : ZenTigra, 11.03.18 11:07 |
Re: Сохранение состояния формы | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Это да, настроил всё себе под 1920*1080, потом зашёл со старенькой машинки где монитор больше 800*600 не тянет - кака печаль, не развернуло формы/гриды на 4 таких экрана... Впрочем, для любителей всего странного есть в винде Roaming profiles - в т.ч. раздел реестра HKEY_CURRENT_USER "путешествует" за юзером. Надеюсь всё же что на самом деле в HKEY_CURRENT_USER\Software\ИМЯ_ПРИЛОЖЕНИЯ\... У нас в старые времена путь сохранения был HKEY_CURRENT_USER\Software\Имя_компании\ИМЯ_ПРИЛОЖЕНИЯ\1.0\ - т.е. в именем конторы и номером версии (хотя история показывает что "номер версии" это практически ненужная предосторожность - он реально не меняется) внутри ветки Layout\Windows, Layout\Grids - а там уже REG_BINARY значения под именами типа frmSome.pgfMain.pagClient.grd.Column1 Сейчас, впрочем, я бы не стал в реестре это хранить. Да, это нужно, и это реализовано (удалить ветку реестра, или набор значений по шаблону не составляет труда - после этого первый запуск проходит с настройками "как разраб задал"). Так же эксопрт/импорт делается (тривиальным батником с reg export/import делается) - на случай переустановок, или того же "переноса" настроек от одного пользователя другому. Ничего кроме размера/положения/состояния форм, размера/состояния/порядка колонок грида, в отдельных случаях положения splitter-а не сохранялось. Т.к. вообще-то всё прочее НЕ является "параметрами визуального отображения". Цвета - было дело, но там скорее к бизнес-значениям это относилось (как покрасить "просроченное", а как "неполные/некорректные данные"), а не тупо "цвет кнопок". Какие ещё "переключатели"? Это ж, очевидно, какой-то фильтр - а значит по сути "условия фильтра". Не следует это мешать с визуальными параметрами. Если очень нужно, можно делать "именованные пресеты/наборы настроек фильтра". Заморачиваться с их разделением между разными пользователями я бы не стал. Только хранить в настройках пользователя "последний использованный набор для такой-то формы/отчёта". Естественно, параметры должны хранится исходя из их бизнес-смысла, а никак не имён текстбоксов/спиннеров/комбобоксов где эти данные вводятся. И да, код вычитывания и "применения" набора к конкретной форме с её контролами НЕ будет универсальным (да и не должен быть). Можно (через АПИ), но не нужно. 90% юзеров про системное меню не в курсе, да и не очень это удобно. Проще пункт обычного "главного меню", или кнопку на тулбаре... Да, у нас тоже визуальное расположение запоминалось автоматом, никаких кнопок "запомнить", "прочитать и применить" не было. Хотя вариант типа закрытия формы с зажатым Shift - чтобы конкретно в этот раз ничего НЕ записывалось - имеет право на жизнь. Лишние кнопки - нет, они лишние ------------------ WBR, Igor |
Re: Сохранение состояния формы | |
---|---|
AndyNigmatec Сообщений: 1552 Откуда: Волгоград Дата регистрации: 28.06.2015 |
- да именно так - просто по по памяти набросал ... подводит зараза ))) Исправлено 1 раз(а). Последнее : AndyNigmatec, 11.03.18 20:05 |
Re: Сохранение состояния формы | |
---|---|
lulgu Автор Сообщений: 1838 Дата регистрации: 30.11.2016 |
И это все вместо пол-страницы кода. |
© 2000-2024 Fox Club  |