| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() |
"Запоточивание" неопубликованных (non-published) данных компонента 'Запоточивание' относится к методам или механизмам, которые Билдер использует для сохранения опубликованных(published) данных компонента. То есть вы можете изменить проект, сохранить, и все изменения сохранятся. Заметьте, что только опубликованные. C++Builder сохраняет за вас опубликованные данные, но что если у вас есть неопубликованные данные, которые должны сохраняться в DFM-файле? К с частью, можно использовать ту же технику, что использует C++Builder для опубликованных данных. Сначала давайте немного изменим объявление класса компонента - просто перенесем свойство FileName в секцию 'public'. Объявление класса должно выглядеть так: //--------------------------------------------------------------------------- class PACKAGE TExampleEditor : public TComponent { private: AnsiString FFileName; void __fastcall SetFileName(AnsiString Value); protected: public: void __fastcall Something(void); void __fastcall SomethingElse(void); __property AnsiString FileName = {read = FFileName, write = SetFileName}; __fastcall TExampleEditor(TComponent* Owner); __published: }; Так как свойство FileName больше не появляется в Object Inspector, как можно проверить, сохраняется оно или нет? Мы можем временно сделать простое изменение в методе Edit() класса TMyEditor, который проверяет значение этого свойства, но можно поступить еще проще. Переоткройте проект, где используется TExampleEditor. Щелкните правой клавишей и выберите ‘View as Text’. DFM-файл отобразится в виде текста в окне редактора кода. Найдите объект ExampleEditor1: TExampleEditor. Вы увидите члены для ‘Top’,‘Left’ и ‘FileName’. Это показывает, что данные сохраняются автоматически. Теперь заново скомпилируйте и установите компонент. Повторите создание нового проекта, дважды щелкните на TExampleEditor, выберите файл в диалоге и нажмите 'Open'. Теперь переоткройте проект. Опять выберите 'View as Text'. Найдите объект ExampleEditor1 : TExampleEditor. Теперь там будут только 'Top' and 'Left'. Чтобы сохранить неопубликованные данные компонента, нам надо переопределить его метод DefineProperties(). Сначала вы должны вызвать базовый метод, а потом испльзовать метод класса TFiler DefineProperty() для каждого свойства, которое вы хотите сохранить. DefineProperty() используется для сохранения таких типов данных, как целые, строки, числа с плавающей точкой, перечисляемые и булевы. Для сохранения картинок или звуковых файлов вы должны использовать метод DefineBinaryProperty(). DefineProperties() выглядит так: virtual void __fastcall DefineProperties(TFiler *Filer) , а DefineProperty() так: virtual void __fastcall DefineProperty(const System::AnsiString Name, TReaderProc &ReadData, TWriterProc &WriteData, bool HasData) = 0; Name – это 'имя' свойства, которое вы хотите сохранить. TReaderProc и TWriterProc – эти методы используются для чтения и записи данных в DFM-файл. (эти параметры другие для метода DefineBinaryProperty()) HasData – этот параметр показывает, имеются ли у компонента на самом деле данные, которые надо сохранить. |
|
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
|