Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #8  
Antiguo 17-05-2015
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Llego 5 días tarde, pero en fin, daré mi opinión, ya que me doy por aludido en el tema.

Cuando he estado en una situación similar (scrollBox con Tframes), la forma más rápida de sincronizar ambos es:
- Los frames y paneles con Owner al ScrollBox
- Al borrar un panel, refrescar todo , es decir, hacer un scrollbox.DestroyComponents (que no debería usarse... pero está ahí para ser usado ), y después inicializar el array (poniendo los frames del array a nil, ya que el ScrollBox los liberó). Por ultimo, creo todos los paneles/frames de nuevo.

Otro método (sería lo suyo, pero implica más trabajillo), usar el Notification, me explico:

Cuando un componente del Form se va a liberar, informa a su dueño (si lo tiene) de este hecho, de forma que el dueño, no intentará liberarlo cuando se cierre. Ejemplito:

Un form con un botón y un TEdit, en el botón pones el código "edit1.Free".
Ejecutas el proyecto, pulsas el botón (el Edit desaparece del Form) y cierras el proyecto con la X roja.
No produce ningún error, porque el Edit informó al Form que se iba a liberar y ya el Form lo quitó de su lista de componentes que controla su destrucción.
Si el Form intenta liberar por segunda vez el Edit,daría un Access Violation.

Solo hay un problema: que tu array se entere que el componente frame se ha liberado. Para eso, puedes guardar en el Frame.Tag el índice donde se encuentra en vLista.

No tenemos ese código, pero en algún momento harás algo así:
vLista[n].vFrame := FrameRecienCreada;
pues agregas otra línea:
FrameRecienCreada.Tag := n ;

Y ahora en el form, añades lo siguiente:
Código Delphi [-]
type  TForm1 = class(TForm)
  private
    { Private declarations }
  protected
    procedure Notification(AComponent: TComponent;
      Operation: TOperation); override;

  public
    { Public declarations }

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Notification(AComponent: TComponent;
  Operation: TOperation);
  var indice: Integer;
begin

// AComponent es el componente del Form que se va a liberar. Todavía está vivo.
// Operation puede ser opInsert (que se va a insertar en el Form) o bien opRemove (que se va a quitar del Form)
  inherited Notification(AComponent, Operation);
  if (AComponet is TFrame) and (operation = opRemove) then begin
    indice := TFrame(Acomponet).Tag;
    vLista[indice].vFrame := nil ;
  end;
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
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Acceder desde un WebBrowser a un frame que esta dentro de otro frame. deneus Delphi para la web 1 25-10-2014 17:51:58
Como liberar el qreport ingabraham Impresión 2 28-01-2009 01:38:23
mostrar frame como modal peccatum Varios 19 05-06-2008 19:18:23
Como saber si me frame esta creado en cierto evento? Albano OOP 2 15-03-2007 23:13:44
Como acceder a los componentes de un frame? CORBATIN OOP 7 25-07-2003 20:24:23


La franja horaria es GMT +2. Ahora son las 18:32:29.


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