Главная страница
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.037 c
6-51382
Vinter
2003-08-19 14:59
2003.10.16
MS Outlook


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


3-51094
Signed
2003-09-26 00:42
2003.10.16
Помогите разобраться новичку в БД


14-51507
kaif
2003-09-25 04:01
2003.10.16
что такое мудрость?


3-51138
Amayak
2003-09-22 07:56
2003.10.16
BD