Mon but est de lister les objets de type TElement dans une sous propriété de TElement. Est-ce possible ?
Ainsi, j'aimerais qu'un TElement ait sa position de calculé en fonction d'un autre TElement, et ce pour autant de propriétés TPosition crées.
cs_orelien
Messages postés137Date d'inscriptiondimanche 7 juillet 2002StatutMembreDernière intervention11 janvier 2009 3 oct. 2008 à 14:30
Et bien la compilation est impossible et me renvoie une erreur car la sous propriété TPosition de la classe TElement contient elle-même dans sa propre classe une propriété TElement.
A la lecture de la classe TPosition,le compilateur veut créer la propriété Reference (TElement) et bloque la dessus, car il ne trouve pas la classe TElement (qui ne vient qu'après).
J'espère avoir été clair dans mes explications...
Merci
constructor TPosition.Create(AOwner: TControl);
begin
inherited Create;
fControl := AOwner;
fX := 0;
fY := 0;
end;
procedure TPosition.SetXY(index: integer; value: single);
var ptr : ^single;
begin
case index of
0 : ptr := @fX;
1 : ptr := @fY;
end;
if value <> ptr^ then
begin
ptr^ := value;
change;
end;
end;
procedure TPosition.AssignTo(Dest: TPersistent);
begin
if Dest is TPosition then
with (Dest as TPosition) do
begin
fX := Self.fX;
fY := Self.fY;
Change;
end
else
inherited;
end;
procedure TPosition.Change;
begin
if Assigned(fOnChange) then
fOnChange(Self);
end;
destructor TElement.Destroy;
begin
fPosition.Free;
inherited;
end;
procedure TElement.AssignTo(Dest: TPersistent);
begin
if Dest is TElement then
with (Dest as TElement) do
begin
fNom := Self.fNom;
Self.fPosition.AssignTo(fPosition);
Changed;
end
else
inherited;
end;
procedure TElement.DoPositionChange(Sender: TObject);
begin
Changed;
end;
procedure TElement.Paint;
begin
inherited;
with Canvas do
begin
// ... paint here ... //
end;
end;
procedure TElement.SetNom(value: string);
begin
if value <> fNom then
begin
fNom := Value;
Changed;
end;
end;
procedure TElement.SetPosition(value: TPosition);
begin
value.AssignTo(fPosition);
end;