msgsplash alpha bitmap

Post Reply
User avatar
DiGregorio
Posts: 42
Joined: Fri Nov 04, 2005 12:22 am
Location: Ven - Ita
Contact:

msgsplash alpha bitmap

Post by DiGregorio »

Antonio, extraño no?

Estuve trabajando la funcion msgsplash() con un bitmap alpha channel, y consegui un posible error que no se si solo me sucede a mi:

Cuando esta en la pantalla el bitmap los "n" segundos que determines en la funcion, si pasas el mouse por encima de la imagen cuando esta aparece al iniciar el programa, esta imagen se va desvaneciendo y va apareciendo lo que estaba detras del bitmap.

Nota Importante: no lo hace si detras de la imagen tenemos solo el escritorio de Windows, solo lo hace si detras de la imagen tenemos programas abiertos, como por ejemplo si tenemos un dialogo de MI PC abierto y desde alli ejecutamos nuestro programa con el msgsplash la imagen aparece sin problemas y se ve muy bien, pero si pasamos el mouse encima de ella, se va desvaneciendo y van apareciendo las imagens del dialogo de MIPC, mientras que si tenemos un acceso directo en el escritorio de Windows y ejecutamos el programa, la imagen bitmap aparece directamente sobre el escritorio de Windows y al pasar el mouse la imagen pertenece intacta.

Image

Utilizo Windows Vista Ultimate

Gracias.
FWH/FWHX 9.10 + Harbour + xMate 1.5

Domenico Di Gregorio
Italia - Venezuela
stePyme 1.0
MGA
Posts: 1219
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá
Contact:

Re: msgsplash alpha bitmap

Post by MGA »

Domenico,

Estou com o mesmo problema, conseguiu alguma solução para o problema ?

Muito obrigado
ubiratanmga@gmail.com

FWH17.04
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: msgsplash alpha bitmap

Post by Antonio Linares »

Domenico,

Hemos probado a modificar la función MsgSplash() de esta forma, pero el efecto parece seguir ocurriendo pues son eventos de repintado que envia la ventana en donde se mueve el ratón:

Code: Select all

function MsgSplash( cBmpFile, nSeconds, bAction )

   local oBmp, hDC, hBmpBack, nStartAt, hWnd
   local nTop, nLeft, nBottom, nRight, nWidth, nHeight

   DEFAULT nSeconds := 5

   if Empty ( cBmpFile )
      if bAction != nil
         Eval( bAction )
      endif
      return nil
   endif

   if "." $ cBmpFile
      DEFINE IMAGE obmp FILENAME cBmpFile
   else
      DEFINE IMAGE obmp RESOURCE cBmpFile
   endif

   nWidth   = nBmpWidth( oBmp:hBitmap )
   nHeight  = nBmpHeight( oBmp:hBitmap )
   nLeft    = ( GetSysMetrics( 0 ) / 2 ) - nWidth / 2
   nTop     = ( GetSysMetrics( 1 ) / 2 ) - nHeight / 2
   nRight   = nLeft + nWidth - 1
   nBottom  = nTop + nHeight - 1
   hWnd     = GetDesktopWindow()

   hBmpBack = FWSaveScreen( hWnd, nTop, nLeft, nBottom, nRight )

   SetCapture( hWnd )
   ShowCursor( .f. )
   if oBmp:HasAlpha()
      ABPaint( hDC := GetWindowDC( hWnd ), nLeft, nTop, oBmp:hBitmap )
   else
      DrawBitmap( hDC := GetWindowDC( hWnd ), oBmp:hBitmap, nTop, nLeft )
   endif
   ReleaseDC( hWnd, hDC )
   if bAction == nil
      Sleep( nSeconds * 1000 )
   else
      nStartAt := Seconds()
      Eval( bAction, oBmp )
      if ( nSeconds -= ( Seconds() - nStartAt ) ) > 0
         Sleep( nSeconds * 1000 )
      endif
   endif
   FWRestScreen( hWnd, hBmpBack, nTop, nLeft, nBottom, nRight )
   DeleteObject( hBmpBack )

   oBmp:End()
   ReleaseCapture()
   ShowCursor( .t. )

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply