Форум: "Основная";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
ВнизСохранение настроек формы и всех компонентов в файл Найти похожие ветки
← →
James007 (2002-06-23 16:36) [0]Помогите пожалуйста, Мне надо пример в котором бы сохранялись настройки формы и настройки всех компонентов в файл(фомат файла такой же как в dfm), т.к. я создаю некоторые компоненты динамически(по нажатию кнопок), и мне надо, чтобы при следующем запуске все оставалось на своих местах(сохранение в ini или реестр не удобно).Напишите пример, плиз.
← →
VID (2002-06-23 17:09) [1]ну коли неудобно, то юзай компонент RxFormStorage из пакета RxLib - удобнее нету :)
← →
Юрий Зотов (2002-06-23 17:15) [2]См. Write/ReadComponentResFile - пишете всю форму разом и получаете DFM в ресурсовом формате. Читаете так:
Form1 := TForm1(ReadComponentResFile(..., TForm1.CreateNew(...)));
← →
James007 (2002-06-23 19:12) [3]А если прогараммно, а не через компоненты, сохранять ввиде свойств объектов как в dfm????
← →
Юрий Зотов (2002-06-23 19:57) [4]Об этом и говорилось.
← →
James007 (2002-06-23 20:34) [5]Я же создаю программно некоторые компоненты, т.е. в dfm. их нет.
Напишите пожалуйста не большой пример.
← →
James007 (2002-06-23 21:01) [6]Я же создаю программно некоторые компоненты, т.е. в dfm. их нет.
Потом я их удаляю. Просто такая программа в которой мне нужно создавать программно компоненты. И всякий раз мне надо запоминать все компоненты, какие есть на форме и их свойства. Я где-то видел как это делать, но уже не помню(там надо было до запуска формы проверить изменилась ли форма, потом,если изменилась считать с файла, а после завершения программы запомнить все изменения формы в файл совершенно такой же как и dfm).
Напишите пожалуйста небольшой пример. ИЛИ КТО ЗНАЕТ, ГДЕ ТАКОЕ НАПИСАНО, НАПИШИТЕ ССЫЛКУ.
← →
Юрий Зотов (2002-06-23 21:37) [7]> Я же создаю программно некоторые компоненты,
> т.е. в dfm. их нет.
Без разницы. WriteComponentResFile запишет Вам новый DFM с заданным Вами же именем. ЛЮБЫМ именем и даже с ЛЮБЫМ расширением (но по внутреннему формату это будет точно такой же DFM, что и обычный). И в нем будет все, что Вы на момент записи насоздавали - только следите, чтобы Owner"ом при создании новых компонентов назначалась именно форма.
Соответственно, ReadComponentResFile это же самое состояние формы и восстановит - то, которое было на момент записи файла.
← →
James007 (2002-06-23 22:43) [8]Вот я пробовал написать сохранение(для примера):
//Здесь я создаю на форме кнопку
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 23:40) [9]Не Button сохраняйте, а ФОРМУ!!! Всю разом!!!
Форма - это же тоже компонент - вот она вместе со всем своим содержимым и запишется. И ничего запоминать не нужно.
Естественно, прочитать сама себя форма не сможет, это надо делать извне (например, из другой формы). Выше я давал пример чтения.
← →
James007 (2002-06-24 11:07) [10]Вот у меня получилось, но одно "но", у меня открывается форма
со всеми сохраненными настройками, а потом сверху открывается форма программы
т.е. 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);
← →
James007 (2002-06-24 16:33) [11]Юрий Зотов, ответьте на последнее сообщение
← →
Юрий Зотов (2002-06-25 19:28) [12]Что-то в этом духе.
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-29 17:39) [13]А я немного сделал по другому, вроде бы работает, проверял, надо еще на одном примере проверить!!!!!
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-29 17:48) [14]Должно работать. Правда, код неэффективный - огромное количество ненужных операций по созданию и уничтожению компонентов.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c