我正在尝试创建一个控件,它在设计时和运行时创建 3 个标准 TPanel。一切都很好:控制完美地创建了面板。但我遇到了一个问题:在设计时,我希望能够选择其中一个面板。
我希望重现 TPageControl 的标准行为:当用户在屏幕上单击 TabSheet 时,TabSheet 可以通过对象检查器进行编辑。
下面附上我的控制代码:
unit MyContainer;
interface
uses
Windows,
Messages,
SysUtils,
Classes,
Graphics,
Controls,
Forms,
StdCtrls,
ExtCtrls,
StrUtils,
Dialogs;
type
TMyContainer = class(TCustomControl)
private
FPanelA: TPanel;
FPanelB: TPanel;
FPanelC: TPanel;
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
procedure register;
implementation
{ TMyContainer }
procedure Register;
begin
RegisterComponents('MyComps', [TMyContainer]);
end;
constructor TMyContainer.Create(AOwner: TComponent);
begin
Inherited Create(AOwner);
Width := 200;
Height := 200;
ControlStyle := ControlStyle + [csAcceptsControls];
FPanelA := TPanel.Create(Self);
FPanelA.Parent := Self;
FPanelA.Width := 100;
FPanelA.Height := 60;
FPanelA.Left := 10;
FPanelA.Top := 10;
FPanelB := TPanel.Create(Self);
FPanelB.Parent := Self;
FPanelB.Width := 100;
FPanelB.Height := 60;
FPanelB.Left := 10;
FPanelB.Top := 80;
FPanelC := TPanel.Create(Self);
FPanelC.Parent := Self;
FPanelC.Width := 100;
FPanelC.Height := 60;
FPanelC.Left := 10;
FPanelC.Top := 160;
end;
destructor TMyContainer.Destroy;
begin
FreeAndNil(FPanelA);
FreeAndNil(FPanelB);
FreeAndNil(FPanelC);
Inherited Destroy;
end;
procedure TMyContainer.Paint;
begin
Canvas.Brush.Color := clBlue;
Canvas.FillRect(Canvas.ClipRect);
end;
end.
有没有人可以向我展示一种为我的任务找到解决方案的方法?
提前致谢。