Celda transparente

Celda transparente

Postby FranciscoA » Sat Dec 14, 2019 2:24 pm

Hola amigos.

En xBrowse tenemos la data oBrw:lTransparent := .t., que pinta todo el browse transparente, sobre el dialogo o ventana contenedora.

Pregunta:
Es posible, basado en una condicion, pintar transparentes determinadas celdas?

Me explico:
Tenemos un dialog que contiene una imagen como background.
Sobre esta imagen tenemos un xBrowse, con varias lineas y columnas.
Algunas celdas contienen valores, otras no.

Precisamente, las celdas que no contienen valores son las que se desea presentar transparentes. Es decir, hacer transparente el fondo de estas celdas y que se vea como fondo la imagen-background de la ventana o dialogo contenedor.
Es posible?

Gracias.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Celda transparente

Postby FranciscoA » Sat Dec 14, 2019 3:27 pm

Lo siguiente no hace nada:
Code: Select all  Expand view
//-----------------------------------------------------//
Function CeldaTransparente(oBrw2)    
local n1, n, uVal

  For n1 := 1 to oBrw2:nLen
     For n := 1 to len(oBrw2:aCols)
        uVal := oBrw2:aCols[n]:Value
        if Empty(uVal) .or. uVal = nil
           oBrw2:aCols[n]:lColTransparent := .t.
        endif
     Next
  Next

  oBrw2:Refresh()

Return nil
 
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Celda transparente

Postby FranciscoA » Sat Dec 14, 2019 4:26 pm

Otro intento sin resultados deseados:
Code: Select all  Expand view
//-----------------------------------------------------//
Function CeldaTransparente(oBrw2)
local n1, n

  For n1 := 1 to oBrw2:nLen
     For n := 1 to len(oBrw2:aCols)
        oBrw2:aCols[n]:lColTransparent := TranspDeCelda( oBrw2, n )
     Next
     oBrw2:GoDown()
  Next

Return nil

//-----------------------------------------------------//
function TranspDeCelda( oBrw, n )
local uDato := oBrw:aRow[n], lTransparent := .f.

   if Empty(uDato) .or. uDato = nil
      lTransparent := .t.
   endif

return lTransparent
 
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Celda transparente

Postby FranciscoA » Sun Dec 15, 2019 12:38 am

Parece que encontré la solución:

Code: Select all  Expand view
//Celdas sin valor serán transparentes. Para ello, oBrw2:lTransparent := .t., y ClrBck de celda debe ser NIL
//-----------------------------------------------------//
Function CeldaTransparente(oBrw2)
local n

  For n := 1 to oBrw2:nLen
     AEval( oBrw2:aCols, { |o|o:lColTransparent := if(Empty(o:Value),.t.,.f.) } )
     oBrw2:GoDown()
  Next

Return nil
 

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Celda transparente

Postby nageswaragunupudi » Sun Dec 15, 2019 5:46 am

FranciscoA wrote:Parece que encontré la solución:

Code: Select all  Expand view
//Celdas sin valor serán transparentes. Para ello, oBrw2:lTransparent := .t., y ClrBck de celda debe ser NIL
//-----------------------------------------------------//
Function CeldaTransparente(oBrw2)
local n

  For n := 1 to oBrw2:nLen
     AEval( oBrw2:aCols, { |o|o:lColTransparent := if(Empty(o:Value),.t.,.f.) } )
     oBrw2:GoDown()
  Next

Return nil
 

Saludos.


oCol:lTransparent applies to the entire column, not to individual cells
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Celda transparente

Postby FranciscoA » Sun Dec 15, 2019 6:22 pm

oCol:lTransparent applies to the entire column, not to individual cells

Nages.
I know it.

After so much testing I reached that solution, and it's working for the litle proyect I am making.

Despues de muchas pruebas salió esa solución y está funcionando para el pequeño proyecto, hasta el momento.

https://www.4shared.com/photo/7kj6nn-mea/ruleta.html
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Celda transparente

Postby FranciscoA » Sun Dec 15, 2019 7:30 pm

He notado que si en la ultima fila hay celda sin valor, pone transparente toda esa columna.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Celda transparente

Postby FranciscoA » Sun Dec 15, 2019 7:32 pm

Aqui dejo el codigo, por si alguien quiere mejorarlo.

Code: Select all  Expand view
#include "fivewin.ch"

