Форум: "Основная";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
ВнизСохранение настроек приложения в потомке 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.014 c