Página 1 de 1

Browse alternando estilo de fonte nas linhas

Enviado: 29 Jun 2020 18:08
por claudiochaves
Oi Pessoal, boa tarde, alguém teria algum exemplo de como fazer um browse aonde as linhas usando uma mesma fonte possa ter estilos variados. Por exemplo, uma linha em com todos os campos tachados, outra em italico e outra normal?

Tentei fazer com o seguinte codigo, mas da errado.

Agradeço, abraços,

Claudio

Código: Selecionar todos

function teste_evento()
	Private vArrLogEvento
	Private oBrwEventos
	vArrLogEvento := { 	{ date() , time() , "usuario" , "Rotina Disponivel  " , "000" } ,;
						{ date() , time() , "usuario" , "Rotina Disponivel  " , "001" } ,;
						{ date() , time() , "usuario" , "Rotina Disponivel  " , "002" } ,;
						{ date() , time() , "usuario" , "Rotina Disponivel  " , "003" } ,;
						{ date() , time() , "usuario" , "Rotina Disponivel  " , "004" } ,;
						{ date() , time() , "usuario" , "Rotina Disponivel  " , "005" }	}
	INIT DIALOG oDlgWeb TITLE "...::: TESTE :::..." SIZE 800,400 NOEXIT STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+WS_MINIMIZEBOX+WS_MAXIMIZEBOX+DS_CENTER
		@ 15,80 BROWSE oBrwEventos ARRAY SIZE 700,300 STYLE WS_TABSTOP ON INIT  {|| xxx_LogEvento_Rfs() }
			*'oBrwEventos:lDispSep := .F. desliga linha separadora do browse
	ACTIVATE DIALOG oDlgWeb
Return .t.	

Function xxx_LogEvento_Rfs()
	CreateArList( oBrwEventos, vArrLogEvento )
	RCG_SqlGridTbl_FmtColuna( oBrwEventos ,  1 , "Data"      ,  50 , Nil , .T. )
	RCG_SqlGridTbl_FmtColuna( oBrwEventos ,  2 , "Hora"      ,  50 , Nil , .T. )
	RCG_SqlGridTbl_FmtColuna( oBrwEventos ,  3 , "Usuário"   ,  80 , Nil , .T. )
	RCG_SqlGridTbl_FmtColuna( oBrwEventos ,  4 , "Evento"    , 150 , Nil , .T. )
	RCG_SqlGridTbl_FmtColuna( oBrwEventos ,  5 , "Nível"     ,  30 , Nil , .f. )
	For vTmpRel=1 to LEN(oBrwEventos:aColumns)
		oBrwEventos:aColumns[vTmpRel]:oFont       := xxx_FonteCor(oBrwEventos)
	Next
	oBrwEventos:Top()
	oBrwEventos:refresh()
Return .t.

Function xxx_FonteCor(pObjBloco_Grid)
	Local vRet_GridCor
	if     pObjBloco_Grid:aArray[pObjBloco_Grid:nCurrent, 5] = "003" ; vRet_GridCor := HFont():Add( "Arial"       , 0 , -11 , 400,1,1,1)
	Elseif pObjBloco_Grid:aArray[pObjBloco_Grid:nCurrent, 5] = "005" ; vRet_GridCor := HFont():Add( "Arial"       , 0 , -11 , 400,1,1,1)
	Else                                                             ; vRet_GridCor := HFont():Add( "Arial"       , 0 , -11 , 400,,,)
	Endif
Return vRet_GridCor	

Browse alternando estilo de fonte nas linhas

Enviado: 29 Jun 2020 21:19
por Fernando queiroz
TENTE ALGO ASSIM

bColorBlock := {|| IIF(oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 14] = 1, {255, 16777215 ,16777215,255 },{0,16777215,, }) }
FOR EACH oColuna IN oBrowse1:aColumns
oColuna:bColorBlock := bColorBlock
NEXT

Neste exemplo dependendo da coluna 14 eu coloco em vermelho ou em preto todos os campos do browse

