Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.16;
Скачать: CL | DM;

Вниз

Сохранение настроек приложения в потомке TComponent   Найти похожие ветки 

 
Udjin ©   (2003-10-06 08:42) [0]

Для сохранения настроек приложения использую наследника TComponent. Сохраняю в потоке Stream.WriteComponent() читаю Stream.ReadComponent(). Понадобилось сохранить настройки шрифта (TFont). При сохранении никаких проблем, а при чтении ошибка "Invalid property path". Если разобрать шрифт на "запчасти", то есть сохранять каждое поле TFont отдельно, то никаких проблем не возникает.
Вроде и беды никакой нет, но интересно почему так ?


 
Digitman ©   (2003-10-06 09:08) [1]

бессмысленно сохранять и восстанавливать ссылку на объект, в дан.случае - объект класса TFont


> Если разобрать шрифт на "запчасти", то есть сохранять каждое
> поле TFont отдельно, то никаких проблем не возникает.
> Вроде и беды никакой нет, но интересно почему так ?


именно это и есть единственно правильная логика


 
Polevi ©   (2003-10-06 10:27) [2]

не надо изобретать велосипеды, все давно сделано уже
TComponent умеет сохранять published св-ва в поток и создавать экземпляр из потока


type
TPersistObject=class(TComponent)
private
FFont:TFont;
function GetFont:TFont;
procedure SetFont(Value:TFont);
published
property Font:TFont read GetFont write SetFont;
end;

var
po:TPersistObject;

procedure TForm1.FormCreate(Sender: TObject);
begin
po:=TPersistObject.Create(nil);
end;

//save
procedure TForm1.Button1Click(Sender: TObject);
begin
po.Font.Assign(Label1.Font);
with TFileStream.Create("c:\test.txt",fmCreate or fmOpenWrite) do
begin
WriteComponent(po);
Free;
end;
end;

//load
procedure TForm1.Button2Click(Sender: TObject);
begin
with TFileStream.Create("c:\test.txt",fmOpenRead) do
begin
po:=TPersistObject(ReadComponent(nil));
Free;
end;
Label1.Font.Assign(po.Font);
end;

{ TPersistObject }

function TPersistObject.GetFont: TFont;
begin
if not Assigned(FFont) then
FFont:=TFont.Create;
Result:=FFont;
end;

procedure TPersistObject.SetFont(Value: TFont);
begin
if not Assigned(FFont) then
FFont:=TFont.Create;
FFont.Assign(Value);
end;

initialization
RegisterClass(TPersistObject);


 
Udjin ©   (2003-10-06 11:20) [3]

2 Polevi
Спасибо, работает



Страницы: 1 вся ветка

Текущий архив: 2003.10.16;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.019 c
14-51425
Zhirnov Maxim
2003-09-23 22:50
2003.10.16
Русский модули к Wise Installer


14-51524
Dina
2003-09-23 23:33
2003.10.16
Восстановление почтовых ящиков в The Bat


14-51473
Juster~Thunderbird
2003-09-29 20:09
2003.10.16
Мой бедный ASUS CD-RW


1-51167
Вован
2003-10-05 13:53
2003.10.16
Как минимизировать приложение из дочерней формы?


1-51323
DimChan
2003-10-06 07:03
2003.10.16
Курсор в конец строки