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.
你的实现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)