Hola adriano_servite,
Al componente que utilizas no lo conozco, por lo que no sabría decirte mucho. Sólo puedo estimar o divagar sobre su funcionamiento teniendo como base al TCheckListBox original.
El código que yo expuse es una muestra simple y elemental de como se comporta el TCheckListBox en su evento OnClick para determinar si es posible conseguir una excepción de fuera de rango como el error. Si pruebas en un proyecto nuevo en limpio el código que expuse notarás que no hay modo que se consiga el error.
La única manera de reproducir el error es alternar, intencionalmente o sin percatarse de ello, el valor de ItemIndex
por código, como lo ejemplifiqué en el ejemplo del botón cuando lo fuerzo a que su valor sea -1 y luego intentar acceder a esa posición.
Hay algo en tu código que provoca esa excepción, por ello te había indicado que probaras añadiendo breakpoints y realizando un seguimiento hasta llegar a la línea conflictiva. Ve paso a paso.
Tienes una mezcla de código que dificulta entender el verdadero problema... No se vé en ese código alguna alteración de ItemIndex, Intencional o no, y es posible que el error venga arrastrado desde otro lado.
¿Eso no es todo el código verdad? ¿MostraFormApuracaoICMS es un procedimiento, que hace? ¿Qué es miLivroApuracaoICMS, Config,CRDEmpresa que se ven en el procedimiento ChamaFormularioICMS?
Cuando hablas de que es imposible hacerlo con un FOR pones este código:
for i := 0 to ChkLstBox.Items.Count -1 do
begin
ChkLstBox.Items;
if ChkLstBox.Checked then
Break; <=== siempre cai 1º
end;
¿Que es es ChkLstBox.Items? Se me hace que está fuera de lugar.
Veo demasiados procedimientos fuertemente vinculados y se hace que en parte hay un error de diseño... Algo me dice que lo estás complicando demasiado y se podría conseguir un código más limpio.... procedimientos que llaman a un form, o que crea un form... pasas datos de un form a otro... y eso dificulta entender lo que buscas hacer.
No es mi intención decirte que tu código está mal, pero si me lo permites quisiera decirte que me llama demasiado la atención la manera en como lo estás encarando.
No se que de todo ese código esta mal... hay cosas que no entiendo que significan o que hacen (o deberían hacer). Se que puede parecer pesado y quizá sea un exceso de mi parte si te pido que nos expliques el objetivo de tu código... habría que analizarlo de arriba hacia abajo y ver que es lo que está pasando.
Saludos,