Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2008, 22:00   #1
Veiron
Форумчанин
 
Аватар для Veiron
 
Регистрация: 01.12.2007
Сообщений: 346
По умолчанию Сохранение формы

Можно ли использовать какой нибудь ActivX или код что бы сохранять/загружать параметры формы и ее компонентов не прибегая к ручному writeln/readln в текстовый файл?
Win 10 x64 | VS 2015 | MSSQL 2014
autovestitv.ru
Veiron вне форума Ответить с цитированием
Старый 11.01.2008, 23:20   #2
AnalogXP
Пользователь
 
Аватар для AnalogXP
 
Регистрация: 11.01.2008
Сообщений: 42
По умолчанию

Если вы о сохранении размера, состояния окна, то я пользуюсь вот этим:

Код:
procedure SaveWndPos(frm: TControl; cClass: string = '');
var
  rct: TRect;
  oReg: TRegistry;
begin
  {--- определить параметры ---}
  rct := frm.BoundsRect;
  if (cClass = '') then
    cClass := frm.ClassName;
  {--- сохранить в реестре ---}
  oReg := TRegistry.Create();
  with (oReg) do
  try
    RootKey := HKEY_CURRENT_USER;
    {--- ... размер окна ---}
    if (OpenKey(cRegKey + cClass, True)) then
    begin
      if (frm is TForm) then
        WriteInteger('Show', Ord((frm as TForm).WindowState));
      if (not (frm is TForm) or
        ((frm as TForm).WindowState = wsNormal)) then
      begin
        WriteInteger('Left', rct.Left);
        WriteInteger('Top', rct.Top);
        WriteInteger('Right', rct.Right);
        WriteInteger('Bottom', rct.Bottom);
      end;
    end;
    CloseKey();
  finally
    CloseKey();
    Free;
  end;
end;
//--------------------------------------------------------------------------
procedure SetWndPos(frm: TControl; lSetSize: Boolean = True;
  cClass: string = '');
var
  rct: TRect;
  oReg: TRegistry;
  nShow: Integer;
begin
  nShow := Ord(wsNormal);
  {--- текущие параметры (на случай, если нет в реестре) ---}
  rct := frm.BoundsRect;
  if (cClass = '') then
    cClass := frm.ClassName;
  if (frm is TForm) then
    nShow := Ord((frm as TForm).WindowState);
  {--- считать из реестра ---}
  oReg := TRegistry.Create();
  with (oReg) do
  try
    RootKey := HKEY_CURRENT_USER;
    {--- ... размер окна ---}
    if (OpenKeyReadOnly(cRegKey + cClass)) then
    begin
      if (frm is TForm) then
        nShow := ReadInteger('Show');
      if (ValueExists('Left')) then
        rct.Left := ReadInteger('Left');
      if (ValueExists('Top')) then
        rct.Top := ReadInteger('Top');
      if (ValueExists('Right')) then
        rct.Right := ReadInteger('Right');
      if (ValueExists('Bottom')) then
        rct.Bottom := ReadInteger('Bottom');
    end;
    CloseKey();
  finally
    CloseKey();
    Free;
  end;
  {--- применить считанное к окну ---}
  if (lSetSize) then
    frm.BoundsRect := rct
  else
  begin
    frm.Top := rct.Top;
    frm.Left := rct.Left;
  end;
  if ((frm is TForm) and (nShow = Ord(wsMaximized))) then
    (frm as TForm).WindowState := wsMaximized;
end;
И при создании формы (FormCreate) пишем:

Код:
SetWndPos(Self);
А при закрытии (FormClose):
Код:
SaveWndPos(Self);
AnalogXP вне форума Ответить с цитированием
Старый 11.01.2008, 23:25   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от Veiron Посмотреть сообщение
Можно ли использовать какой нибудь ActivX или код что бы сохранять/загружать параметры формы и ее компонентов не прибегая к ручному writeln/readln в текстовый файл?
Специально для этого существуют INI файлы. По сути это текстовый файл имеющий особую структуру. В Дельфи есть модуль IniFiles упрощающий работу с ними. Также написано много статей на эту тему (если книги нет).
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 11.01.2008, 23:37   #4
AnalogXP
Пользователь
 
Аватар для AnalogXP
 
Регистрация: 11.01.2008
Сообщений: 42
По умолчанию

А вот работа и с INI файлами, для сохранения настроек:

Код:
uses ..., IniFiles;
Код:
procedure TForm1.FormCreate(Sender: TObject);
var Ini: TIniFile;
begin  
   Ini := TIniFile.Create(ChangeFileExt(Application.ExeName,'.INI'));
   try
       Form1.Top:=ini.ReadInteger('Position','Top', 100);
       Form1.Left:=ini.ReadInteger('Position','Left', 100);
       ...
    finally
       ini.Free;
    end;
Код:
Procedure TForm1..FormClose(Sender: TObject);
var ini: Tinifile;
begin
  Ini := TIniFile.Create(ChangeFileExt(Application.ExeName,'.INI'));
    try
      ini.WriteInteger('Position','Top', Form1.Top);
      ini.WriteInteger('Position', 'Left', Form1.Left);
      ...
    finally
     ini.Free;
    end;
end;
AnalogXP вне форума Ответить с цитированием
Старый 11.01.2008, 23:41   #5
Veiron
Форумчанин
 
Аватар для Veiron
 
Регистрация: 01.12.2007
Сообщений: 346
По умолчанию

AnalogXP
Не просто формы, а еще и компонентов например состояние CheckBox и т.д. но все равно спасибо, думаю скоро пригодиться.

mutabor
Где можно взять модуль IniFiles ? Просто программа стала обладать большим количеством компонентов и уже накладно становиться просто записывать данные в текстовый файл и тем более добавлять.
Win 10 x64 | VS 2015 | MSSQL 2014
autovestitv.ru
Veiron вне форума Ответить с цитированием
Старый 11.01.2008, 23:48   #6
AnalogXP
Пользователь
 
Аватар для AnalogXP
 
Регистрация: 11.01.2008
Сообщений: 42
По умолчанию

Veiron, так смотри мой пример про INI. Я же специально ставил троеточие, чтобы ты понял что там еще кое чего можно писать. Про CheckBox говоришь? Так пиши:

В FormCreate
CheckBox1.Checked:=ini.ReadBool('Ch eckBox','Checked', true);

В FormClose
ini.WriteBool('CheckBox', 'Checked', CheckBox1.Checked);
AnalogXP вне форума Ответить с цитированием
Старый 11.01.2008, 23:57   #7
Veiron
Форумчанин
 
Аватар для Veiron
 
Регистрация: 01.12.2007
Сообщений: 346
По умолчанию

Спасибо постараюсь разобраться... выглядит несколько лучше текстовика (экономнее).
Win 10 x64 | VS 2015 | MSSQL 2014
autovestitv.ru
Veiron вне форума Ответить с цитированием
Старый 12.01.2008, 00:11   #8
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от Veiron Посмотреть сообщение
Спасибо постараюсь разобраться... выглядит несколько лучше текстовика (экономнее).
он и есть текстовик, с ним просто удобнее работать
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сохранение 1234 Общие вопросы Delphi 11 30.08.2008 11:47
Сохранение и печать формы Технолог Компоненты Delphi 1 17.05.2008 14:42
Сохранение области формы Marsik Помощь студентам 11 15.11.2007 21:00
Сохранение Lonix Общие вопросы Delphi 1 22.04.2007 00:15
Сохранение в TXT фйл M@rsel Общие вопросы Delphi 6 22.12.2006 16:12