[Delphi] Właściwości komponentu - rozwijanie

0

Witam wszystkich.

Testuje sobie możliwość napisania komponentu z możliwością rozwijania właściwości i tu właśnie pojawił się problem.
Generalnie w Object Inspektorze pojawia mi się property kolory, niestety po naciśnięciu "+" nie rozwija się lista.

Wzorowałem sie i podglądałem jak to jest zrobione w innych komponentach i klasach które posiadają taką właściwość np. klasa TSizeConstraints ale nie wiem czemu w moim komponencie to nie działa.

Proszę o podpowiedź gdzie robię błąd.

unit KonfigType;

interface

uses
  SysUtils, Classes, Registry, Controls;

type
  TKoloryGridow = class(TPersistent)
  private
    FControl    : TControl;
    FNotFound   : integer;
    FColIndex   : integer;
    FKursor     : integer;
    FTabela     : integer;
    FColHead    : integer;
    FLv1        : integer;
    FLv2        : integer;
    FLv3        : integer;
    FDefaultKol : integer;
    FFound      : integer;
    FSelect     : integer;
    FOnChange   : TNotifyEvent;
    procedure SetKolor(Index: Integer; Value: Integer);
  protected
    procedure Change; virtual;
    property Control: TControl read FControl;
  public
    constructor Create(Control: TControl); virtual;
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
  published
    property Tabela     : integer index 0  read FTabela     write SetKolor default 0;
    property Kursor     : integer index 1  read FKursor     write SetKolor default 0;
    property Select     : integer index 2  read FSelect     write SetKolor default 0;
    property Lv1        : integer index 3  read FLv1        write SetKolor default 0;
    property Lv2        : integer index 4  read FLv2        write SetKolor default 0;
    property Lv3        : integer index 5  read FLv3        write SetKolor default 0;
    property Found      : integer index 6  read FFound      write SetKolor default 0;
    property NotFound   : integer index 7  read FNotFound   write SetKolor default 0;
    property DefaultKol : integer index 8  read FDefaultKol write SetKolor default 0;
    property ColIndex   : integer index 9  read FColIndex   write SetKolor default 0;
    property ColHead    : integer index 10 read FColHead    write SetKolor default 0;
  end;


  TKonfigKomponent = class(Tcomponent)
    private
      FKolory         : TKoloryGridow;
      procedure SetKolory(const Value: TKoloryGridow);
    public
      constructor Create(AOwner: TComponent); override;
      Destructor Destroy; override;
    published
      property Kolory : TKoloryGridow read FKolory write SetKolory;
  end;

procedure Register;

implementation

{ TKonfigKomponent }

constructor TKonfigKomponent.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;

destructor TKonfigKomponent.Destroy;
begin
  inherited;
end;

procedure TKonfigKomponent.SetKolory(const Value: TKoloryGridow);
begin
  FKolory.Assign(Value);
end;

{ TKoloryGridow }

procedure TKoloryGridow.Change;
begin
  if Assigned(FOnChange) then FOnChange(Self);
end;

constructor TKoloryGridow.Create(Control: TControl);
begin
  inherited Create;
  FControl := Control;
end;

procedure TKoloryGridow.SetKolor(Index, Value: Integer);
begin
  case Index of
    0: FTabela      := Value;
    1: FKursor      := Value;
    2: FSelect      := Value;
    3: FLv1         := Value;
    4: FLv2         := Value;
    5: FLv3         := Value;
    6: FFound       := Value;
    7: FNotFound    := Value;
    8: FDefaultKol  := Value;
    9: FColIndex    := Value;
   10: FColHead     := Value;
  end;
end;

procedure Register;
begin
  RegisterComponents('Test',[TKonfigKomponent]);
end;

end.
0

Problem rozwiązany. :)

Zapomniałam o taki szczególe jak

constructor TKonfigKomponent.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FKolory := TKoloryGridow.Create(nil); //     <-- TU CREATE() NIE BYŁO
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1