我有一个自定义组件,目前我必须在表单上放置TScrollbox
,然后将自定义组件添加/拖动到滚动框。
如何更改组件,以便在放置/拖动到表单上时自动将其置于滚动框内?
自定义组件是TGraphicControl
。
答案 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
下的工具调色板中显示。