RAD Studio |  |

Creating Methods to Store and Load Property Values

To store and load unpublished properties, you must first create a method to store your property value and another to load your property value. You have two choices:

- Create a method of type TWriterProc to store your property value and a method of type TReaderProc to load your property value. This approach lets you take advantage of Delphi's built-in capabilities for saving and loading simple types. If your property value is built out of types that Delphi knows how to save and load, use this approach.
- Create two methods of type TStreamProc, one to store and one to load your property's value. TStreamProc takes a stream as an argument, and you can use the stream's methods to write and read your property values.

For example, consider a property that represents a component that is created at runtime. Delphi knows how to write this value, but does not do so automatically because the component is not created in the form designer. Because the streaming system can already load and save components, you can use the first approach. The following methods load and store the dynamically created component that is the value of a property named MyCompProperty:
Copy Code

    procedure TSampleComponent.LoadCompProperty(Reader: TReader);
    begin
      if Reader.ReadBoolean then
        MyCompProperty := Reader.ReadComponent(nil);
    end;
    procedure TSampleComponent.StoreCompProperty(Writer: TWriter);
    begin
      Writer.WriteBoolean(MyCompProperty <> nil);
      if MyCompProperty <> nil then
        Writer.WriteComponent(MyCompProperty);
    end;

Copy Code

    void __fastcall TSampleComponent::LoadCompProperty(TReader *Reader)
    {
      if (Reader->ReadBoolean())
        MyCompProperty = Reader->ReadComponent(NULL);
    }
    void __fastcall TSampleComponent::StoreCompProperty(TWriter *Writer)
    {
      if (MyCompProperty)
      {
        Writer->WriteBoolean(true);
        Writer->WriteComponent(MyCompProperty);
      }
      else
        Writer->WriteBoolean(false);
    }

Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
What do you think about this topic? Send feedback!