static aM, aR, cClr := ""
static oBrw1, oBrw2
//----------------------------------------------------------------------------//
function Main()
   local oDlg, oFont1
   local oBrush, cBrush := "C:\FWH1204\BITMAPS\BACKGRND\BEACH.BMP"
   local nWd := 240
   local nHt := 600  

   CreaMatrices()

   DEFINE FONT oFont1 NAME "CONSOLAS" SIZE 0,-16 BOLD ITALIC
   DEFINE DIALOG oDlg SIZE nWd,nHt PIXEL TRUEPIXEL

   DEFINE BRUSH oBrush FILE cBrush RESIZE
   oDlg:SetBrush( oBrush )
   oBrush:End()

   PintaBrowse(oDlg)  

   ACTIVATE DIALOG oDlg CENTERED ;
         ON INIT CeldaTransparente(oBrw2)

   RELEASE oFont1
   RELEASE BRUSH oBrush
   
return nil

//----------------------------------------------------------------------------//
Function CreaMatrices()  
local n, aNms, aClr    

   aNms := {'00', '27', '10', '25', '29', '12', '8', '19', '31', '18', '6', '21', '33', '16', '4', '23', '35', '14', '2',  '0', '28', '9', '26', '30', '11', '7', '20', '32', '17', '5', '22', '34', '15', '3', '24', '36', '13', '1'}
   aClr := { 'V',  'R',  'N',  'R',  'N',  'R', 'N',  'R',  'N',  'R', 'N', 'R',  'N',   'R', 'N',  'R',  'N',  'R', 'N',  'V', 'N',  'R',  'N',  'R',  'N', 'R',  'N',  'R', 'N',  'R', 'N',  'R',  'N', 'R',  'N',  'R',  'N',  'R'}

  aR := {}
  For n := 1 to Len(aNms)
      aadd( aR, {,,,} )  
      aR[n,1] := n                                        //Posicion
      aR[n,2] := if(len(aNms[n])=1, aNms[n]+" ", aNms[n]) //Numero (debe ser long 2 char)
      aR[n,3] := if(upper(aClr[n]) ="V","VERDE" ,;        //Color
                 if(upper(aClr[n]) ="R","ROJO"  ,;
                 if(upper(aClr[n]) ="N","NEGRO",)))
  Next

  aM := Array(13)
  aM[1] := {'0 ', '00', '  '}
  aM[2] := {'  ', '2 ', '3 '}
  aM[3] := {'  ', '5 ', '6 '}
  aM[4] := {'7 ', '  ', '  '}
  aM[5] := {'10', '11', '12'}
  aM[6] := {'  ', '  ', '  '}
  aM[7] := {'16', '17', '18'}
  aM[8] := {'  ', '20', '21'}
  aM[9] := {'  ', '23', '24'}
  aM[10]:= {'25', '26', '27'}
  aM[11]:= {'28', '29', '30'}
  aM[12]:= {'31', '  ', '33'}
  aM[13]:= {'34', '35', '36'}

Return nil

//----------------------------------------------------------------------------//
Function PintaBrowse(oDlg)
local n, cCol, oFont

   DEFINE FONT oFont NAME "ARIAL" SIZE 0,-24 BOLD ITALIC

   @ 1,1 XBROWSE oBrw2 SIZE -1,-1 PIXEL OF oDlg  DATASOURCE aM ;
   COLUMNS 1,2,3  HEADERS "Col1","Col2","Col3" ;
   CELL LINES NOBORDER

   FOR EACH cCol IN {"COL1", "COL2", "COL3"}
       WITH OBJECT oBrw2:oCol( cCol )
          :nWidth        := (oBrw2:nWidth/3)-1
       END
   NEXT

   WITH OBJECT oBrw2
      :nMarqueeStyle  := 0
      :nRowHeight     := 42
      :lHeader  := .f.
      :lFooter  := .f.
      :lHScroll := .f.
      :lVScroll := .f.
      :lRecordSelector := .f.
      :nDataStrAligns := AL_CENTER
      :SetFont(oFont)
      :lTransparent  :=  .t.
      :CreateFromCode()
   END

   ColorFondoCelda(oBrw2)

   RELEASE oFont

Return nil


//-----------------------------------------------------//
Function ColorFondoCelda(oBrw2)    
local n

   For n := 1 to len(oBrw2:aCols)
      oBrw2:aCols[n]:bClrStd := ColorDeCelda( oBrw2, n )
   Next

