mais on peu faire ceci : fusionner tout ...
type
TCircle = class(TGraphicControl)
private
fXYs : array[0..5] of integer;
fUpdateCount : integer;
fOnChange : TNotifyEvent;
procedure SetPos(index: integer; value: integer);
function GetPos(index: integer): integer;
protected
procedure Paint; override;
procedure AssignTo(Dest: TPersistent); override;
procedure Change; virtual;
procedure LoadFromStream(Stream: TStream); virtual;
procedure SaveToStream(Stream: TStream); virtual;
published
property X1 : integer index 0 read GetPos write SetPos default 0;
property Y1 : integer index 1 read GetPos write SetPos default 0;
property X2 : integer index 2 read GetPos write SetPos default 0;
property Y2 : integer index 3 read GetPos write SetPos default 0;
property X3 : integer index 4 read GetPos write SetPos default 0;
property Y3 : integer index 5 read GetPos write SetPos default 0;
property OnChange : TNotifyEvent read fOnChange write fOnChange;
public
procedure BeginUpdate;
procedure EndUpdate;
constructor Create(AOwner: TComponent); override;
end;
{ TCircle }
constructor TCircle.Create(AOwner: TComponent);
var N : integer;
begin
inherited;
for N := 0 to high(fXYs) do
fXYs[N] := 0;
end;
procedure TCircle.AssignTo(Dest: TPersistent);
begin
if Dest is TCircle then
with TCircle(Dest) do
begin
fXYs := Self.fXYs;
Change;
end
else
inherited AssignTo(Dest);
end;
procedure TCircle.Paint;
begin
with Canvas do
begin
{ paint here }
MoveTo(fXYs[0], fXYs[1]);
LineTo(fXYs[2], fXYs[3]);
LineTo(fXYs[4], fXYs[5]);
LineTo(fXYs[0], fXYs[1]);
end;
end;
procedure TCircle.Change;
begin
if fUpdateCount = 0 then
exit;
if Assigned(fOnChange) then
fOnChange(Self);
invalidate;
end;
function TCircle.GetPos(index: integer): integer;
begin
result := fXYs[index];
end;
procedure TCircle.SetPos(index, value: integer);
var ptr : ^integer;
begin
ptr := @fXYs[index];
if value <> ptr^ then
begin
ptr^ := value;
change;
end;
end;
procedure TCircle.LoadFromStream(Stream: TStream);
begin
Stream.Read(fXYs, 24);
end;
procedure TCircle.SaveToStream(Stream: TStream);
begin
Stream.Write(fXYs, 24);
end;
procedure TCircle.BeginUpdate;
begin
inc(fUpdateCount);
end;
procedure TCircle.EndUpdate;
begin
dec(fUpdateCount);
if fUpdateCount = 0 then
Change;
end;