Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Forms (https://www.clubdelphi.com/foros/showthread.php?t=31781)

nenufer 17-05-2006 20:19:11

Forms
 
Hola a tod@s . Os cuento:

Estoy utilizando delphi7, tengo un formulario MdiForm con un menu. Desde uno de los items llamo a un formulario Mdichild y quiero que este a su vez muestre otro Mdichild. Se puede hacer? Utilizo el form.show.

Me da el siguiente error : 'Acces violation at address 0046EA36 in module project.exe.'

Código Delphi [-]
procedure TFrmAlquileres.BuscarMoroso();
begin
  if DM.TblDeuda.Locate('IdSocio',DM.TblSociosIdSocio.Value,[]) then
    begin
      if MessageDlg('¿Desea cobrar la deuda ahora?',mtCustom,[mbYes,mbNo],0)=mrYes then
        begin
         //llama al un procedimiento para filtrar la tabla,campo,valor pasado  
         //como parametro
         DM.filtros(DM.TblDeuda,'IdSocio',DM.TblSociosIdSocio.Value);
         //Formulario
          FrmMorosos.Show; 
          FrmMorosos.GrpMoroso.Enabled := false;
        end;
    end;
end;

Gracias de antemano:)

maeyanes 17-05-2006 20:22:47

Y FrmMorosos ya está creado? Por que si no, primero tendrías que verificar si está creado, si no es así, crearlo:

Código Delphi [-]
if not Assigned(FrmMorosos) then
  FrmMorosos := TFrmMorosos.Create(nil); // O .Create(Application)

Saludos...

nenufer 17-05-2006 20:58:24

Buaa. No contaba con eso y es lo mas importante. Muchas gracias!!!!!!:D

nenufer 17-05-2006 21:43:37

Buenas otra vez:( . He probado lo que me has dicho

Código Delphi [-]
procedure TFrmAlquileres.BuscarMoroso();
begin
with DM do
begin
  if TblDeuda.Locate('IdSocio',TblSociosIdSocio.Value,[]) then
    begin
      if MessageDlg('¿Desea cobrar la deuda ahora?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
        begin
          if not Assigned(FrmMorosos) then
            FrmMorosos := TFrmMorosos.Create(application);
          filtros(TblDeuda,'IdSocio',TblSociosIdSocio.Value);
          FrmMorosos.Show;
          FrmMorosos.GrpMoroso.Visible := false;
          FrmMorosos.EdtDeuda.SetFocus;
        end;
    end;
end;

Si le digo que no quiero cobrar la deuda no me da ningun error, pero si elijo que sí,el primer socio que elijo(de un DBlookupCombobox) no me da ningun problema,me lo hace bien, pero al seleccionar otro me da un error: 'Acces violation at address 0040368 in module project.exe.
Libero memoria en el onclose con

Código Delphi [-]
Action := cafree;
,

pero no se si se me queda algo por hacer, porque cuando le doy por segunda vez no entra en :
Código Delphi [-]
if not Assigned(FrmMorosos) then
            FrmMorosos := TFrmMorosos.Create(application);
Por si sirve de algo la llamada la hago en el closeUp del lookupcombobox

Gracias otra vez.

maeyanes 17-05-2006 21:53:43

En el evento OnDestroy de TFrmMorosos has: FrmMorosos := nil.

El error en la segunda pasada te lo da por que FrmMorosos apunta a una dirección de memoria que ya no está en uso.


Por cierto, las ventanas MDIChild se muestran automáticamente al momento de crearlas, así que no hay necesidad de FrmMorosos.Show.


Saludos...

nenufer 17-05-2006 22:16:37

Graciaaas por contestar tan rapido. Me imaginaba que era en el ondestroy pero no tenia ni idea de que poner.

Cita:

Empezado por maeyanes
Por cierto, las ventanas MDIChild se muestran automáticamente al momento de crearlas, así que no hay necesidad de FrmMorosos.Show.

Cierto:cool: , no lo habia pensado asi.

Muchisismas graciaas.


La franja horaria es GMT +2. Ahora son las 14:00:24.

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