Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 31-10-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Si vas a usar un PageControl, sólo podrás ver un frame al mismo tiempo, y tener 15 frames cargado en memoria (si son complejos) puede ser un derroche de recursos.

Lo que puedes hacer es crear el frame en tiempo de ejecución al cambiar de páginal (evento OnPageChanging si no recuerdo mal).

Puedes hacer uso de una variable global que indica el frame actual que se está mostrando en un momento, se utiliza para liberar el frame y cargar el nuevo. Ejemplito ¿no?
Código Delphi [-]

uses Ufruno, // frame1 definido en esta unidad
       Ufrdos; // lo mismo
{
Nomenclatura:
  Ufruno es la unidad .pas donde está el frame
  Tfruno sería el tipo de ese frame lo ves en su definición:
"  type Tfruno = class(TFrame)"
}
Type FrameClass = class of TFrame; 
// guarda la clase de un TFrame para poder crearlo.

type TForm  = class (Tform) // el principal
private 
  actual :TFrame;
  frames : array [0..15] of TFrame;

  procedure OpenFrame( idx : integer);
end;

procedure TForm.Create(..);
begin
  // cargamos los tipos de frames que vamos a tener
 // como ves lo que se pone es el tipo (type) del frame
  frames[0] := Tfruno; 
  frames[1] := Tfrdos;

{  El índice 0 del array, lo hacemos corresponder con el TabSheet 0
  El índice 1 del array, lo hacemos corresponder con el TabSheet 1

  Así el Tabsheet 0 mostrará el frame de tipo Tfruno
}
 ...
end;


// si no recuerdo mal, en este evento te dice la página actual
// del TPageControl y la página nueva que se va a mostrar
Procedure TForm.PageControlChanging( oldIndex, NewIndex:integer);
begin
  freeAndnil (actual); //eliminamos de RAM el frame que se está mostrando ahora.


// creamos el nuevo frame, dependiendo del TabSheet al que se quiere cambiar. 
  actual := frames[NewIndex].Create(nil); 

  //situamos el frame dentro del TabSheet
  actual.Parent := PageControl.Pages[NewIndex];
  actual.align := alclient;
  actual.visible := true;
  // sería conveniente tener la propiedad visible de cada frame a false en
  // tiempo de diseño, así al alinearla al client, no se vería el cambio de tamaño
end;

procedure Tform.Close(...);
begin
  // no olvidemos liberar el frame actual:
  freeandnil(actual);
end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
pasar datos de un form a otro form vroa74 API de Windows 15 12-10-2007 19:11:52
Delphi exe dentro de otro exe midnight Varios 4 09-06-2007 16:19:54
Imposible hacer visible un form desde otro form SMTZ .NET 13 16-01-2006 21:41:08
Ejecutar un exe dentro de otro Rafa Varios 4 18-04-2004 00:36:57
Un componente dentro de otro. Tonio OOP 9 11-11-2003 23:44:12


La franja horaria es GMT +2. Ahora son las 19:44:31.


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
Copyright 1996-2007 Club Delphi