Muy cierto amigo Carlos, el código puede mejorarse...
No es por querer ser malo, pero ese ¡código lástimó mis ojos! Considero que ahora que se ha solucionado el problema, lKinGl debe resumirlo; achicar esos anidamientos, que muy posiblemente la mayoría son innecesarios.
Primero, por las dudas, que haga una copia de la Unit

y luego la reduzca, que limpie ese código... quien sabe, quizás luego debe modificar el sistema y al volver a revisar esa unidad se lleve un susto. Tener un código limpio ayuda mucho.
Saludos,