Главная страница
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.017 c
6-51364
Novinkij
2003-08-21 14:11
2003.10.16
что-то типа сервера


4-51549
tovSuhov
2003-08-12 17:28
2003.10.16
Получение иконки, ассоциированной с данным расширением


14-51482
Митяй
2003-09-28 17:17
2003.10.16
И всё-таки какой тип БД выбрать....


1-51344
Shuhkoman
2003-10-05 19:59
2003.10.16
MainMenu


14-51485
JOY
2003-09-28 06:09
2003.10.16
И еще есть вопросик. Звучит от так: