Tema: TPageControl
Ver Mensaje Individual
  #4  
Antiguo 06-10-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No es tan simple.

TPersistent únicamente implementa el mecanismo base para que las clases descendientes se "clonen", pero la implementación en sí debe hacerla cada descendiente.

TPersistent.Assign hace esto:

Código Delphi [-]
procedure TPersistent.Assign(Source: TPersistent);
begin
  if Source <> nil then Source.AssignTo(Self) else AssignError(nil);
end;

es decir, llama al método AssignTo (lo opuesto, semánticamente hablando) del objeto que se le pasa. Y TPersistent.AssignTo hace esto:

Código Delphi [-]
procedure TPersistent.AssignTo(Dest: TPersistent);
begin
  Dest.AssignError(Self);
end;

o sea, se limita a lanzar un mensaje de error

Código Delphi [-]
procedure TPersistent.AssignError(Source: TPersistent);
var
  SourceName: string;
begin
  if Source <> nil then
    SourceName := Source.ClassName else
    SourceName := 'nil';
  raise EConvertError.CreateResFmt(@SAssignError, [SourceName, ClassName]);
end;

En otras palabras, la clase TPersistent únicamente implementa el mecanismo de llamadas a Assign o AssignTo. Las clases descendientes deben redefinir al menos uno de los dos para que la copia pueda hacerse.

En el caso de TTabSheet, no hay tal redefinición.

// Saludos
Responder Con Cita