Return nil

//-----------------------------------------------------//
function ColorDeCelda( oBrw, n )
return {|| ElijeColor( oBrw:aRow[ n ] )  }

//-----------------------------------------------------//
function ElijeColor( uDato )
   local n, nClrBck, nClrTxt := RGB(255,255,255)

   cClr:=""
   for n := 1 to len(aR)
      if aR[n,2] == uDato
         cClr := aR[n,3]
         exit
      endif
   Next
 
   if cClr == "VERDE"
      nClrBck := RGB(0, 200, 0)
   elseif cClr == "ROJO"
      nClrBck := RGB(225, 0, 0)
   elseif cClr == "NEGRO"
      nClrBck := RGB(0, 0, 0)
   else
      nClrBck := NIL
   endif

return { nClrTxt, nClrBck }

//Celdas sin valor serán transparentes. Para ello, oBrw2:lTransparent := .t., y ClrBck de celda debe ser NIL
//-----------------------------------------------------//
Function CeldaTransparente(oBrw2)
local n

  For n := 1 to oBrw2:nLen
     AEval( oBrw2:aCols, { |o|o:lColTransparent := if(Empty(o:Value),.t.,.f.) } )
     oBrw2:GoDown()
  Next

Return nil

 
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Celda transparente

Postby FranciscoA » Sun Dec 15, 2019 10:16 pm

Resultado:
Image
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Celda transparente

Postby FranciscoA » Sun Dec 15, 2019 10:40 pm

Proyecto finalizado:
Image
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Celda transparente

Postby remtec » Mon Dec 16, 2019 6:29 pm

Hola Francisco.

Grande Maestro, te pasaste?

Te Felicito, se ve súper.

Muchos Saludos

Antonio.
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 717
Joined: Fri May 12, 2017 2:50 pm

Re: Celda transparente

Postby FranciscoA » Mon Dec 16, 2019 6:41 pm

Hola Antonio.
Gracias por tu comentario. Estamos a la orden.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Celda transparente

Postby cnavarro » Mon Dec 16, 2019 7:06 pm

Francisco, muy bien, ya sabes que este tipo de "tips" de efectos estéticos me gustan mucho.
Tu implementación es muy muy buena ( "nivelazo" ).
Como siempre he dicho "Imaginación al poder"
Enhorabuena
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Celda transparente

Postby FranciscoA » Mon Dec 16, 2019 7:26 pm

Hola Cristóbal.
Mi estimado Maestro, gracias por sus comentarios.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Celda transparente

Postby FranciscoA » Fri Dec 27, 2019 5:17 pm

FranciscoA wrote:He notado que si en la ultima fila hay celda sin valor, pone transparente toda esa columna.

Aqui está la solucion:
Code: Select all  Expand view

#include "fivewin.ch"

//----------------------------------------------------------------------------//
function Main()
   local oDlg, oFont1, oBrw2, n, cCol, oFont
   local oBrush, cBrush := "C:\FWH1204\BITMAPS\BACKGRND\BEACH.BMP"
   local nWd := 240, nHt := 600  
   local aArr := CreaMatrices(), aR := aArr[1], aM := aArr[2]

   DEFINE FONT oFont  NAME "ARIAL" SIZE 0,-24 BOLD ITALIC
   DEFINE FONT oFont1 NAME "CONSOLAS" SIZE 0,-16 BOLD ITALIC
   DEFINE DIALOG oDlg SIZE nWd,nHt PIXEL TRUEPIXEL

   DEFINE BRUSH oBrush FILE cBrush RESIZE
   oDlg:SetBrush( oBrush )
   oBrush:End()

   @ 1,1 XBROWSE oBrw2 SIZE -1,-1 PIXEL OF oDlg  DATASOURCE aM ;
   COLUMNS 1,2,3  HEADERS "Col1","Col2","Col3" ;
   CELL LINES NOBORDER

   FOR EACH cCol IN {"COL1", "COL2", "COL3"}
       WITH OBJECT oBrw2:oCol( cCol )
          :nWidth        := (oBrw2:nWidth/3)-1
       END
   NEXT

   WITH OBJECT oBrw2
      :nMarqueeStyle  := 0
      :nRowHeight     := 42
      :lHeader  := .f.
      :lFooter  := .f.
      :lHScroll := .f.
      :lVScroll := .f.
      :lRecordSelector := .f.
      :nDataStrAligns := AL_CENTER
      :SetFont(oFont)
      :lTransparent  :=  .t.
      :CreateFromCode()
   END

   ColorFondoCelda(oBrw2, aR)

   ACTIVATE DIALOG oDlg CENTERED ;
         ON INIT ( CeldaTransparente(oBrw2) )

   RELEASE oFont1, oFont
   RELEASE BRUSH oBrush
   
