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.