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

 
 
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
 


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 16:36:56.


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