Конференция "Компоненты" » Реакция на изменение свойства [D7, WinXP]
 
  • Ilg (15.12.12 17:24) [0]
    Здравствуйте!
    Пишу визуальный компонент... Некоторые новые свойства вынес в отдельный класс, типа:
    tmyprop = class(TPersistent)
    fcolor2:TColor;
    ...
    published
    property color2:TColor read fcolor2 write setcolor2;

    В самом компоненте так:
    fmyprop:tmyprop;
    ...
    published
    property myprop:tmyprop read fmyprop write setmyprop;

    Скажите, как можно заставить компонент перерисовываться при изменении одного из свойств?
    Проблема в том, что setmyprop не срабатывает при изменении color2...

    Заранее Большое спасибо!
  • brother © (15.12.12 17:56) [1]
    во всех сеттерах вызывать функцию перерисовки?
  • DVM © (15.12.12 22:19) [2]

    > Скажите, как можно заставить компонент перерисовываться
    > при изменении одного из свойств?

    в конструктор объекта-свойства передавать Parent, т.е. основной объект которому свойство принадлежит, у которого и дергать нужный метод.
  • DimaBr © (17.12.12 10:35) [3]
    TMyProp = class(TPersistent)
     fColor2:TColor;
     fOnChange: TNotifyEvent;
     procedure Change;
    ...
    published
     property color2:TColor read fColor2 write SetColor2;

    procedure Change;
    begin
     if Assigned(fOnChange) then fOnChange(self)
    end;

    TMyComponent = class(TComponent)
     fMyProp: TMyProp;
     procedure DoChange(Sender: TObject);
    end;

    constructor TMyComponent.Create(AOwner: TComponent);
    begin
     inherited;
     fMyProp := TMyProp.Create;
     fMyProp.OnChange := DoChange;
    end;

    procedure TMyComponent.DoChange;
    begin
     invalidate;
    end;

  • Ilg (17.12.12 14:50) [4]
    Огромное спасибо, справился:-)
 
Конференция "Компоненты" » Реакция на изменение свойства [D7, WinXP]
Есть новые Нет новых   [118649   +60][b:0][p:0.001]