Page 1 of 1

Agregar Marca de Agua TTaskPanel ( Solucionado )

PostPosted: Sat May 24, 2014 1:37 pm
by cuatecatl82
Saludos Colegas:

Estoy trabajando con la excelente Clase TTaskPanel de Andres Reyez Hernandez, me gustaria agregarle un poco de estética y me preguntaba si es posible dibujar un Bitmap de forma transparente para simular marca de agua en la parte baja de la barra:

Image

Como podria hacerlo ya que trabajo desde recursos en Dialogo, yevo 2 dias tratando pero no doy ya que dibuja la imagen pero detras del control, seria posible hacerlo sin tocar la clase original..? como hacerlo

Saludos..

Re: Agregar Marca de Agua TTaskPanel

PostPosted: Sun May 25, 2014 1:39 am
by cuatecatl82
Casi un dia de trabajo más en este detalle y parece que ya he logrado algo, pero todavia me falla, les comento:

Para poder agregar esta modalidad agrege una DATA "cBmpTransp" para el nombre del archivo BMP a mostrar y un Funcion Override "WaterMark()" para mostrar la imagen a la clase TTaskPanel

Code: Select all  Expand view
PROCEDURE OverrideAndExtend()

EXTEND CLASS TTaskPanel WITH DATA   cBmpTransp
EXTEND CLASS TTaskPanel WITH METHOD WaterMark

RETURN

STATIC FUNCTION WaterMark()

LOCAL oIma
LOCAL Self:= qSelf()
LOCAL hDC:= GetDC()

DEFINE IMAGE oIma OF Self FILENAME ::cBmpTransp
    PalBmpDraw( hDC, 550,50, oIma:hBitmap, , 100,100 )
    oIma:END()
RETURN Nil


y la invoco así:

Code: Select all  Expand view
LOCAL oDlg, oTask
  DEFINE DIALOG      oDlg    RESOURCE "Test"
REDEFINE TASKPANEL   oTask   ID 100 ANIMATE
   oTask:cBmpTransp:= ".\windows.bmp"
   oTask:WaterMark()
ACTIVATE DIALOG oDlg CENTERED On init ArmaTaskPnl(oTask)
Return nil
 

Ya la muestra al iniciar TTaskPanel, pero la deja atras, y al cerrar el dialogo la imagen se queda en pantalla:

Image
Image

Alguien que me de una luz, Maestro Antonio, Uwe, Daniel Garcia-Gil, maestros de las images con trasparencia, se los agradeceria mucho..

Saludos y gracias.

Re: Agregar Marca de Agua TTaskPanel

PostPosted: Sun May 25, 2014 6:20 pm
by carlos vargas
me parece que ademas de llamar la funcion en el on init, tambien debes llamarla en el on paint, para que la repinte cada vez que lo haga el control.
ademas deberás hacer un metodo end, para que elimine el bitmap, esto que pongo es algo al vuelo, no probado de ninguna manera, es como darte una idea.
Code: Select all  Expand view

...
EXTEND CLASS TTaskPanel WITH DATA   cBmpTransp
EXTEND CLASS TTaskPanel WITH DATA   oBmpTransp

EXTEND CLASS TTaskPanel WITH METHOD MyEnd
...
STATIC FUNCTION WaterMark()
    LOCAL Self := HB_QSelf()
    LOCAL hDC := GetDC()

    IF !empty( ::cBmpTransp )

        DEFINE IMAGE ::oBmpTransp OF Self FILENAME ::cBmpTransp

        IF hb_isObject( ::oBmpTransp ) .and. ::oBmpTransp:hBitmap <> 0
            PalBmpDraw( hDC, 550, 050, ::oBmpTransp:hBitmap, , 100, 100 )
        ENDIF

    ENDIF
   
    ReleaseDC( ::hWnd, hDC )

RETURN NIL

STATIC FUNCTION MyEnd()
    LOCAL Self := HB_QSelf()

    IF hb_isObject( ::oBmpTransp ) .and. ::oBmpTransp:hBitmap <> 0
        ::oBmpTransp:end()
    ENDIF

    ::end()

RETURN NIL

 


otra cosa yo uso esta funcion para que lo muestre trasparente, busca en la ayuda de fwh
Code: Select all  Expand view

   ABPaint( hDC                                                       , ;
            ( ( oMainD:oWndClient:nWidth()  - oBmpLogo:nWidth()  ) )/2, ;
            ( ( oMainD:oWndClient:nHeight() - oBmpLogo:nHeight() ) )/2, ;
            oBmpLogo:hBitmap, 0 )

 

salu2
carlos vargas

Re: Agregar Marca de Agua TTaskPanel

PostPosted: Mon May 26, 2014 3:53 am
by cuatecatl82
carlos vargas

Gracias por tu sugerencia, te comento que hace lo mismo, no dibuja la imagen dentro del TaskPanel, si muevo las coordenadas para poder dibujarla fuera del dialogo si se ve, pero al cerrar no lo borra queda pegada como en el ejemplo que comente anteriormente, ya habia probado ponerle en el on paint que pinte la imagen pero la pinta en las coordenadas que le indico no donde deveria, no toma como contenedor a TaskPanel, creo que eso seria lo ideal pero no encuentro la manera de lograrlo..


Mi idea es hacer algo como esto:

Image

Con la posibilidad de variar su nivel de trasnparencia ya sea en bmp a 32bits o a 24bits de colores

Continuo revisando y probando..

Re: Agregar Marca de Agua TTaskPanel

PostPosted: Mon May 26, 2014 3:54 pm
by carlos vargas
prueba

...
LOCAL hDC := ::GetDC() // aca usabamos GetDC() el cual obtenial el DC del objecto actual (dialogo) en tanto ::GetDC obtendra el DC del control en si.


salu2

Re: Agregar Marca de Agua TTaskPanel

PostPosted: Mon May 26, 2014 11:14 pm
by cuatecatl82
Muchas Gracias Carlitos, con tu bondadosa ayuda estoy logrando mi objetivo, te comento que ya dibuja la imagen dentro del control tTaskPanel, pero todavia tiene inconvenientes: y es que no dibuja a la primera el bitmap.

Image

Hay que arrastrar el dialogo de arriba a abajo o a los lados para que dibuje la imagen, y cuando lo hace y mueves el mouse el bitmap desaparece, a veces lo hace con la trasparencia que le asigno, pero a veces no, si abres y cierras otras ventanas con el dialogo abierto la imagen desaparece.. te envio un exe con el error que describo y los fuentes del proyecto..

Ojala le puedas encontrar el detalle, te lo agradeceria bastante..

http://www.mediafire.com/download/gaa5xfb40mys580/WaterMark.zip

Saludos..

Re: Agregar Marca de Agua TTaskPanel

PostPosted: Tue May 27, 2014 3:06 pm
by carlos vargas
okis, lo revisare

Re: Agregar Marca de Agua TTaskPanel

PostPosted: Tue May 27, 2014 3:45 pm
by cuatecatl82
Les comento lo siguiente:

He logrado evitar que una vez dibujado el bitmap no desaparesca, encontre que el metodo MouseMove de la Clase TTaskpanel hace el efecto de cambiar color y asignar un CursorHand como si se tratara de un link al pasar el cursor por el titulo del panel, en mi caso no necesito que este efecto se manifieste, modifique la clase no se si de manera correcta evitando este efecto:

Code: Select all  Expand view

PROCEDURE OverrideAndExtend()

  EXTEND CLASS  TTaskPanel WITH DATA   cBmpTransp
  EXTEND CLASS  TTaskPanel WITH DATA   oBmpTransp
 
  EXTEND CLASS  TTaskPanel WITH METHOD WaterMark
  EXTEND CLASS  TTaskPanel WITH METHOD MyEnd

OVERRIDE METHOD MouseMove    IN CLASS  TTaskPanel  WITH MiMouseMove

RETURN

//-------------------------------------------------//
STATIC FUNCTION WaterMark()
   
LOCAL Self := HB_QSelf()
LOCAL hDC := ::GetDC()

    IF !EMPTY( ::cBmpTransp )

        DEFINE IMAGE ::oBmpTransp OF Self FILENAME ::cBmpTransp

        IF hb_isObject( ::oBmpTransp ) .AND. ::oBmpTransp:hBitmap <> 0
            ABPaint( hDC, 07, 470, ::oBmpTransp:hBitmap, 250 )
        ENDIF

    ENDIF

    ReleaseDC( ::hWnd, hDC )

RETURN Nil


//-------------------------------------------------//
STATIC FUNCTION MyEnd()

LOCAL Self := HB_QSelf()

    IF hb_isObject( ::oBmpTransp ) .AND. ::oBmpTransp:hBitmap <> 0
        ::oBmpTransp:END()
    ENDIF

    ::END()

RETURN Nil

//-------------------------------------------------//
STATIC FUNCTION MiMouseMove( nRow, nCol, bKeyFlags )

# Define TME_LEAVE             2

LOCAL Self := HB_QSelf()

   TrackMouseEvent( ::hWnd, TME_LEAVE )

RETURN Nil
 


Lo que no logro es que pinte el bitmap a la primera, no funciona hacer oDlg:Refresh(), oTask:Refresh() o ::oBmpTransp:Refresh(), la unica forma de pintar el bitmap es arrastrando el dialogo fuera del tamaño de la pantalla arriba, abajo o a los lados, por este mismo fallo continua desapareciendo la imagen al sobre poner otras ventanas o dialogos

Carlitos te envio una actualizacion con los cambios..
https://www.mediafire.com/?kh9717bu8aer5ql

Gracias..

Re: Agregar Marca de Agua TTaskPanel

PostPosted: Wed May 28, 2014 1:06 pm
by cuatecatl82
Maestro Antonio:

Alguna Idea de como evitar este fallo en el pintado..? :cry: :cry: :cry:

Re: Agregar Marca de Agua TTaskPanel

PostPosted: Mon Jun 02, 2014 9:33 pm
by cuatecatl82
Saludos de Nuevo al foro:

Perdón por la insistencia con el tema, llevo una semana y no doy como corregir este problema
carlos vargas, pudiste revisar el ejemplo que comparti.?
Maestro Anotio que puedo hacer, por dondemas puedo modificar o probar..?

Saludos y Gracias..

Re: Agregar Marca de Agua TTaskPanel

PostPosted: Thu Jun 05, 2014 1:58 am
by cuatecatl82
Saludos a la comunidad:

Cierro en tema, me costo un poco encontrar y solucionar el fallo pero quedo.
Probado en Windows XP con varios temas, Windows 7 y Windows 8

Image

Saludos y gracias por leer el tema..

Re: Agregar Marca de Agua TTaskPanel ( Solucionado )

PostPosted: Thu Jun 05, 2014 1:55 pm
by Patricio Avalos Aguirre
Hola cuatecatl82

y cual fue la solucion ?

sería bueno incluirla para que los que usamos ttaskPanel de andres reyes

Re: Agregar Marca de Agua TTaskPanel ( Solucionado )

PostPosted: Thu Jun 05, 2014 7:00 pm
by sysctrl2
yo tambien la uso,

Re: Agregar Marca de Agua TTaskPanel ( Solucionado )

PostPosted: Wed Jun 18, 2014 4:54 am
by Patricio Avalos Aguirre
para q no se quede en el olvido

pd: Seria bueno que cada solucion se posteara ya que nos sirve para todos

Re: Agregar Marca de Agua TTaskPanel ( Solucionado )

PostPosted: Mon Nov 17, 2014 9:39 pm
by jbrita
Hola cuatecatl82, como dijo Patricio

y cual fue la solucion ?

sería bueno incluirla para que los que usamos ttaskPanel de andres reyes