Теперь введите следующее в заголовочный файл компонента:
//---------------------------------------------------------------------------
class PACKAGE TExampleEditor : public TComponent
{
private:
AnsiString FFileName;
void __fastcall SetFileName(AnsiString Value);
void __fastcall ReadData(TReader *Reader);
void __fastcall WriteData(TWriter *Writer);
protected:
void __fastcall DefineProperties(TFiler *Filer);
public:
void __fastcall Something(void);
void __fastcall SomethingElse(void);
__property AnsiString FileName = {read = FFileName, write = SetFileName};
__fastcall TExampleEditor(TComponent* Owner);
__published:
};
Помните, что вам нужна пара методов 'read' - 'write' для каждого неопубликованного свойства, если вы хотите его сохранять.
Введите следующее в главный файл:
//---------------------------------------------------------------------------
void __fastcall TExampleEditor::DefineProperties(TFiler *Filer)
{
TComponent::DefineProperties(Filer);
// Define the read/write methods
Filer->DefineProperty("FileName", ReadData, WriteData, (FFileName != ""));
}
//---------------------------------------------------------------------------
void __fastcall TExampleEditor::ReadData(TReader *Reader)
{
// Read property data from the DFM file
FileName = Reader->ReadString();
}
//---------------------------------------------------------------------------
void __fastcall TExampleEditor::WriteData(TWriter *Writer)
{
// Save the property data to the DFM file
Writer->WriteString(FileName);
}
Теперь далее. Еще раз переинсталлируйте компонент. Переоткройте сохраненный проект и щелкните на TExampleEditor.
Обратите внимание - Object Inspector не показывает свойство 'FileName'.
Теперь дважды щелкните на компоненте, выберите файл из диалога и щелкните 'Open'.
Щелкните кнопку 'Save All' на панели инструментов и затем выберите File | Close All.
Переоткройте проект, выведите форму в текстовом виде.
Найдите ExampleEditor : TExampleEditor. Теперь свойство FileName сохраняется вместе с остальными.
В вышеприведенном примере мутатор для свойства FileName( SetFileName() ) не делает ничего кроме присвоения строки приватной переменной.
В реальном компоненте в таком случае свойство можно вообще убрать - просто перенесите FFileName в секцию public.
|