return nil

//----------------------------------------------------------------------------//
Function CreaMatrices()  
local n, aNms, aClr, aR, aM    

   aNms := {'00', '27', '10', '25', '29', '12', '8', '19', '31', '18', '6', '21', '33', '16', '4', '23', '35', '14', '2',  '0', '28', '9', '26', '30', '11', '7', '20', '32', '17', '5', '22', '34', '15', '3', '24', '36', '13', '1'}
   aClr := { 'V',  'R',  'N',  'R',  'N',  'R', 'N',  'R',  'N',  'R', 'N', 'R',  'N',   'R', 'N',  'R',  'N',  'R', 'N',  'V', 'N',  'R',  'N',  'R',  'N', 'R',  'N',  'R', 'N',  'R', 'N',  'R',  'N', 'R',  'N',  'R',  'N',  'R'}

  aR := {}
  For n := 1 to Len(aNms)
      aadd( aR, {,,,} )  
      aR[n,1] := n                                        //Posicion
      aR[n,2] := if(len(aNms[n])=1, aNms[n]+" ", aNms[n]) //Numero (debe ser long 2 char)
      aR[n,3] := if(upper(aClr[n]) ="V","VERDE" ,;        //Color
                 if(upper(aClr[n]) ="R","ROJO"  ,;
                 if(upper(aClr[n]) ="N","NEGRO",)))
  Next

  aM := Array(14)
  aM[1] := {'Rojo', 'Negro', 'Verde'}
  aM[2] := {'0 ', '00', '  '}
  aM[3] := {'  ', '2 ', '3 '}
  aM[4] := {'  ', '5 ', '6 '}
  aM[5] := {'7 ', '  ', '  '}
  aM[6] := {'10', '11', '12'}
  aM[7] := {'  ', '  ', '  '}
  aM[8] := {'16', '17', '18'}
  aM[9] := {'  ', '20', '21'}
  aM[10]:= {'  ', '23', '24'}
  aM[11]:= {'25', '26', '27'}
  aM[12]:= {'28', '29', '30'}
  aM[13]:= {'31', '  ', '33'}
  aM[14]:= {'  ', '  ', '36'}

Return { aR, aM }

//-----------------------------------------------------//
Function ColorFondoCelda(oBrw2, aR)    
local n

   For n := 1 to len(oBrw2:aCols)
      oBrw2:aCols[n]:bClrStd := ColorDeCelda( oBrw2, n, aR )
   Next

Return nil

//-----------------------------------------------------//
function ColorDeCelda( oBrw, n, aR )
return {|| ElijeColor( oBrw:aRow[ n ], aR )  }

//-----------------------------------------------------//
function ElijeColor( uDato, aR )
   local n, nClrBck, nClrTxt := RGB(255,255,255), cClr

   cClr:=""
   for n := 1 to len(aR)
      if aR[n,2] == uDato
         cClr := aR[n,3]
         exit
      endif
   Next
 
   if cClr == "VERDE" .or. uDato == "Verde"  //Si dato es Verde,Rojo,Negro, es apuesta por color.
      nClrBck := RGB(0, 200, 0)
   elseif cClr == "ROJO" .or. uDato == "Rojo"
      nClrBck := RGB(225, 0, 0)
   elseif cClr == "NEGRO" .or. uDato == "Negro"
      nClrBck := RGB(0, 0, 0)
   else
      nClrBck := NIL  //GetSysColor( 5 )
   endif

return { nClrTxt, nClrBck }

//Celdas sin valor serán transparentes. Para ello, oBrw2:lTransparent := .t., y ClrBck de celda debe ser NIL
//-----------------------------------------------------//
Function CeldaTransparente(oBrw2)
local n

   For n := 1 to len(oBrw2:aCols)
      oBrw2:aCols[n]:lColTransparent := if(Empty(oBrw2:aCols[n]:Value),.t.,.f.)
   Next

Return nil
 

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 63 guests