Vamos a ver:
Ayer hice algo así:
Código:
unit Element;
interface
uses
Windows, Classes;
type
TPoints = array of TPoint;
TElement = class(TComponent)
private
FPoints: TPoints;
procedure SetPoints(const Value: TPoints);
procedure ReadPoints(Reader: TReader);
procedure WritePoints(Writer: TWriter);
protected
procedure DefineProperties(Filer: TFiler); override;
public
property Points: TPoints read FPoints write SetPoints;
end;
procedure Register;
implementation
{ TElement }
procedure TElement.DefineProperties(Filer: TFiler);
begin
inherited;
Filer.DefineProperty('Points', ReadPoints, WritePoints, Length(FPoints) > 0);
end;
procedure TElement.ReadPoints(Reader: TReader);
var
I: Integer;
begin
Reader.ReadListBegin;
I := 0;
while not Reader.EndOfList do
begin
SetLength(FPoints, I + 1);
FPoints[i].X := Reader.ReadInteger;
FPoints[i].Y := Reader.ReadInteger;
Inc(I);
end;
Reader.ReadListEnd;
end;
procedure TElement.SetPoints(const Value: TPoints);
begin
FPoints := Copy(Value);
end;
procedure TElement.WritePoints(Writer: TWriter);
var
I: Integer;
begin
for I := 0 to Length(FPoints) - 1 do
begin
Writer.WriteInteger(FPoints[i].X);
Writer.WriteInteger(FPoints[i].Y);
end;
end;
procedure Register;
begin
RegisterComponents('Samples', [TElement]);
end;
end.
Entonce no estaba tan errado. Claro que es mejor usar como tú un contador de los puntos.
// Saludos