Конференция "Компоненты" » Свойства невизуального компонента [D7, Win95/98, NT4, Win2k, WinXP]
 
  • AbrosimovA © (13.04.07 15:26) [0]
    Вот уже неделю пытаюсь понять, где ошибка. Написал свой компонент TFormCaption - наследника TComponent, у него есть св-во - объект TCaptionButton, для которого определил св-во Position. Меняю свойство в Designtime на 5, затем компилю программу и запускаю её в Runtime, но свойство остаётся равным 4. Что происходит в момент изменения свойства в инспекторе объектов, как сохранить изменения?

    Вот выдержка из кода:


    type
     TCaptionButton = class (TComponent)
     private
       FButtonPosition   : Byte;
       procedure SetButtonPosition( const Value: Byte );
     public
       constructor Create(AOwner: TComponent); override;
       destructor Destroy; override;
     published
       property Position: Byte read FButtonPosition write SetButtonPosition default 4;
     end;

     TFormCaption = class(TComponent)
     private
       FCaptionButton    : TCaptionButton;
       FOnButtonClick    : TNotifyEvent;
       FOnButtonMouseMove: TMouseMoveEvent;
       procedure DrawButton;
     protected
       procedure ButtonClick; dynamic;
       procedure ButtonMouseMove(Shift: TShiftState; X, Y: Integer); dynamic;
     public
       constructor Create(AOwner: TComponent); override;
       destructor  Destroy; override;
       property Button: TCaptionButton read FCaptionButton write FCaptionButton;
       property OnButtonMouseMove: TMouseMoveEvent read FOnButtonMouseMove write FOnButtonMouseMove;
       property OnButtonClick: TNotifyEvent read FOnButtonClick write FOnButtonClick;
     end;

    procedure Register;

    implementation

    constructor TCaptionButton.Create(AOwner: TComponent);
    begin
     inherited Create(AOwner);
     FButtonPosition := 4;
    end;

    destructor TCaptionButton.Destroy;
    begin
     inherited Destroy;
    end;

    procedure TCaptionButton.SetButtonPosition(const Value: Byte);
    begin
     if Value <> FButtonPosition then
     begin
       FButtonPosition:=Value;
     end;
    end;

    constructor TFormCaption.Create(AOwner: TComponent);
    begin
     inherited Create(AOwner);
     Button:=TCaptionButton.Create(Self);
    end;

    procedure Register;
    begin
     RegisterComponents('Additional', [TFormCaption]);
     RegisterPropertyEditor( TypeInfo( TCaptionButton ),  TFormCaption, 'Button', TClassProperty ) ;
    end;

    end.

  • DimaBr © (16.04.07 08:57) [1]
    Дело в том что вы не сохраняете свойство в ресурс. (DFM).
    Для того чтобы это сделать вам нужно
    Варианты
    1. Перенести свойство
    property Button: TCaptionButton

    в Published секцию и установить SetSubComponent(true)
    2. Написать методы чтения/сохранения и переопределить метод DefineProperties

    Нет необходимости регистрировать редактор для свойства.
  • AbrosimovA © (17.04.07 15:43) [2]
    Большое спасибо за ответ.
  • DimaBr © (17.04.07 15:50) [3]
    Обращайтесь !
 
Конференция "Компоненты" » Свойства невизуального компонента [D7, Win95/98, NT4, Win2k, WinXP]
Есть новые Нет новых   [119251   +32][b:0][p:0.001]