El caso es que tengo un problema de cuidado con la clase TImage y similares (utilizo FW 2.3 y Clipper 5.3 en XP). Pues con Windows 95,98 y WinMe se pueden abrir la mayoría de gráficos/imágenes con nViewLib, pero con XP TImage utiliza nViewl16 (16 bits), en lugar de nViewlib (32 bits), pues pasa por la zona:
if ! ( IsWin95() )
::hBitmap = NViewLibLoad( AllTrim( cBmpFile ), ::nProgress )
else
::hBitmap = NViewLib32( AllTrim( cBmpFile ), ::nProgress )
endif
y como no es W95 pues abre nViewl16.
Puedo forzar la apertura de nViewlib en XP, pero me devuelve handles de más de 10 dígitos, algunos incluso, negativos. He intentado acortarlos con nLowWord(), nHiWord(), con una mezcla de ambos o restando 65536 antes o después de aplicar las funciones. Pero nada de nada. Por fortuna FreeImage me dió la idea de utilizar:
hBmp = nLoWord( WOWHandle16(hBmp, 8 ) ) ¡Y funciona!
El problema es que no lee ni la mitad de gráficos que con nViewl16. Utilizaría nViewl16, lo que pasa es que con esa librería si un gráfico no lo puede leer te saca un mensaje de advertencia. Como mi programa ya tiene su propio sistema de mensajes (muy elaborado) y durante la lectura del albúm muestra un "Espere un momento, Por favor..." pues el programa se queda colgado hasta que se cierre el mensaje de la librería (que casualmente aparece por debajo del mío y no se puede cerrar de forma convencional.).
Y si utilizo nViewlib, no da error si no lee un fichero, pero no lee tantos como con nViewl16. Por ahora he programado una solución de compromiso. Abro lo que puedo con nViewlib y lo demás si no es muy grande con nViewl16 rezando para que no se cuelgue. Será cuestión de advertir al cliente. No deja de ser una solución a medias.
Lo he intentado con FreeImage, pero no se si lo estroy haciendo mal, pero me da la impresión de que FreeImage está pensada para programar en 32 bits. O al menos, con el XP me da error.
Consigo abrir la librería "manualmente" pero después me da error en la librería GDI32.dll (.Por cierto, FreeImage tiene más de 8 carácteres y no se abre en XP con LoadLibrary ni a tiros (a 16 bits).
Si alguién tiene alguna idea, le agradecería la ayuda.
Un saludo