Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.013 c
14-47810
abitur
2002-06-16 20:48
2002.07.15
Win2K


14-47806
MJH
2002-06-15 12:22
2002.07.15
nitroamp.ru


14-47710
agrig
2002-06-18 21:09
2002.07.15
как 1С v.6 записывает свои файлы и чем сжимает?


3-47230
Verq
2002-06-09 23:31
2002.07.15
Сортировка по Lookup-полю...


6-47643
Kirill
2001-10-25 18:10
2002.07.15
Получение NET SEND





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский