Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-03-2012
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Problemas de memoria al cerrar FORM

Hola amigos Foreros....


Nuevamente solicitando su ayuda. Antes que nada les comento q estoy trabajando con Delphi6, FB 1.5. El problema es el siguiente:

Tengo un Form (frmMenu) del tipo fsMDIForm y desde este form mando llamar a otro form (frmVentas) del tipo fsMDIChild y desde aqui mando llamar a otro form (frmCodigoBarra) del tipo fsStayOnTop.

en frmMenu, este es el codigo q utilizo para llamar a frmVentas:
Código Delphi [-]
procedure TfrmMenu.Capturar1Click(Sender: TObject);
begin
     if FindComponent('frmVentas') = nil then
           frmVentas:=TfrmVentas.Create(self);
     frmVentas.Show;
end;

y estando en frmVentas, dentro de la estructura de un CASE, llamo a frmCodigoBarra usando F9 de la siguiente manera:
Código Delphi [-]
....
        VK_F9:Begin
                sBtnF9.Enabled:=False;
                if FindComponent('frmCodigoBarra') = nil then
                       frmCodigoBarra:=TfrmCodigoBarra.Create(self);
                frmCodigoBarra.Show;
....

Estando en frmCodigoBarra, si puslo la tecla F9 el form se cierra. El evento de OnKeyDown de frmCodigoBarra tengo este codigo:
Código Delphi [-]
procedure TfrmCodigoBarra.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     case key of
      VK_F1: begin
//                HtmlHelp(GetDesktopWindow, Pchar(frmMenu.PathAyuda+'SisDLLManual.chm::/menu_ventas_diarias.htm'), HH_DISPLAY_TOPIC, 0);
             end;

      VK_F9 : begin
                frmVentas.sBtnF9.Enabled:=True;
                Close;
              end;
      end;
end;

Y en el evento OnClose de frmCodigoBarra, tengo esto:
Código Delphi [-]
procedure TfrmCodigoBarra.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
    Action:=caFree;
end;

Cuando se cierra frmCodigoBarra, el control pasa a frmVentas. En este formulario tengo un panel donde el usuario captura los datos de llave primaria para llamar el registro y consultarlo o modificarlo, etc. En el evento OnEnter de este panel, tengo lo siguiente:

Código Delphi [-]
        
        if frmCodigoBarra=nil then
        begin
        end else
        begin
             frmCodigoBarra.mskCodigo.SetFocus;
        end;

En cada iteración que hace el usuario para consultar algun registro, entra al evento OnEnter del panel de frmVentas, para "inicializar" algunas variables, cerrar algunos componentes IBQuery e iniciar una nueva transacción, etc, etc. hasta llegar a la validacion del form de frmCodigoBarra=nil....

ESCENARIO:

Supongamos que estando en frmVentas(fsMDIChild) activo el form frmCodigoBarra (fsStayOnTop) usando F9, pero me arrepiento y mejor la cierro, recordando q en estos momento el control esta en frmCodigoBarra, asi pues al pulsar F9 se ejecutan los siguientes codigos:

Código Delphi [-]
procedure TfrmCodigoBarra.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     case key of
      VK_F1: begin
//                HtmlHelp(GetDesktopWindow, Pchar(frmMenu.PathAyuda+'SisDLLManual.chm::/menu_ventas_diarias.htm'), HH_DISPLAY_TOPIC, 0);
             end;

      VK_F9 : begin
                frmVentas.sBtnF9.Enabled:=True;
                Close;
              end;
      end;
end;

Y en el evento OnClose de frmCodigoBarra, tengo esto:
Código Delphi [-]
procedure TfrmCodigoBarra.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
    Action:=caFree;
end;

Y si el usuario decide no trabajar con frmCodigoBarra, empiza a marcar errores de este tipo:

'Access violation at address 0061FC11 in module 'miaplicacion.exe'. Read of address 00000000'. Process stopped....etc, etc.'

Que me hace falta definir para evitar este error !?....alguien me pudiera ayudar. En realidad no sé si fui explícito en el planteamiento del problema, en caso de que haber sido asi, les agradeceré mucho me lo informaran.

Gracias amigos ! por ayuda y sobre todo POR SU TIEMPO !!!.....GRACIAS !!
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #2  
Antiguo 09-03-2012
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
BUENO.....me respondo solo !!! jejejeje....

En cuanto publique el hilo me fije en los links de abajo....Y OH SORPRESA !!!....AHI ESTABA LA RESPUESTA.

En uno de ellos menciona q en el Evento OnDestroy, agregar la siguiente linea de codigo Form4:=nil......asi q se lo agregue a mi aplicacion y funciono....vaya....eso pasa por haber consultado previamente en el foro de Delphi.....LO LAMENTO MUCHACHOS !!!....MEA CULPA !....

PROBLEMA SOLUCIONADO !!!
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
Respuesta



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
Abrir , cerrar DB MySL a que liberar memoria? darkbits Conexión con bases de datos 3 27-07-2010 22:33:15
Form no libera de memoria Paulao Varios 1 03-03-2009 17:24:48
Cerrar aplicación antes de desconectar la memoria flash MON___ API de Windows 3 13-01-2008 20:06:07
Cerrar un Form scooterjgm OOP 5 18-11-2004 11:27:33
Liberar memoria al cerrar un child. Bahamut Varios 2 04-05-2004 08:58:51


La franja horaria es GMT +2. Ahora son las 00:05:15.


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