组件的默认属性值

时间:2013-06-03 21:59:57

标签: delphi properties components delphi-7

我想知道是否可以为组件定义默认属性值。
换句话说,我想在设计时为系统中的每个TDBGrid设置一个唯一的名称(可能是GUID),是否可能?
还有另一种方法可以控制在运行时和设计时都有效的组件的唯一性。在关闭delphi之后它也必须坚持下去;例如组合框列表值。

提前致谢!

修改

下面是代码,它不起作用:

type
  TMDBGrid = class(TDBGrid)
  private
    FUniqueName: String;
  protected
    function DefaultUniqueName: String;
    function GetUniqueName: String;
    procedure SetUniqueName(const AName: String);
  public
    constructor Create(AOwner: TComponent); override;
  published
    property UniqueName: String read GetUniqueName write SetUniqueName;
  end;

procedure Register;

implementation

uses uComponentUtils;

procedure Register;
begin
  RegisterComponents('MLStandard', [TMDBGrid]);
end;

{ TMDBGrid }

constructor TMDBGrid.Create(AOwner: TComponent);
begin
  inherited;
  FUniqueName := DefaultUniqueName;
end;

function TMDBGrid.DefaultUniqueName: String;
begin
  Result := GenerateGUID(True);
end;

function TMDBGrid.GetUniqueName: String;
begin
  Result := '';
end;

procedure TMDBGrid.SetUniqueName(const AName: String);
begin
  FUniqueName := AName;
  if FUniqueName = '' then
    FUniqueName := DefaultUniqueName;
end;

function GenerateGUID(PlainText: Boolean = False): String;
var G: TGUID;
begin
  CreateGUID(G);
  Result:= GUIDToString(G);
  if PlainText then
    Result := MultiStringReplace(Result, ['{','}','[',']','-','.',' ','(',')'],
                                         ['','','','','','','','',''],
                                         [rfReplaceAll, rfIgnoreCase]);
end;

“它无效”表示将TDBGrid添加到任何表单时,UNIQUENAME为空。它应该有一个GUID。

1 个答案:

答案 0 :(得分:5)

GetUniqueName的实施不会返回任何内容。它需要返回FUniqueName

function TMDBGrid.GetUniqueName: String;
begin
  Result := FUniqueName;
end;

或者您可以删除getter并将属性更改为:

property UniqueName: String read FUniqueName write SetUniqueName;