Pytanie zapewne do działu Newbe, ale:

  • mając zarejestrowany komponent w palecie i po wstawiniu na go formę, to na etapie projektowania w inspektorze obiektow działa jak powinien, ale po odpaleniu programu wyświetla się tylko DrawGrid, nie ma śladu po modyfikacjach wprowadzonych w inspektorze.
    Co robię nie tak?
unit BarredDrawGrid;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, StdCtrls, ExtCtrls, Grids;

type
  TBarClickEvent = procedure(Sender: TObject; Index: Integer) of object;
  TBarredDrawGrid = class(TWInControl)
  private
    FCaptions: TStringList;
    FBarArray: array of TPanel;
    FDRawGrid: TDrawGrid;
    FOnBarClick: TBarClickEvent;
  protected
    procedure FSetCaptions(ACaptions: TStringList);
    procedure DoPanelClick(Sender: TObject);
  public
    constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;
  published
     property Captions: TStringList read FCaptions write FSetCaptions;
     property DrawGrid: TDrawGrid read FDrawGrid write FDRawGrid;
     property OnBarClick: TBarClickEvent read FOnBarClick write FOnBarClick;
     property Visible;
     property Tag;
  end;

procedure Register;

implementation

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

{ TBarredDrawGrid }

constructor TBarredDrawGrid.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FCaptions:= TStringList.Create;
  FDRawGrid:= TDrawGrid.Create(Self);
  FDRawGrid.Parent:= Self;
  FDRawGrid.Name:= 'DrawGrid1';
//  if not (csDesigning in ComponentState) then
//     FSetCaptions(FCaptions);
end;

destructor TBarredDrawGrid.Destroy;
var i: Integer;
begin
  FDRawGrid.Free;
  for i:= 0 to High(FBarArray) do
     FreeAndNil(FBarArray[i]);
  FBarArray:= nil;
  inherited;
end;

procedure TBarredDrawGrid.DoPanelClick(Sender: TObject);
var i: Integer;
begin
    for i:= 0 to High(FBarArray) do
      if  FBarArray[i].Tag  < TPanel(Sender).Tag then
          FBarArray[i].Align:= alTop
      else
          FBarArray[i].Align:= alBottom;

   if Assigned(FOnBarClick) then
      FOnBarClick(Sender, (Sender as TPanel).Tag);
end;

procedure TBarredDrawGrid.FSetCaptions(ACaptions: TStringList);
var i: Integer;
begin
   FCaptions.Assign(ACaptions);
   FDRawGrid.Align:= alNone;
   SetLength(FBarArray, ACaptions.Count);
   for i:= 0 to ACaptions.Count-1 do
    begin
      FBarArray[i]:= TPanel.Create(Self);
      FBarArray[i].Parent:= Self;
      FBarArray[i].Height:= 25;
      FBarArray[i].BevelInner:= bvRaised;
      FBarArray[i].BevelOuter:= bvLowered;
      FBarArray[i].Caption:= ACaptions.Strings[i];
      FBarArray[i].Tag:= i;
      FBarArray[i].OnClick:= DoPanelClick;
      FBarArray[i].Align:= alTop;
    end;
    FDRawGrid.Align:= alClient;
end;

end.