Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-12-2010
franciscoca franciscoca is offline
Miembro
 
Registrado: ago 2008
Ubicación: La Plata
Posts: 12
Poder: 0
franciscoca Va por buen camino
Acces Violation at address...

Hola q tal?? estoy quemandome la cabeza hace varios dias!! y no encuentro el problema...... la historia viene asi, recorro un par de paneles y componentes casteandolos para trabajar sobre ellos, pero al llamar al proceso calcular total, dentro de otro proceso q se trabaja igual, y si anda bien, me tira el error acces violation, me fije si tenia problemas de indices con el controlcount pero no veo nada.. por favor si alguien tiene tiempo de verlo y ve cual es mi error voy a estar muy agradecido!!!!
hice un paso paso y eliminando lineas y el problema esta cuando casteo en las lineas resaltadas y en rojo.

Código Delphi [-]
procedure TFLiquidarPago.calcular_total;
var i,j:integer;  PanelPagos:TAdvPanel; total,subtotal:real; monto:TLabel;  pago:TAdvPanel;  cb:TCheckBox;
begin
   total:= 0;  //inicializo en 0 el total de la liquidacion
   //recorro todo el panel de pagos
   for i:= 0 to  PanelPagos.ControlCount-1 do
   begin
      if(PanelPagos.Controls[i] is TAdvPanel)then
      begin
           pago:= TAdvPanel(PanelPagos.Controls[i]);
          //recorro el pago
          for j:= 0 to pago.ControlCount -1do
          begin
             //si es un checkbox lo guardo en la variable cb
              if(pago.Controls[j] is TCheckBox)then cb:= TCheckBox(pago.Controls[j]);
              //si es un label (monto del pago) lo almaseno en la variable monto
              if(pago.Controls[j] is TLabel)then
              begin
                 if(monto.Tag=2)then subtotal:= StrToFloat(monto.Caption);
              end;

          end;

          //si el pago esta chequeado le agrego al total el imorte del pago
          if(cb.Checked)then total:= total+ StrToFloat(monto.Caption);
      end;
   end;
   if(CBInstalacion.Checked)then  total:= total + StrToFloat(ECostoInstalacion.Text);
   ETotalPesos.Text:= FloatToStr(total);
end;

procedure TFLiquidarPago.DBLUCantPagosChange(Sender: TObject);
var i,j,cant,mes_aux:Integer;  cb:TCheckBox;  pago:TAdvPanel; monto:TLabel;    fecha:TRxSpinEdit;
begin
   mes_aux:= 12;
   inicializarPagos;
   cant:=DBLUCantPagos.ItemIndex;
   PanelPagos.Height:= 40 + (40*(DBLUCantPagos.ItemIndex)); //muestro la cantidad de pagos correspondiente

   for i:= 0 to PanelPagos.ControlCount-1 do
   begin
        if(PanelPagos.Controls[i] is TAdvPanel)then
        begin
           pago:= TAdvPanel(PanelPagos.Controls[i]);
           //si el pago es <= a la cantidad para liquidar
           if(pago.Tag<=DBLUCantPagos.ItemIndex+1)then
           begin
             //recorro el pago
             for j:= 0 to pago.ControlCount -1do
             begin
               //si es un checkbox
               if(pago.Controls[j] is TCheckBox)then
               begin
                 cb:= TCheckBox(pago.Controls[j]);
                 cb.Checked:= true;
               end;
               //si es un label (monto del pago)
               if(pago.Controls[j] is TLabel)then
               begin
                 monto:= TLabel(pago.Controls[j]);
                 if(monto.Tag=2)then monto.Caption:= FloatToStr(abono);
               end;

               //si es un rxSpinEdit (mes y año del pago)
               if(pago.Controls[j] is TRxSpinEdit)then
               begin

                 fecha:= TRxSpinEdit(pago.Controls[j]);
                 if(fecha.Tag=5)then
                 begin
                    if(mes_aux<=0)then mes_aux:= 12;
                   //si son del anterior año
                   if(mes<=cant)then fecha.Text:=IntToStr(mes_aux+(mes-cant))
                   else fecha.Text:=IntToStr(mes-cant);
                   cant:= cant -1;
                 end;

                 if(fecha.Tag=6)then
                 begin
                   if(mes-(cant+1) <=0)then  fecha.Text:= IntToStr(ano-1)
                   else fecha.Text:= IntToStr(ano);
                 end;

               end;
             end;
           end;
        end;
   end;
   calcular_total;
