Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранение настроек формы и всех компонентов в файл [D5, WinME]


James007 ©   (2002-06-23 16:36:00) 

Помогите пожалуйста, Мне надо пример в котором бы сохранялись настройки формы и настройки всех компонентов в файл(фомат файла такой же как в dfm), т.к. я создаю некоторые компоненты динамически(по нажатию кнопок), и мне надо, чтобы при следующем запуске все оставалось на своих местах(сохранение в ini или реестр не удобно).Напишите пример, плиз.


Юрий Зотов   (2002-06-29 17:48:00) [1]

Должно работать. Правда, код неэффективный - огромное количество ненужных операций по созданию и уничтожению компонентов.


James007   (2002-06-29 17:39:00) [2]

А я немного сделал по другому, вроде бы работает, проверял, надо еще на одном примере проверить!!!!!
Application.Initialize;
if FileExists("Meneger.dat") then
begin
Application.CreateForm(TFMain, FMain);
FMain.DestroyComponents;
FMain:=TFMain(ReadComponentResFile("Meneger.dat", FMain));
end
else
Application.CreateForm(TFMain, FMain);


Юрий Зотов   (2002-06-25 19:28:00) [3]

Что-то в этом духе.


var
P: pointer;
begin
Application.Initialize;
if FileExists("Initemp.dfm") then
begin
Form1 := TForm1(ReadComponentResFile("Initemp.dfm", TForm1.CreateNew(Form1)));
P := @Application.MainForm;
P^ := Form1
end
else Application.CreateForm(TForm1, Form1);
Application.Run;
WriteComponentResFile("Initemp.dfm", Form1);
end.


James007   (2002-06-24 16:33:00) [4]

Юрий Зотов, ответьте на последнее сообщение


James007   (2002-06-24 11:07:00) [5]

Вот у меня получилось, но одно "но", у меня открывается форма
со всеми сохраненными настройками, а потом сверху открывается форма программы
т.е. Application.CreateForm(TForm1, Form1); открывает две формы.
и все изменения записываются только для формы, которая создана
на этапе создания программы. Но вторая форма открывается с изменениями
как мне сделать, чтобы показывалась форма с изменениями???????????????
Вот мой пример:
Application.Initialize;
if FileExists("Initemp.dfm") then
Form1:=TForm1(ReadComponentResFile("Initemp.dfm", TForm1.CreateNew(Form1)));
Application.CreateForm(TForm1, Form1);
Application.Run;
WriteComponentResFile("Initemp.dfm", Form1);


Юрий Зотов   (2002-06-23 23:40:00) [6]

Не Button сохраняйте, а ФОРМУ!!! Всю разом!!!

Форма - это же тоже компонент - вот она вместе со всем своим содержимым и запишется. И ничего запоминать не нужно.

Естественно, прочитать сама себя форма не сможет, это надо делать извне (например, из другой формы). Выше я давал пример чтения.


James007   (2002-06-23 22:43:00) [7]

Вот я пробовал написать сохранение(для примера):
//Здесь я создаю на форме кнопку
procedure TForm1.Button3Click(Sender: TObject);
begin
BButton:=TButton.Create(Self);
BButton.Parent:=Self;
BButton.Caption:="Привет";
WriteComponentResFile("Initemp.dfm", BButton);
end;
//Здесь я читаю из файла свойства кнопки
procedure TForm1.FormCreate(Sender: TObject);
begin
//Здесь должна быть проверка на наличие файла.
Form1:=TForm1(ReadComponentResFile("Initemp.dfm",
TForm1.CreateNew(BButton)));
end;

Правильно ли я делаю????????
И один вопрос, если правильно, то мне нужно будет запоминать имя каждого компонента для записи .


Юрий Зотов   (2002-06-23 21:37:00) [8]

> Я же создаю программно некоторые компоненты,
> т.е. в dfm. их нет.

Без разницы. WriteComponentResFile запишет Вам новый DFM с заданным Вами же именем. ЛЮБЫМ именем и даже с ЛЮБЫМ расширением (но по внутреннему формату это будет точно такой же DFM, что и обычный). И в нем будет все, что Вы на момент записи насоздавали - только следите, чтобы Owner"ом при создании новых компонентов назначалась именно форма.

Соответственно, ReadComponentResFile это же самое состояние формы и восстановит - то, которое было на момент записи файла.


James007   (2002-06-23 21:01:00) [9]

Я же создаю программно некоторые компоненты, т.е. в dfm. их нет.
Потом я их удаляю. Просто такая программа в которой мне нужно создавать программно компоненты. И всякий раз мне надо запоминать все компоненты, какие есть на форме и их свойства. Я где-то видел как это делать, но уже не помню(там надо было до запуска формы проверить изменилась ли форма, потом,если изменилась считать с файла, а после завершения программы запомнить все изменения формы в файл совершенно такой же как и dfm).
Напишите пожалуйста небольшой пример. ИЛИ КТО ЗНАЕТ, ГДЕ ТАКОЕ НАПИСАНО, НАПИШИТЕ ССЫЛКУ.


James007   (2002-06-23 20:34:00) [10]

Я же создаю программно некоторые компоненты, т.е. в dfm. их нет.
Напишите пожалуйста не большой пример.


Юрий Зотов   (2002-06-23 19:57:00) [11]

Об этом и говорилось.


James007   (2002-06-23 19:12:00) [12]

А если прогараммно, а не через компоненты, сохранять ввиде свойств объектов как в dfm????


Юрий Зотов   (2002-06-23 17:15:00) [13]

См. Write/ReadComponentResFile - пишете всю форму разом и получаете DFM в ресурсовом формате. Читаете так:

Form1 := TForm1(ReadComponentResFile(..., TForm1.CreateNew(...)));


VID   (2002-06-23 17:09:00) [14]

ну коли неудобно, то юзай компонент RxFormStorage из пакета RxLib - удобнее нету :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо