Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   TPageControl (https://www.clubdelphi.com/foros/showthread.php?t=36280)

Neiro 06-10-2006 21:33:48

TPageControl
 
De antemano gracias. Lo unico que quiero hacer es crear en tiempo de ejecucion un TTabSheet identico a uno que ya fue creado en tiempo de diseño.

Muchas Gracias

jachguate 06-10-2006 21:58:06

Hola.

En primer lugar, bienvenid@ al clubdelphi, el punto de encuentro de los programadores de habla hispana.

Te recomiendo una buena lectura de la guia de estilo, utilizar siempre la búsqueda antes de abrir un nuevo hilo en los foros y plantear, en la medida de lo posible, preguntas puntuales sobre temas concretos.

Sobre tu pregunta, podes crear el TTabSheet y copiar todas aquellas propiedades que consideres relevantes para que el mismo sea "identico" al que fue creado en tiempo de diseño.

Básicamente algo como:

Código Delphi [-]
begin
  NuevoTab := TTabSheet.Create(Self);
  NuevoTab.Parent := ViejoTab.Parent;
  NuevoTab.Font := ViejoTab.Font;
  NuevoTab.Left := ViejoTab.Left;
  // etcetera
end;

Hasta luego.

;)

maeyanes 06-10-2006 22:02:46

O simplemente usar el método Assign que tienen todos los objetos que descienden de TPersistent...

Código Delphi [-]
NuevoTab := TTabSheet.Create(Self);
NuevoTab.Parent := PageControl1;
NuevoTab.Assign(ViejoTab)


Saludos...

roman 06-10-2006 22:21:44

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

maeyanes 06-10-2006 22:25:57

Bueno, la verdad que no sabía que TTabSheet no redefinía el método Assign, la verdad es que lo supuse. De haber sabido, claro que no lo hubiera recomendado...

Entonces siendo así, el método propuesto por jachguate sería lo correcto para este caso...


Saludos...


La franja horaria es GMT +2. Ahora son las 09:46:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi