在滚动框内添加组件

时间:2014-04-24 10:46:25

标签: delphi delphi-xe2

我有一个自定义组件,目前我必须在表单上放置TScrollbox,然后将自定义组件添加/拖动到滚动框。
如何更改组件,以便在放置/拖动到表单上时自动将其置于滚动框内?

自定义组件是TGraphicControl

1 个答案:

答案 0 :(得分:3)

如果您有自定义组件并且您始终希望它存在于滚动框内,那么最干净的解决方案是更新或扩展该组件以拥有自己的滚动框。以下是使用TLabel的示例,但您可以将其替换为您的自定义组件。

unit MyScrollBox;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.Forms, Vcl.StdCtrls;

type
  TMyScrollComponent = class(TScrollBox)
  private
    FLabel : TLabel;
    procedure SetLabelText(AText : string);
    function GetLabelText : string;
  protected
    constructor Create(AOwner : TComponent); override;
  published       
    property LabelText : string read GetLabelText write SetLabelText;
  end;

procedure Register;

implementation

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

constructor TMyScrollComponent.Create(AOwner : TComponent);
begin
  inherited;
  FLabel := TLabel.Create(self);
  FLabel.Parent := self;
  FLabel.Caption := 'Hello From Scrollbox!';
end;

procedure TMyScrollComponent.SetLabelText(AText : string);
begin
  FLabel.Caption := AText;
end;

function TMyScrollComponent.GetLabelText : string;
begin
  result := FLabel.Caption;
end;

end.

这演示了一个继承自TScrollBox的自定义组件,包含TLabel并通过自定义发布的属性公开Caption的{​​{1}}属性。遵循此模式,您还可以公开您需要的自定义控件的任何其他属性等。

或者,如果您希望保留在设计时在滚动框内进行布局更改的功能,那么另一种解决方案是制作自定义TLabel。只需add one to your project,然后在构建之后,它就会在TFrame下的工具调色板中显示。