neste exemplo eu mudo de cor somente um campo dependendo da condicao

oBrowse1:aColumns[5]:bColorBlock :={|| IIF(oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 6] < M->DAT_HOJE .AND. oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 15] = 0,{255, 16777215 ,16777215,255 },;
IIF(oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 6] > M->DAT_HOJE-1 .AND. oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 15] = 0,{16744448, 16777215 ,16777215,16744448 } ,{0,16777215,, })) }

uso as cores vermelho azul ou preto

Browse alternando estilo de fonte nas linhas

Enviado: 30 Jun 2020 09:11
por claudiochaves
Fernando queiroz escreveu:TENTE ALGO ASSIM

bColorBlock := {|| IIF(oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 14] = 1, {255, 16777215 ,16777215,255 },{0,16777215,, }) }
FOR EACH oColuna IN oBrowse1:aColumns
oColuna:bColorBlock := bColorBlock
NEXT

Neste exemplo dependendo da coluna 14 eu coloco em vermelho ou em preto todos os campos do browse

neste exemplo eu mudo de cor somente um campo dependendo da condicao

oBrowse1:aColumns[5]:bColorBlock :={|| IIF(oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 6] < M->DAT_HOJE .AND. oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 15] = 0,{255, 16777215 ,16777215,255 },;
IIF(oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 6] > M->DAT_HOJE-1 .AND. oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 15] = 0,{16744448, 16777215 ,16777215,16744448 } ,{0,16777215,, })) }

uso as cores vermelho azul ou preto
Obrigado Fernando, com a cor eu já consegui fazer. Eu gostaria mesmo é de mudar algumas linhas do browse, colocando estilo na fonte para destacar a linha. Minha ideia é um item cancelado aparecer com o estilo tachado e um item normal sem o tachar.

Agradeço de qualquer forma, vou continuar pesquisando, abraços

Browse alternando estilo de fonte nas linhas

Enviado: 30 Jun 2020 10:49
por Itamar M. Lins Jr.
Ola!
Tá usando qual versão da Hwgui ?
Na do 2.22 tem estilos, para os 3. Cabeçalho, corpo e rodapé.
Não me aprofundei nisso, mas vi uns exemplos que fica igual aos menus do Office o cabeçalho.

Saudações,
Itamar M. Lins Jr.

Browse alternando estilo de fonte nas linhas

Enviado: 30 Jun 2020 11:56
por claudiochaves
Itamar M. Lins Jr. escreveu:Ola!
Tá usando qual versão da Hwgui ?
Na do 2.22 tem estilos, para os 3. Cabeçalho, corpo e rodapé.
Não me aprofundei nisso, mas vi uns exemplos que fica igual aos menus do Office o cabeçalho.

Saudações,
Itamar M. Lins Jr.
Oi Itamar, desejo que esteja bem.
Ainda utilizo a Hwgui 2.17, estou vendo para atualizar as versões, obrigado pela dica, vou ver o que mudou na 2.22 para ter estilos e ver se consigo adaptar por enquanto até eu concluir a atualização de versão.
abraços,

Browse alternando estilo de fonte nas linhas

Enviado: 30 Jun 2020 12:37
por Itamar M. Lins Jr.
Ola!

Código: Selecionar todos

#include "hwgui.ch"
Function Test()
Local oDlg, oBrw, oBtnOk, oStyle := HStyle():New( { 0xffffff, 0xbbbbbb }, 1 ), oPen
Local aSample := { {"Alex",17,12600}, {"Victor",42,1600}, {"Pyotr",56,45500}, ;
      {"Sergei",28,14800}, {"Ivan",26,21300} }
