RAD Studio |  |

Declaring the Access Properties

You can provide access to the owned objects of a component by declaring properties of the type of the objects. That gives developers a way to access the objects at design time or runtime. Usually, the read part of the property just references the class field, but the write part calls a method that enables the component to react to changes in the owned object.

To the shape control, add properties that provide access to the pen and brush fields. You will also declare methods for reacting to changes to the pen or brush.

Copy Code

    type
      TSampleShape = class(TGraphicControl)
      .
      .
      .
      private                                              { these methods should be private }
        procedure SetBrush(Value: TBrush);
        procedure SetPen(Value: TPen);
      published                                        { make these available at design time }
        property Brush: TBrush read FBrush write SetBrush;
        property Pen: TPen read FPen write SetPen;
      end;

Copy Code

    class PACKAGE TSampleShape : public TGraphicControl
    {
      .
      .
      .
    private:
        TPen *FPen;
        TBrush *FBrush;
        void __fastcall SetBrush(TBrush *Value);
        void __fastcall SetPen(TPen *Value);
        .
        .
        .
    __published:
        __property TBrush* Brush = {read=FBrush, write=SetBrush, nodefault};
        __property TPen* Pen = {read=FPen, write=SetPen, nodefault};
    };

Then, write the SetBrush and SetPen methods in the implementation part of the unit:

Copy Code

    procedure TSampleShape.SetBrush(Value: TBrush);
    begin
      FBrush.Assign(Value);                          { replace existing brush with parameter }
    end;
    procedure TSampleShape.SetPen(Value: TPen);
    begin
      FPen.Assign(Value);                              { replace existing pen with parameter }
    end;

Copy Code

    void __fastcall TSampleShape::SetBrush( TBrush* Value)
    {
      FBrush->Assign(Value);
    }
    void __fastcall TSampleShape::SetPen( TPen* Value)
    {
      FPen->Assign(Value);
    }

To directly assign the contents of Value to FBrush-

Copy Code

      FBrush := Value;

Copy Code

      FBrush = Value;

- would overwrite the internal pointer for FBrush, lose memory, and create a number of ownership problems.

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