Hola.
Casi siempre que encuentro en Delphi algún defecto incómodo (es de esperarse que existan al ser una herramienta de programación tan vasta), como el que explicas, y tal defecto me impide conseguir el objetivo que tengo trazado en el proyecto en cuestión, busco la manera de solventarlo.
Primero trato de averiguar si ya existe una aceptación oficial del mismo por parte del
fabricante, con su respectivo parche o solución alternativa.
De no encontrar solución hecha que me satisfaga, estudio el código fuente de la VCL procurando descubrir la causa (a veces de todas formas hago esto para conocer los detalles del asunto).
Ocasionalmente encuentro la razón del fallo, pero también me ha pasado que llego hasta donde el código fuente transfiere el control a una DLL de la que no hay código fuente disponible. Dependiendo de la calidad y claridad de los datos obtenidos, elaboro algún tipo de solución, que a veces resulta elegante y en otros casos una auténtica chapuza.
El caso por el que uno cruza los dedos es cuando el defecto en cuestión se localiza en el código fuente de un método virtual (o mensaje), tal método no hace referencia a elementos privados para los cuales no haya cuando menos acceso protegido (clásicos campos "FOnlyForMyEyes") y la clase a la que pertenece dicho método puede ser sustituida para cualquier elemento que haga uso de ella. Cuando es así, puede derivarse una clase hija redefiniendo el método en cuestión, aplicando en él el parche o código que ayude a evitar el defecto.
Pero también hay situaciones donde el problema reside en un método estático o función suelta, o el método es virtual y por lo tanto redefinible pero hace montones de referencias a elementos, permítanme la expresión,
ultraprivados, y eso complica aplicar un parche sin modificar directamente el código fuente. De cualquier manera, cada caso tiene sus particularidades.
Te recomiendo buscar en QualityCentral si este error ha sido ya reportado, en qué estado se encuentra y qué soluciones hay. Y, cuando así prefieras también, estudiar la clase TFmtBCDField, valiéndote del propio depurador de Delphi además del código fuente de la VCL, para tratar de encontrar la causa del problema y con ello ver si es posible implementar una solución.
Un saludo.
Al González.
