Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.022 c
9-51056
justYura
2003-04-10 14:48
2003.10.16
Smoothing Groups, OpenGL


3-51131
vil
2003-09-25 07:43
2003.10.16
Время обновления таблицы.


4-51554
i-s-v
2003-08-11 01:51
2003.10.16
Как читать строки из реестра


7-51542
Alessio2003
2003-08-02 15:05
2003.10.16
Команды Power Off, Sleep, Log Off


1-51296
malamba
2003-10-06 15:11
2003.10.16
перезагрузка своего компонента




   Наверх