Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.009 c
4-51556
Jack
2003-08-11 14:52
2003.10.16
Как проверить занят ли файл или нет?


4-51551
Андрей_ЧК
2003-08-12 17:03
2003.10.16
Используя WinAPI


1-51299
wHammer
2003-10-06 14:35
2003.10.16
Масштабирование в TImage


1-51334
Islander
2003-10-05 11:42
2003.10.16
Компонент на основе TTreeView. Переопределение OnEdited


1-51202
nova
2003-10-04 15:53
2003.10.16
Динамическое создание переменной





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский