Własny komponent i rekord

0

Tworzę własny komponent i potrzebowałbym, aby w

published

dać property

, które będzie reprezentować rekord.

np.
```delphi
type
  TKolor = record
    Normal, Over, Click : TColor;
  end;

TMojBaton = class(TGraphicControl)
  private
    FBackColor : TKolor;
  {...}
 published
    property BackColor: TKolor read FBackColor write FBackColor;

Ale jak tak zrobię to ta własciwość nie pokazuje się w Inspektorze Obiektów.
Jak zrobić żeby cała struktura rekordu była widoczna w Inspektorze?

Z góry dzięki za pomoc.

0

Gdzieś w artykule o tworzeniu komponentów było coś takiego, jak zrobić coś w stylu Font na przykład (tam sobie rozwijasz i masz kilka różnych zmiennych), to powinno chyba pasować.

0

To jest tzw. właściwość zbiorowa :) i tworzy się ją w nast. sposób:

tworzysz sobie dodatkową klasę z właściwościami w published które mają być na liście, a nastepnie w klasie komponentu deklarujesz właściwość typu który wskazuje na tą klasę czyli:

type
  TMoja = class(TPersistent)
  private
    Wlasciwosc1: Integer;
    Wlasciwosc2: String;
  published
    property Nr1: Integer read Wlasciwosc1 write Wlasciwosc1;
    property Nr2: String read Wlasciwosc2 write Wlasiwosc2;
  end;

  TMojKomponent=class(TComponent);
  private
    FZbior: TMoja;
  public
    //konstruktor, destruktor itd.
  published
    property Zbior: TMoja read FZbior write FZbior;
  end;

;P :)

0

Zrobilem tak, ale w Inspektorze nie rozwija sie to drzewko z właściwościami. Mógłbyś sprawdzić co jest źle ?

unit SpokoBaton;

interface

uses
  SysUtils, Classes, Controls, Graphics, Forms;

type
  
  TFonts = class(TPersistent)
  private
    FNormal, FOver, FClick : TFont;
  published
    property Normal : TFont read FNormal write FNormal;
    property Over   : TFont read FOver   write FOver;
    property Click  : TFont read FClick  write FClick;
  end;

  TSpokoBaton = class(TGraphicControl)
  private
    FFonts : TFonts;

  protected
   //
  public
    constructor Create(AOwner: TComponent); override;
    property Canvas;

  published
    property Align;
    property Anchors;
    property Constraints;
    property Enabled;
    property PopupMenu;
    property ShowHint;
    property Visible;
    property Fonts: TFonts read FFonts write FFonts;

  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TSpokoBaton]);
end;

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

end.
0

już mam ;]
nie dodałem do kreatora TSpokoBaton:

FFonts := TFonts.Create;

i musiałem jeszcze zrobić osobny kreator dla TFonts ;]

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