通过扩展类来设置组件样式

Wiz*_*ard 2 delphi object styling

从这个问题将参考/一个地方的对象传递给样式对象

我只是想,如果我为我造型的项目创建了一个后代类,那该怎么办?

例如(原谅可怜的代码,不是ide,但你应该明白我的意思)

TStyledButton = class(TButton)
  public 
     constructor Create; //This overrides the main TButton
end;

constructor TStyledButton.Create;
begin
   inherited;
   self.Color := clRed;
end;
Run Code Online (Sandbox Code Playgroud)

然后在我的表单中,我只将Button1作为TStyledButton.

这将删除表单创建中的所有额外代码,以处理设置样式/调用函数以设置样式.

唯一的问题是,如何在设计视图中进行此操作,我是否必须注册此Object(组件?),以便它实际上在设计视图中显示.

jac*_*ate 6

在了解Delphi包组件编写器的同时,您可以使用IDE专家创建一个新组件,在创建新的设计时包时自动将其添加到组件中:

首先使用Component/New组件中的IDE专家创建它:

新组件

新组件

出现提示时,选择"安装到新包"

新包装

提供包(文件)名称和描述

包裹名字

瞧!,你的调色板中有你的新组件:

已安装组件

试试这段代码:

  TMyButton = class(TButton)
  public
    constructor Create(AOwner: TComponent); override;
  end;

procedure Register;

implementation
uses Graphics;

{ TMyButton }

constructor TMyButton.Create(AOwner: TComponent);
begin
  inherited;
  Font.Style := [fsBold];
  Caption := 'Click me!';
end;
Run Code Online (Sandbox Code Playgroud)

你会得到这个:

我的按钮!

  • 不,Wizzard,你不应该在Loaded中做任何事情.在构造函数运行后应用存储的属性是可以的.存储的属性与您在构造函数中设置的值相同,因此无论是重新应用它们还是用户在将组件放置在表单上后更改了它们的值都没有区别,并且您不应该使用它们它. (2认同)