end;



desde ya muchas gracias y espero encontrar el problema, saludos y felices fiestas
Responder Con Cita
  #2  
Antiguo 23-12-2010
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Código Delphi [-]
          for j:= 0 to pago.ControlCount -1do
          begin              //si es un checkbox lo guardo en la variable cb
              if(pago.Controls[j] is TCheckBox)then cb:= TCheckBox(pago.Controls[j]);
              //si es un label (monto del pago) lo almaseno en la variable monto
              if(pago.Controls[j] is TLabel)then
              begin
                monto:= TLabel(pago.Controls[j]); //Creo que te falta esta línea...
                if(monto.Tag=2)then subtotal:= StrToFloat(monto.Caption);               
              end;
          end;
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
  #3  
Antiguo 23-12-2010
franciscoca franciscoca is offline
Miembro
 
Registrado: ago 2008
Ubicación: La Plata
Posts: 12
Poder: 0
franciscoca Va por buen camino
Gracias Defcon1, Asi es faltaba esa linea!!! pero el problema sigue siendo el mismo, porq en si revienta en la linea de cast anterior... cuando hace el if probe comentandolo y revienta en esa, o en la siguiente if(pago.Controls[j] is TLabel)then

Código Delphi [-]
for i:= 0 to  PanelPagos.ControlCount-1 do
   begin
      if(PanelPagos.Controls[i] is TAdvPanel)then
      begin
           pago:= TAdvPanel(PanelPagos.Controls[i]);
          //recorro el pago
          for j:= 0 to pago.ControlCount -1do
          begin
             //si es un checkbox lo guardo en la variable cb
              if(pago.Controls[j] is TCheckBox)then cb:= TCheckBox(pago.Controls[j]);
              //si es un label (monto del pago) lo almaseno en la variable monto
              if(pago.Controls[j] is TLabel)then
              begin
                 monto:= TLabel(pago.Controls[j]);
                 if(monto.Tag=2)then subtotal:= StrToFloat(monto.Caption);
              end;

          end;

          //si el pago esta chequeado le agrego al total el imorte del pago
          if(cb.Checked)then total:= total+ StrToFloat(monto.Caption);
      end;
   end;
Responder Con Cita
  #4  
Antiguo 26-12-2010
franciscoca franciscoca is offline
Miembro
 
Registrado: ago 2008
Ubicación: La Plata
Posts: 12
Poder: 0
franciscoca Va por buen camino
Ya esta solucionado!!!! el problema era con la variable
PanelPagos:TAdvPanel; definida en el proceso calcular_total...
el problema era q el componente se llamaba asi y la variable para castearlo
se llamaba igual entonces al ejecutar ese proceso se creaba ese componente y
no encontraba los elementos q tenia q recorrer porq recorria la variable y no el panel...

gracias defcon1 por la ayuda!!!!
Responder Con Cita
Respuesta


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
Access violation at address elarys Varios 6 22-11-2007 19:24:35
Acces violation at address... al hacer un tmemorystream gabirojas Conexión con bases de datos 7 09-09-2007 03:07:56
Error Acces violation at Address... aqui si a qui no... NEG1414 C++ Builder 2 06-05-2007 12:47:41
Access violation at address ... Franklim API de Windows 2 03-12-2004 01:09:53
Access violation at address 005553D2 Antonio Rosas E Conexión con bases de datos 2 08-10-2004 21:18:55


La franja horaria es GMT +2. Ahora son las 01:37:04.


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