【发布时间】:2013-05-30 04:23:12
【问题描述】:
我想知道是否可以为组件定义默认属性值。
换句话说,我想在设计时为系统中的每个 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。
【问题讨论】:
-
您可以向组件添加一个属性,并在创建时为其赋予一个值,然后在 .dfm 文件中持久保存该值。
-
@DavidHeffernan 我的代码应该可以工作吗?
-
很难看出这将如何失败。它将保留在 .dfm 文件中。显然,它不会为在运行时创建的控件完成工作。如果您创建同一表单的多个实例,它也无法工作。您将在具有相同 ID 的不同表单上拥有控件。或者这就是你想要的?无论如何,让我们清楚。 “不工作”到底是什么意思?
-
@DavidHeffernan 没关系,“很明显,运行时创建的控件无法完成工作。”
-
@DavidHeffernan 最终组件应该像这样工作:每次将另一个组件添加到表单时,都会生成一个新的唯一名称。
标签: delphi properties components delphi-7