Ver Mensaje Individual
  #1  
Antiguo 09-03-2012
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 646
Reputación: 23
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