Ver Mensaje Individual
  #4  
Antiguo 31-10-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 28
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