Browse alternando estilo de fonte nas linhas

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

claudiochaves
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 28 Jul 2017 15:48
Localização: campinas/sp

Browse alternando estilo de fonte nas linhas

Mensagem 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	
Claudio Chaves
Desenvolvedor
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Browse alternando estilo de fonte nas linhas

Mensagem 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
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
claudiochaves
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 28 Jul 2017 15:48
Localização: campinas/sp

Browse alternando estilo de fonte nas linhas

Mensagem 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
Claudio Chaves
Desenvolvedor
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Browse alternando estilo de fonte nas linhas

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
claudiochaves
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 28 Jul 2017 15:48
Localização: campinas/sp

Browse alternando estilo de fonte nas linhas

Mensagem 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,
Claudio Chaves
Desenvolvedor
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Browse alternando estilo de fonte nas linhas

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Browse alternando estilo de fonte nas linhas

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
claudiochaves
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 28 Jul 2017 15:48
Localização: campinas/sp

Browse alternando estilo de fonte nas linhas

Mensagem 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.
Claudio Chaves
Desenvolvedor
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Browse alternando estilo de fonte nas linhas

Mensagem 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.
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Browse alternando estilo de fonte nas linhas

Mensagem por Fernando queiroz »

tela.jpg
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Browse alternando estilo de fonte nas linhas

Mensagem por Fernando queiroz »

ou definindo uma linha toda para uma determinada condição
tela.jpg
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Responder