| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Узнать размеры присвоенные в Design-time |
| Автор: Bose 20.9.2006, 12:40 |
| У меня есть форма. На форме грид. Пользователь волен менять размеры столбцов в гриде. Изменённые размеры автоматически сохраняются при закрытии формы и загружаются при старте. Я хочу добавить возможность сброса размеров установленных пользователем. Т.е. иметь возможность установить размеры, заданные при создании программы(в Design-time). Единственный вариант, который мне пока приходит в голову - это удаление сохранённых данных и перезапуск формы. Но этот вариант не представляется удобным. Кто-нибудь может подсказать другой способ? |
| Автор: Alexeis 20.9.2006, 12:56 |
| А почему бы не сохранять это все в запись и потом читать из нее все нужные поля? |
| Автор: Elfebet 20.9.2006, 13:06 | ||
ну смотри.. если ты сохраняеш настройки с помощью класса TiniFiles, то на верное используеш так
т.е. ты можеш просто удалить значение str1 в секции 'section' и в итоге если значение этого нет то подставиться по умолчанию 'пусто' ну и при закрытии формы просто переписывать ini файл. другой вариант (самый ламерский), создать процедуру где будут прописаны все натройки которые по умочанию. |
| Автор: Bose 20.9.2006, 13:20 | ||||
alexeis1, не совсем понял... Ты предлагаешь, запоминать текущие установки перед загрузкой сохранённых? И если нужно сбросить сохранённые установки, то и присваивать их контролам(в смысле гриду)?
Первый вариант - потребует закрытия и открытия формы, что неприемлимо. Второй вариант не подходит - форм много, свойств тоже много. Всё меняется. Я не готов убивать кучу времени на поддержание процедур в актуальном состоянии. Наверное всё-таки стоит уточнить. Грид я привёл в качестве примера. Сохраняется положение формы, положения сплиттеров, размеры контролов, привязанных к сплиттеру, размеры столбцов в гридах, и ещё несколько свойств. Моя идея в следующем: ведь при старте программы все размеры контролов инициализируются данными из Executable файла. Неужели нельзя запустить процедуру инициализации ещё раз - вручную? |
| Автор: Elfebet 20.9.2006, 13:26 | ||
ну дык вызови процедуру сохранения и потом загрузки, не закрывая форму. |
| Автор: Bose 20.9.2006, 13:35 | ||
Тогда получится, что сохранятся текущие размеры. Если же я просто загружу сохранённые размеры, то получится, что я загружу размеры сохранённые в предыдущий раз. Если же я очищё секцию с сохранёнными размерами, а потом попробую их загрузить, то получится, что размеры останутся такие же как и есть Добавлено @ 13:43 точно! Просто создам второй файл с установками, куда буду записывать Default'ные настройки перед загрузкой пользовательских настроек. И в случае необходимости читать оттуда. |
| Автор: Snowy 20.9.2006, 13:43 |
| Дефолтовые значения сидят в ресурсах. Если очень захотеть, можно их оттуда вытащить. Но проще автомат - пересоздание |
| Автор: Elfebet 20.9.2006, 13:46 |
| я понял ты применяеш параметры для сохранения только по закрытии формы. ну тада так: перед тем как загрузить рамеры при открытии формы сохрани куда нить рамеры текущие (т.е. которые в дизайн-тайме), ну потом если нада сбросить рамеры ты загружаеш те размеры которые сохранил для котрых они по умолчанию |
| Автор: Alexeis 20.9.2006, 13:48 | ||
Да тогда уж лучше создавать его один раз инсталятором, чем при каждом запуске. |
| Автор: Yanis 20.9.2006, 14:03 |
| Я же говорю, что я сегодня непонятливый какой то, так что не обессутьте Может просто создать ещё один экземпляр формы (или чего там нужно...) и прочитать нужные значения? Они должны быть "поумолчанию". |
| Автор: Bose 20.9.2006, 14:07 | ||
Elfebet, да - именно так.
Чем лучше? Мнусы я вижу такие: для инсталлятора этот файл придётся создать мне самому. когда изменятся сохраняемые свойства, этот файл придётся обновлять. Если же о сохраняемых свойствах будет заботиться само приложение, то у отпадает масса проблем: Во-первых, данные всегда будут соответствовать самым последним изменениям в билде. Во-вторых, контроль будет происходить автоматом. В-третьих, не придётся делать инсталлятор Добавлено @ 14:11 Yanis, к сожалению не подходит. Некоторые формы создаются и инициализируются довольно долго. Заставлять пользователя со слабым компьютером ждать пару минут пока сбросятся установки, садизм В принципе, решение, которое меня устраивает найдено. Но если кто-то предложит более гибкий способ - то Добро пожаловать! С удовольствием выслушаю! Всем спасибо! |
| Автор: Alexeis 20.9.2006, 14:21 | ||
Вариант Snowy самый изящный вот например фрагмент ресурса одного из проектов
Если подумать, то можно написать процедурку, для поиска значений всех нужных свойств. Т.е. вообще не нужно будет ничего сохранять. |
| Автор: Yanis 20.9.2006, 14:38 | ||
Можно "превратить" этот код в компонент и тогда любое свойство можно будет прочитать непосредственно из него (компонента). P. S. Keyword: StringToComponent |
| Автор: Bose 20.9.2006, 14:52 |
| Snowy, alexeis1 - спасибо, вариант действительно интересный! Правда, судя по-всему, более трудоёмкий, чем сохранение данных в Ini. Буду думать. Yanis, спасибо за наводку! Нашёл в хелпе пример. p.s. вот, StringToComponent ещё упоминается http://forum.vingrad.ru/index.php?showtopic=35505&unread=1&hl=stringtocomponent |