Hace algún tiempo me encontré con el mismo problema con algunos BMPs y PNGs que tenían un aspecto parecido al tuyo
Como no soy ningún experto en imágenes, y después de dedicar mucho tiempo a cambiar imágenes e intentar ver qué pasaba, pensé que el problema eran los BMPs que yo tenía.
Probé cambiando el nivel Alpha, la transparencia, etc, sin conseguir ningún resultado
Insisto en que no soy ningún experto en el uso de imágenes, es más, me considero bastante torpe en este aspecto
Encontré una solución que a mí me funcionó aunque tuve que cambiar la clase
Hice lo siguiente (por si te parece bien)
1.- Creé una DATA nueva en la clase BTNBMP
- Code: Select all Expand view
DATA nZeroZeroClr INIT Nil
2.- En el método Paint , en
todas las llamadas a la function DrawTransBmp, añadí esa DATA como parámetro final (creo que son 4 llamadas a esa funcion)
Por ejemplo
- Code: Select all Expand view
.../...
else
DrawTransBmp( ::hDC, hBmp, oBmpRect:nTop, oBmpRect:nLeft + 2, oBmpRect:nWidth, oBmpRect:nHeight, ::nZeroZeroClr )
endif
.../...
3.- Modifiqué esa function DrawTransBmp para que aceptara ese parámetro
- Code: Select all Expand view
static function DrawTransBmp( hDC, hBmp, nRow, nCol, nWidth, nHeight, nZeroZeroClr )
local hDCMem, hBmpOld, nOldClr //, nZeroZeroClr
DEFAULT nWidth := nBmpWidth( hBmp ), nHeight := nBmpWidth( hBmp ), nZeroZeroClr := Nil
hDCMem = CreateCompatibleDC( hDC )
// we can not get nZeroZeroClr from hDC is possible hDC are locked by other SelectObject
// An application cannot select a bitmap into more than one device context at a time.
hBmpOld = SelectObject( hDCMem, hBmp )
if nZeroZeroClr = Nil
nZeroZeroClr = GetPixel( hDCMem, 0, 0 )
endif
.../...
4.- En la definicion de mis botones, si tengo algun problema hacía lo siguiente
- Code: Select all Expand view
@ 3, 5 BTNBMP oBtn SIZE 132, 52 FILE "bdbar.bmp" NOBORDER ACTION oDlg:End() //MsgInfo ('Hola')
oBtn:nZeroZeroClr := -1
Et voilá
Pero, si me preguntas por qué ocurre con algunos BMPs? (No tengo ni idea, lo dejé por imposible)