Компонент TPersistent в TCollectionItem / Доступ к свойству TCollectionItem из TPersistent
Пожалуйста, обратите внимание на часть кода ниже TComponent
:
TMyField = class(TCollectionItem)
private
FName: String
FSqlField: TSqlField;
procedure SetName(const Value: String);
procedure SetSqlField(const Value: TSqlField)
published
property Name: String read FName write SetName;
property SqlField: TSqlField read FSqlField write SetSqlField;
end;
TSqlField = class(TPersistent)
private
FAlias: String;
FName: String;
FTable: String;
procedure SetField(Index: Integer; Value: String);
public
procedure Assign(Source: TPersistent); override;
published
property Alias: String index 0 read FAlias write SetField;
property Name: String index 1 read FName write SetField;
property Table: String index 2 read FTable write SetField;
end;
procedure TSqlField.SetField(Index: Integer; Value: String);
var
FOwner: TMyField;
begin
if (Value <> FAlias) or (Value <> FName) or (Value <> FTable) then
begin
case Index of
0: if Value <> FAlias then FAlias:= Value;
1: if Value <> FName then FName:= Value;
2: if Value <> FTable then FTable:= Value;
end;
if FName <> '' then
begin
FOwner:= GetOwner; //Error here: E2010 Incompatible types: 'TMyField' and 'TPersistent'
if FTable <> '' then FOwner.Name:= Format('%s_%s',[FTable,FName])
else FOwner.Name:= FName;
end;
end;
end;
Когда метод SetField
от TSqlField
обрабатывается, я хотел бы получить доступ к собственности Name
от TSqlField : TCollectionItem
так что я могу переименовать его.
Примечание: владелец TCollection
может быть один или другой TComponent
,
Пожалуйста, некоторые предложения о том, как это можно сделать.