Local bCol1 := {|o,h,x1,y1,x2,y2|
   oStyle:Draw( h,x1,y1,x2,y2 )
   RETURN Nil
}
Local bBack := {|o,h,x1,y1,x2,y2,n|
   Local y := y1 + Int( (y2-y1)/2 )
   // Draw a column header background
   hwg_Fillrect( h, x1, y1, x2, y, oBrw:brush:handle )
   oStyle:Draw( h, x1, y, x2, y2 )
   IF n == 4
      // While drawing the 4-th column header output a "Super header" for 3-th and 4-th columns
      hwg_Settransparentmode( h, .T. )
      hwg_Drawtext( h, "Some data", x1-oBrw:aColumns[3]:width, y1 + 2, x2, y-2, DT_CENTER )
      hwg_Settransparentmode( h, .F. )
   ENDIF
   RETURN Nil
}
Local bDrawOrd := {|o,h,x1,y1,x2,y2|
   IF o:cargo == 1
      // if sorted ascending
      hwg_Selectobject( h, oPen:handle )
      hwg_DrawLine( h, x2-16, y2-14, x2-12, y2-8 )
      hwg_DrawLine( h, x2-12, y2-8, x2-8, y2-14 )
   ELSEIF o:cargo == 2
      // if sorted descending
      hwg_Selectobject( h, oPen:handle )
      hwg_DrawLine( h, x2-16, y2-8, x2-12, y2-14 )
      hwg_DrawLine( h, x2-12, y2-14, x2-8, y2-8 )
   ENDIF
   RETURN Nil
}

   oPen := HPen():Add( BS_SOLID, 2, 0 )

   INIT DIALOG oDlg TITLE "Browse" ;
         AT 0, 0 SIZE 380, 300 BACKCOLOR 0xeeeeee;
         FONT HFont():Add( "MS Sans Serif",0,-15 )

   @ 20,16 SAY "Press on a column head to change order" SIZE 340,24 ;
         TRANSPARENT STYLE DT_CENTER COLOR 8404992
   @ 20,40 BROWSE oBrw ARRAY SIZE 340,200 STYLE WS_BORDER + WS_VSCROLL ;
         ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS 
   oBrw:oStyleHead := oStyle
   oBrw:bcolorSel := 0xeeeeee
   oBrw:tcolorSel := 0
   oBrw:aArray := aSample

   // Increase Left, top and bottom padding
   oBrw:aPadding[1] := oBrw:aPadding[2] := oBrw:aPadding[4] := 8
   oBrw:aHeadPadding[2] := oBrw:aHeadPadding[4] := 4

   //First column we draw ourselves, using the nCol1 codeblock, so we may to not set the
   // column codeblock.
   oBrw:AddColumn( HColumn():New( "",,"C",2,0 ) )
   oBrw:aColumns[1]:setPaintCB( PAINT_LINE_ALL, bCol1 )

   oBrw:AddColumn( HColumn():New( "Name",{|v,o|o:aArray[o:nCurrent,1]},"C",16,0 ) )
   oBrw:AddColumn( HColumn():New( ";Age",{|v,o|o:aArray[o:nCurrent,2]},"N",6,0 ) )
   oBrw:AddColumn( HColumn():New( ";Salary",{|v,o|o:aArray[o:nCurrent,3]},"N",8,0 ) )

   oBrw:aColumns[3]:cGrid := "W;WN"
   oBrw:aColumns[4]:cGrid := "E;WEN"

   // Add a codeblock to draw column hraders bacground
   oBrw:aColumns[3]:setPaintCB( PAINT_HEAD_BACK, bBack )
   oBrw:aColumns[4]:setPaintCB( PAINT_HEAD_BACK, bBack )

   // Add a codeblock to draw the current order
   oBrw:aColumns[2]:setPaintCB( PAINT_HEAD_ITEM, bDrawOrd )
   oBrw:aColumns[3]:setPaintCB( PAINT_HEAD_ITEM, bDrawOrd )
   oBrw:aColumns[4]:setPaintCB( PAINT_HEAD_ITEM, bDrawOrd )

   // Set a codeblock to change order
   oBrw:aColumns[2]:bHeadClick := oBrw:aColumns[3]:bHeadClick := ;
      oBrw:aColumns[4]:bHeadClick := {|o,n|onHeadClick(o,n)}
   // The :cargo variable exists in all HwGUI objects and isn't used by HwGUI itself.
   // You may use it as you need in your programs.
   // We use the column's :cargo here to keep info about the current order:
   // 0 - not sorted by this column, 1 - sorted ascending, 2 - sorted descending
   oBrw:aColumns[2]:cargo := oBrw:aColumns[3]:cargo := oBrw:aColumns[4]:cargo := 0

   @ 128,260 OWNERBUTTON oBtnOk SIZE 100,32 ;
         TEXT "Ok" ;
         ON SIZE ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS ;
         ON CLICK {||hwg_EndDialog()}
   oBtnOk:aStyle := { HStyle():New( {0xffffff,0xdddddd}, 1,, 1 ), ;
            HStyle():New( {0xffffff,0xdddddd}, 2,, 1 ), ;
            HStyle():New( {0xffffff,0xdddddd}, 1,, 2, 8421440 ) }

   ACTIVATE DIALOG oDlg

   oPen:Release()

Return Nil

Function onHeadClick( oBrw, nCol )
Local no := Ascan( oBrw:aColumns, {|o|o:cargo>0}, 2 )

   // no is an index of a column, used in sorting
   IF no == 0
      oBrw:aColumns[nCol]:cargo := 1
   ELSEIF no == nCol
      IF oBrw:aColumns[no]:cargo == 1
         oBrw:aColumns[no]:cargo := 2
      ELSE
         oBrw:aColumns[no]:cargo := 1
      ENDIF
   ELSE
      oBrw:aColumns[no]:cargo := 0
      oBrw:aColumns[nCol]:cargo := 1
   ENDIF

   no := nCol
   nCol --
   IF oBrw:aColumns[no]:cargo == 1
      oBrw:aArray := ASort( oBrw:aArray,,, {|z,y| z[nCol] < y[nCol] } )
   ELSE
      oBrw:aArray := ASort( oBrw:aArray,,, {|z,y| z[nCol] > y[nCol] } )
   ENDIF
   oBrw:Refresh()
Return Nil
Sem título.png

Saudações,
Itamar M. Lins Jr.

Browse alternando estilo de fonte nas linhas

Enviado: 30 Jun 2020 13:07
por Itamar M. Lins Jr.
Ola!
Não achei... Tem até mais complicado com bitmap, mas trocar a fonte de uma coluna não achei.

Saudações,
Itamar M. Lins Jr.

Browse alternando estilo de fonte nas linhas

Enviado: 30 Jun 2020 14:35
por claudiochaves
Itamar M. Lins Jr. escreveu:Ola!
Não achei... Tem até mais complicado com bitmap, mas trocar a fonte de uma coluna não achei.

Saudações,
Itamar M. Lins Jr.
Eu até consegui mudar a fonte da linha com o codigo :

Código: Selecionar todos

oBrwEventos:aColumns[1]:oFont := HFont():Add( "Arial"       , 0 , -11 , 400,1,1,1) 
o problema é que muda todas as linhas e não mantem.

Browse alternando estilo de fonte nas linhas

Enviado: 30 Jun 2020 14:43
por Fernando queiroz
claudiochaves escreveu:
Itamar M. Lins Jr. escreveu:Ola!
Não achei... Tem até mais complicado com bitmap, mas trocar a fonte de uma coluna não achei.

Saudações,
Itamar M. Lins Jr.
Eu até consegui mudar a fonte da linha com o codigo :

Código: Selecionar todos

oBrwEventos:aColumns[1]:oFont := HFont():Add( "Arial"       , 0 , -11 , 400,1,1,1) 
o problema é que muda todas as linhas e não mantem.
estive olhando no HBROWSE.PRG da HWGUI e o :oFont muda de todo o browse ou herda da tela, realmente não tem como mudar , por isso eu optei por cores.

Browse alternando estilo de fonte nas linhas

Enviado: 30 Jun 2020 14:45
por Fernando queiroz
tela.jpg

Browse alternando estilo de fonte nas linhas

Enviado: 30 Jun 2020 14:47
por Fernando queiroz
ou definindo uma linha toda para uma determinada condição
tela.jpg