コンポーネントにデフォルトのプロパティ値を定義することは可能でしょうか。
つまり、設計時に、システム内の各 TDBGrid に一意の名前 (おそらく GUID) を設定したいのですが、可能ですか?
実行時と設計時の両方で機能する、コンポーネントの一意性を制御する別の方法があります。また、デルファイを閉じた後も持続する必要があります。例: コンボボックス リストの値。
前もって感謝します!
編集
以下はコードです。これは機能していません。
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 が必要です。