Un método que he utilizado con gran éxito es utilizar marcos con un TPageControl y vincular tarde mis marcos a tPageControl la primera vez que se selecciona la página. Esto mantiene el tiempo de carga de formulario bajo, al no crear marcos que nunca se visualizan, pero aún así permite la flexibilidad de crearse, el estado se mantiene al cambiar entre pestañas. Recientemente cambié a usar formularios e incrustarlos en lugar de marcos ... pero el concepto es el mismo.
Lo mismo se puede hacer utilizando un solo "punto de montaje" en un TTabControl y cambiándolo a medida que se cambia la pestaña, pero luego surge el problema de cómo lidiar con el estado de las pestañas cuando se cambian las pestañas.
[EDIT] Surge la pregunta de cómo manejar la comunicación entre el marco y el formulario principal. Esto en realidad es muy fácil de hacer usando interfaces. Basta con crear una nueva unidad que será compartido por la forma y el marco y añadir dos interfaces:
type
IFormInterface = interface
[guid]
procedure FormProc;
end;
IFrameInterface = interface
[guid]
procedure SetFormController(Intf:IFormInterface);
end;
tienen la forma implementar el IFormInterface, y el marco de la implementación del IFrameInterface.Al hacer clic en una pestaña y mostrar un marco, a continuación, ejecutar código como el siguiente:
var
FrameIntf : IFrameInterface;
begin
if Supports(FrameObj,IFrameINterface,FrameIntf) then
FrameIntf.SetFormController(Self);
end;
su puesta en práctica del marco del método SetFormController entonces retener la referencia pasado, lo que le permitiría a llamar hacia arriba en la forma .
procedure TFrame1.SetFormController(Intf:IFormInterface);
begin
fFormController := Intf;
end;
Procedure TFrame1.Destroy; override;
begin
fFormController := nil; // release the reference
inherited;
end;
Procedure TFrame1.Button1Click(Sender:tObject);
begin
if fFormController <> nil then
fFormController.FormProc
else
Raise Exception.Create('Form controller not set');
end;
Gracias Jim. Entonces, ¿TTabControl es una solución preferida cuando se llena una pestaña con objetos en tiempo de ejecución, mientras que un PageControl + TabSheets + Frames es una mejor opción cuando se configura la UI en el momento del diseño? – Gulbahar
No. A TTabControl es la solución preferida al editar las propiedades de una lista de objetos del mismo tipo, ya que cambiar las pestañas no cambia los controles que ve, solo el índice de pestañas. Un control de página es para poner más de una página en diferentes controles en un formulario a la vez. (Y Jim no escribió esa respuesta; lo hice. Le hizo una edición.) –
Gracias Mason, tiene sentido. Para mi uso, parece un PageControl + algunas hojas de pestañas, cada una con un marco es la solución preferida para lo que tengo que hacer. – Gulbahar