组件的默认属性值

EPr*_*und 1 delphi components properties 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;
Run Code Online (Sandbox Code Playgroud)

"它不起作用"意味着当TDBGrid添加到任何表单时,UNIQUENAME为空.它应该有一个GUID.

Dav*_*nan 5

你的实现GetUniqueName不会返回任何东西.它需要回归FUniqueName.

function TMDBGrid.GetUniqueName: String;
begin
  Result := FUniqueName;
end;
Run Code Online (Sandbox Code Playgroud)

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

property UniqueName: String read FUniqueName write SetUniqueName;
Run Code Online (Sandbox Code Playgroud)

  • 我告诉过你,一旦我们拥有所有代码,这将很容易!;-) (2认同)
  • 除非属性具有"default"值并且该值已设置.例如`属性MyProp:整数读取FMyProp写入SetMyProp默认为0;`如果此属性的值为"0"(默认值),则它甚至不会将其保存在DFM中. (2认同)