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; for i:= 0 to PanelPagos.ControlCount-1 do
begin
if(PanelPagos.Controls[i] is TAdvPanel)then
begin
pago:= TAdvPanel(PanelPagos.Controls[i]);
for j:= 0 to pago.ControlCount -1do
begin
if(pago.Controls[j] is TCheckBox)then cb:= TCheckBox(pago.Controls[j]);
if(pago.Controls[j] is TLabel)then
begin
if(monto.Tag=2)then subtotal:= StrToFloat(monto.Caption);
end;
end;
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));
for i:= 0 to PanelPagos.ControlCount-1 do
begin
if(PanelPagos.Controls[i] is TAdvPanel)then
begin
pago:= TAdvPanel(PanelPagos.Controls[i]);
if(pago.Tag<=DBLUCantPagos.ItemIndex+1)then
begin
for j:= 0 to pago.ControlCount -1do
begin
if(pago.Controls[j] is TCheckBox)then
begin
cb:= TCheckBox(pago.Controls[j]);
cb.Checked:= true;
end;
if(pago.Controls[j] is TLabel)then
begin
monto:= TLabel(pago.Controls[j]);
if(monto.Tag=2)then monto.Caption:= FloatToStr(abono);
end;
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;
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