Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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:=ini.ReadString('section', 'str1', 'пусто');

т.е. ты можеш просто удалить значение str1 в секции 'section' и в итоге если значение этого нет то подставиться по умолчанию 'пусто' ну и при закрытии формы просто переписывать ini файл.

другой вариант (самый ламерский), создать процедуру где будут прописаны все натройки которые по умочанию.

Автор: Bose 20.9.2006, 13:20
Цитата

А почему бы не сохранять это все в запись и потом читать из нее все нужные поля?


alexeis1, не совсем понял... Ты предлагаешь, запоминать текущие установки перед загрузкой сохранённых? И если нужно сбросить сохранённые установки, то и присваивать их контролам(в смысле гриду)?


Цитата

т.е. ты можеш просто удалить значение str1 в секции 'section' и в итоге если значение этого нет то подставиться по умолчанию 'пусто' ну и при закрытии формы просто переписывать ini файл.

другой вариант (самый ламерский), создать процедуру где будут прописаны все натройки которые по умочанию.

Первый вариант - потребует закрытия и открытия формы, что неприемлимо. 

Второй вариант не подходит - форм много, свойств тоже много. Всё меняется. Я не готов убивать кучу времени на поддержание процедур в актуальном состоянии.



Наверное всё-таки стоит уточнить. Грид я привёл в качестве примера. Сохраняется положение формы, положения сплиттеров, размеры контролов, привязанных к сплиттеру, размеры столбцов в гридах, и ещё несколько свойств.

Моя идея в следующем: ведь при старте программы все размеры контролов инициализируются данными из Executable файла. Неужели нельзя запустить процедуру инициализации ещё раз - вручную? smile 

Автор: Elfebet 20.9.2006, 13:26
Цитата

Первый вариант - потребует закрытия и открытия формы, что неприемлимо

ну дык вызови процедуру сохранения и потом загрузки, не закрывая форму.

Автор: Alexeis 20.9.2006, 13:30
Цитата(Bose @  20.9.2006,  12:40 Найти цитируемый пост)
Изменённые размеры автоматически сохраняются при закрытии формы и загружаются при старте. 

До загрузки исходные значения можно же сохранить!

Автор: Bose 20.9.2006, 13:35
Цитата

ну дык вызови процедуру сохранения и потом загрузки, не закрывая форму.


Тогда получится, что сохранятся текущие размеры. 

Если же я просто загружу сохранённые размеры, то получится, что я загружу размеры сохранённые в предыдущий раз. 

Если же я очищё секцию с сохранёнными размерами, а потом попробую их загрузить, то получится, что размеры останутся такие же как и есть smile

Добавлено @ 13:43 
Цитата(alexeis1 @  20.9.2006,  13:30 Найти цитируемый пост)
До загрузки исходные значения можно же сохранить!


точно!  smile  Спасибо за идею alexeis1! 

Просто создам второй файл с установками, куда буду записывать Default'ные настройки перед загрузкой пользовательских настроек. И в случае необходимости читать оттуда.

Автор: Snowy 20.9.2006, 13:43
Дефолтовые значения сидят в ресурсах.
Если очень захотеть, можно их оттуда вытащить.
Но проще автомат - пересоздание

Автор: Elfebet 20.9.2006, 13:46
я понял ты применяеш параметры для сохранения только по закрытии формы.
ну тада так:
перед тем как загрузить рамеры при открытии формы сохрани куда нить рамеры текущие (т.е. которые в дизайн-тайме), ну потом если нада сбросить рамеры ты загружаеш те размеры которые сохранил для котрых они по умолчанию smile 

Автор: Alexeis 20.9.2006, 13:48
Цитата(Bose @  20.9.2006,  13:35 Найти цитируемый пост)
Просто создам второй файл с установками, куда буду записывать Default'ные настройки перед загрузкой пользовательских настроек

Да тогда уж лучше создавать  его один раз инсталятором, чем при каждом запуске.

Автор: Yanis 20.9.2006, 14:03
Я же говорю, что я сегодня непонятливый какой то, так что не обессутьте smile
Может просто создать ещё один экземпляр формы (или чего там нужно...) и прочитать нужные значения? Они должны быть "поумолчанию".

Автор: Bose 20.9.2006, 14:07
Elfebet, да - именно так.  smile 


Цитата(alexeis1 @  20.9.2006,  13:48 Найти цитируемый пост)
Да тогда уж лучше создавать  его один раз инсталятором, чем при каждом запуске.

Чем лучше? 

Мнусы я вижу такие:
для инсталлятора этот файл придётся создать мне самому.
когда изменятся сохраняемые свойства, этот файл придётся обновлять.

Если же о сохраняемых свойствах будет заботиться само приложение, то у отпадает масса проблем:
Во-первых, данные всегда будут соответствовать самым последним изменениям в билде.
Во-вторых, контроль будет происходить автоматом.
В-третьих, не придётся делать инсталлятор smile

Добавлено @ 14:11 
Yanis, к сожалению не подходит. Некоторые формы создаются и инициализируются довольно долго. Заставлять пользователя со слабым компьютером ждать пару минут пока сбросятся установки, садизм smile 

В принципе, решение, которое меня устраивает найдено. Но если кто-то предложит более гибкий способ - то Добро пожаловать! С удовольствием выслушаю!

Всем спасибо! smile 

Автор: Alexeis 20.9.2006, 14:21
Цитата(Bose @  20.9.2006,  14:07 Найти цитируемый пост)
Но если кто-то предложит более гибкий способ - то Добро пожаловать!

Вариант 
Snowy самый изящный вот например фрагмент ресурса одного из проектов
Код

object Form1: TForm1
  Left = 102
  Top = 124
  Width = 574
  Height = 420
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object pnl2: TPanel
    Left = 0
    Top = 0
    Width = 566
    Height = 393
    Align = alClient
    TabOrder = 0
    object cht1: TChart
      Left = 1
      Top = 1
................................


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

Автор: Yanis 20.9.2006, 14:38
Цитата(alexeis1 @  20.9.2006,  15:21 Найти цитируемый пост)
Если подумать, то можно написать процедурку, для поиска значений всех нужных свойств.

Можно "превратить" этот код в компонент и тогда любое свойство можно будет прочитать непосредственно из него (компонента).
P. S. Keyword: StringToComponent

Автор: Bose 20.9.2006, 14:52
Snowy, alexeis1 - спасибо, вариант действительно интересный! 

Правда, судя по-всему, более трудоёмкий, чем сохранение данных в Ini. Буду думать.

Yanis, спасибо за наводку! Нашёл в хелпе пример. smile 

p.s. вот, StringToComponent ещё упоминается http://forum.vingrad.ru/index.php?showtopic=35505&unread=1&hl=stringtocomponent

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)