Say Transparente sobre Brush o Gradient no funciona

Say Transparente sobre Brush o Gradient no funciona

Postby Cgallegoa » Thu Jul 15, 2010 1:11 am

Hola amigos,

En un diálogo simple, con un gradient, un say y un timer la transparencia del Say no funciona.

Cuando se refrezca el Say en el Timer, quita la transparencia.

Image

Ejemplo:
Code: Select all  Expand view
#include "FiveWin.ch"
#include "Ribbon.ch"

STATIC oTimer

Function Inicio()
LOCAL odlg, oBrush, oBtn, oSay
  DEFINE DIALOG oDlg FROM 0,0 TO 140,500 PIXEL TRANSPARENT TITLE "Transparent Say does not work either on brush or on gradient - FWH 10.3" //  BRUSH oBrush
      @ 20,150 SAY oSay PROMPT "Hora:  "+Time() OF oDlg PIXEL COLOR nRGB(255,50,50) SIZE 80,10
      @ 45,110 RBBTN oBtn PROMPT "Salir" OF oDlg SIZE 30,15 ROUND ACTION oDlg:end() PIXEL
  ACTIVATE DIALOG oDlg CENTERED ON INIT Set_Timer(oDlg,oSay);
     ON PAINT GradientFill( hDC, 0, 0, oDlg:nHeight, oDlg:nWidth, { { 0.50, 16054371, 8388608 } } )
Return(NIL)

function Set_Timer(oDlg,oSay)
  DEFINE TIMER oTimer INTERVAL 1000 OF oDlg ;
     ACTION (oSay:SetText("Hora:  "+Time()),oSay:Refresh())
  ACTIVATE TIMER oTimer
return


También probé con Brush y pasa lo mismo.

FWH-10.3, xHarbour 1.2.1, Borland 5.82, Windos XP, Windos Wista y Windows 7

Alguna sugerencia de cómo corregirlo ?

Gracias y Saludos,

Carlos Gallego
Saludos,

Carlos Gallego

*** FWH-24.07, xHarbour 1.3.1 Build 20240624, Borland C++7.70, PellesC ***
Cgallegoa
 
Posts: 492
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Re: Say Transparente sobre Brush o Gradient no funciona

Postby groiss » Thu Jul 15, 2010 6:29 am

Carlos intenta probar con esto:
Code: Select all  Expand view

ACTION (oSay:SetText("Hora:  "+Time()),osay:hide(),osay:show(),oSay:Refresh())

 

A mi así si me funciona.
Un saludo
José Luis
groiss
 
Posts: 224
Joined: Tue Sep 01, 2009 7:55 am
Location: Plasencia - ESPAÑA

Re: Say Transparente sobre Brush o Gradient no funciona

Postby Antonio Linares » Thu Jul 15, 2010 7:22 am

Carlos, José Luis,

Asi tambien funciona (probado en W7) y se evitan parpadeos:
Code: Select all  Expand view

     ACTION ( oSay:SetText("Hora:  "+Time()), oSay:Hide(), oSay:Show() )
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Say Transparente sobre Brush o Gradient no funciona

Postby Cgallegoa » Thu Jul 15, 2010 8:23 pm

Code: Select all  Expand view
ACTION ( oSay:SetText("Hora:  "+Time()), oSay:Hide(), oSay:Show() )
 

Antonio funcionó bien, aunque con más says en el mismo diálogo de todas formas parpadea. :?
Me quedan algunas dudas:

Porqué pasa eso con oSay:Refresh() ?
Es mejor entonces usar :Hide() y :Show() ?
En cuáles casos usar :Refresh() y en cuáles :Hide() :Show()
Cómo evitar el parpadeo ?

El diálogo tiene al lado izquierdo un browse de una base de datos y a lado derecho una serie de says que muestran algunos de los datos de la base: nombre, dirección, teléfonos, ciudad, etc. Conforme se navega en el browse los says se refrezcan con el contenido de los campos. Ahí es donde parpadea aunque ya pinta bien la transparencia de los says.

Te contacto a tu privado para hacerte una consulta para la compra de FWH 10.07

Millón de gracias y saludos,

Carlos Gallego
Saludos,

Carlos Gallego

*** FWH-24.07, xHarbour 1.3.1 Build 20240624, Borland C++7.70, PellesC ***
Cgallegoa
 
Posts: 492
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Re: Say Transparente sobre Brush o Gradient no funciona

Postby Cgallegoa » Sat Jul 17, 2010 5:12 am

Antonio,

Con la solución propuesta por tí funciona bien la transparencia en los say sobre brush o gradient, pero parpadean más que ojos con arena. Alguna forma de evitarlo ?

Gracias y saludos,

Carlos Gallego
Saludos,

Carlos Gallego

*** FWH-24.07, xHarbour 1.3.1 Build 20240624, Borland C++7.70, PellesC ***
Cgallegoa
 
Posts: 492
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Re: Say Transparente sobre Brush o Gradient no funciona

Postby Daniel Garcia-Gil » Sat Jul 17, 2010 5:47 am

Carlos...

Te comento.... las transparencias de un control no vienen de la imagen de fondo del padre, sino del brush del mismo, para controles nativos de window, como el caso del SAY estos son controlados por el brush... el boton (RBTN) es un control nativo de fivewin y lo que se hizo fue "simular" dicha transparencias con tecnicas diferentes a las que aplica window a sus controles, es decir, el control SAY si es transparente, el problema esta es que el brush del padre (Dialogo) es blanco, hay que crear un brush con el gradiente y veras la diferencia, te dejo el ejemplo..

Code: Select all  Expand view

#include "FiveWin.ch"
#include "Ribbon.ch"

STATIC oTimer

Function Inicio()
LOCAL odlg, oBrush, oBtn, oSay

 
  DEFINE DIALOG oDlg FROM 0,0 TO 140,500 TRANSPARENT PIXEL;
         TITLE "Transparent Say does not work either on brush or on gradient - FWH 10.3" ;
         BRUSH oBrush
      @ 20,150 SAY oSay PROMPT "Hora:  "+Time() OF oDlg PIXEL COLOR nRGB(255,50,50) SIZE 80,10
      @ 45,110 RBBTN oBtn PROMPT "Salir" OF oDlg SIZE 30,15 ROUND ACTION oDlg:end()
     
  ACTIVATE DIALOG oDlg CENTERED ;
     ON INIT ( Set_Timer(oDlg,oSay), Gradient_oBrush( oDlg, { { 0.50, 16054371, 8388608 } } ) )
     

Return(NIL)

function Set_Timer(oDlg,oSay)
  DEFINE TIMER oTimer INTERVAL 1000 OF oDlg ;
     ACTION (oSay:SetText("Hora:  "+Time()),oSay:Refresh())
  ACTIVATE TIMER oTimer
return NIL


function Gradient_oBrush( oDlg, aColors )

   local hDC, hBmp, hBmpOld, oBrush
   
   if Empty( oDlg:oBrush:hBitmap )
      hDC = CreateCompatibleDC( oDlg:GetDC() )
      hBmp = CreateCompatibleBitMap( oDlg:hDC, oDlg:nWidth, oDlg:nHeight )
      hBmpOld = SelectObject( hDC, hBmp )
      GradientFill( hDC, 0, 0, oDlg:nHeight, oDlg:nWidth, aColors )
      DeleteObject( oDlg:oBrush:hBrush )
      oDlg:oBrush:hBitmap = hBmp
      oDlg:oBrush:hBrush = CreatePatternBrush( hBmp )
      SelectObject( hDC, hBmpOld )
      oDlg:ReleaseDC()
   endif  

return nil
 
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 32 guests