Árvore de páginas

Você está vendo a versão antiga da página. Ver a versão atual.

Comparar com o atual Ver Histórico da Página

« Anterior Versão 6 Próxima »

Classe: TGrid

Exibe os dados organizados em uma tabela.

TSrvObject -> TControl -> TGrid


New

Método construtor da classe.


TGrid(): New ( < oParent>, [ nRow], [ nCol], [ nWidth], [ nHeight] ) --> oTGrid


 

NomeTipoDescriçãoObrigatórioReferência
oParentObjetoIndica a janela ou componente parent onde o objeto será criado.X 
nRowNuméricoIndica a coordenada vertical em pixels.  
nColNuméricoIndica a coordenada horizontal em pixels.  
nWidthNuméricoIndica a largura em pixels do objeto.  
nHeightNuméricoIndica a altura em pixels do objeto.  

 

oTGrid
    (objeto)
  • Retorna o objeto criado.

AddColumn

Adiciona colunas no objeto.


TGrid(): AddColumn ( < nId>, < cCaption>, < nWidth>, < nAlign> ) -->


 

NomeTipoDescriçãoObrigatórioReferência
nIdNuméricoIndica o ID de identificação da coluna que será criada.X 
cCaptionCaracterIndica o título da coluna.X 
nWidthNuméricoIndica a largura inicial da coluna em pixels.X 
nAlignNuméricoIndica o alinhamento do texto na coluna. Para informações das opções disponíveis, consulte a área Observações.X 

 


As opções disponíveis para o parâmetro são:

Conteúdodescrição
CONTROL_ALIGN_LEFTAlinhamento do texto à esquerda.
CONTROL_ALIGN_RIGHTAlinhamento do texto à direita.
0Texto centralizado.

 

clearRows

Apaga todas as linhas visíveis do objeto.


TGrid(): clearRows ( ) -->


Ao acionar esse método, o objeto é reconfigurado para o estado inicial, ou seja, sem dados e com o cursor de seleção de linha na posição 0.

ColOrder

Preenche o array do objeto com as colunas representadas no componente.


TGrid(): ColOrder ( < aArrRay> ) -->


 

NomeTipoDescriçãoObrigatórioReferência
aArrRayArray of RecordIndica o número de posições inteiras que representará a ordem das colunas que constam no componente.X 

 

ColPos

Retorna a coluna selecionada.


TGrid(): ColPos ( ) -->

getCellRect

Preenche um array com as propriedades (Top, Left, Right e Bottom) do formato da célula selecionada.


TGrid(): getCellRect ( < aRet> ) -->


 

NomeTipoDescriçãoObrigatórioReferência
aRetVetorIndica um array com as propriedades (Top, Left, Right e Bottom) do formato da célula selecionada.X 

 

getVisibleRows

Retorna o número de linhas visíveis no Grid.


TGrid(): getVisibleRows ( ) -->


nVisibleRows := ::oGrid:getVisibleRows()

RemoveColumn

Remove a coluna do objeto.


TGrid(): RemoveColumn ( < nId> ) -->


 

NomeTipoDescriçãoObrigatórioReferência
nIdNuméricoIndica o ID de identificação da coluna criada através do método AddColumn().X 

 

scrollLines

Movimenta as linhas de exibição, do objeto, para cima ou para baixo.


TGrid(): scrollLines ( < nLines> ) -->


 

NomeTipoDescriçãoObrigatórioReferência
nLinesNuméricoIndica o número de linhas que serão movimentadas. Para mais detalhes, consulte a área Observações.X 

 


As opções disponíveis para o parâmetro são:

ConteúdoDescrição

> 0

Movimenta a(s) linha(s) para cima.

< 0

Movimenta a(s) linha(s) para baixo.

 

 

  • O número de linhas movimentadas, pelo parâmetro , serão apagadas no topo ou no rodapé do objeto de acordo com a movimentação. No entanto, as linhas apagadas devem ser atualizadas através do método SetRowData().
  • O bloco de código, da propriedade , não será executado se o método ScrollLines() for acionado.

SetHeaderClick

Determina o bloco de código que será executado.


TGrid(): SetHeaderClick ( < bBlock> ) -->


 

NomeTipoDescriçãoObrigatórioReferência
bBlockBloco de códigoIndica o bloco de código que será executado ao clicar duas vezes no header.X 

 

setRowColor

Determina a cor exibida em uma linha visível do browse com as propriedades (nLinha, nColorBak, nColorFore).


TGrid(): setRowColor ( < nLinha>, < nColorBack>, < nColorFore> ) -->


 

NomeTipoDescriçãoObrigatórioReferência
nLinhaNuméricoIndica a linha visível do browse.X 
nColorBackNuméricoIndica a RGB da cor de fundo.X 
nColorForeNuméricoIndica a RGB da cor de frente.X 

 


Se o método for chamado sem os parâmetros, as linhas voltarão ao estado inicial (RESET).


oGrid:setRowColor( 5, CLR_BLACK, CLR_WHITE )oGrid:setRowColor( 7, CLR_BLUE, CLR_WHITE ) oGrid:setRowColor()  // Restaura as cores iniciais.

SetRowData

Confgura os dados que serão apresentados em determinada linha do objeto.


TGrid(): SetRowData ( < nRow>, < bData> ) -->


 

NomeTipoDescriçãoObrigatórioReferência
nRowNuméricoIndica a linha visual que será atualizada.X 
bDataBloco de códigoIndica o bloco de código responsável pela geração dos dados que serão apresentados. Para mais detalhes, consulte a área Observações.X 

 


O bloco de código, configurado no parâmetro , deve ter o seguinte formato:

{|oObj| 

Onde


oObj é instância do objeto e cuja execução deve retornar um Array () de valores caracteres.

nCols é o número de colunas do objeto.

setRowHeight

Configura a altura de cada linha do grid.<br />Por padrão, a altura das linhas é a mesma do cabeçalho do grid.</p>


TGrid(): setRowHeight ( [ nVal] ) -->


 

NomeTipoDescriçãoObrigatórioReferência
nValNuméricoIndica a altura em pixels.  

 

setSelectedRow

Posiciona na linha selecionada do objeto.


TGrid(): setSelectedRow ( [ nRow] ) -->


 

NomeTipoDescriçãoObrigatórioReferência
nRowNuméricoIndica a linha que será selecionada.  

 


  • Este método seleciona a linha visual, do objeto, dentro do limite do número de linhas visuais.
  • O acionamento do método SetSelectdRow() não executa o bloco de código da propriedade.

SetSelectionMode

Indica o tipo (linha ou célula) de navegação no componente.


TGrid(): SetSelectionMode ( < nSelMode> ) -->


 

NomeTipoDescriçãoObrigatórioReferência
nSelModeNuméricoIndica o tipo (0=linha ou 1=célula) de navegação no componente.X 

 


 

PropriedadeDescriçãoTipo
bCursorMoveIndica o bloco de código que será executado ao mudar de linha selecionada. Para mais detalhes, consulte a área Observações e o código fonte exemplo.Bloco de código
bGridInfoIndica o bloco de código que será executado sempre que a quantidade de linhas visíveis no Grid mudar.Bloco de código

 


Em builds superiores à 120420A foi implementado o evento de wheel (roda do mouse), permitindo movimentar os itens do componente à partir deste dispositivo.

Propriedade: bCursorMove

Esta classe permite a exibição de qualquer origem de dados, porém o desenvolvedor deve configurar todo o processo de dados para pintura e navegação, conforme exemplo abaixo:

O formato do bloco de código, da propriedade , é:

{|o,nMvType,nCurPos,nOffSet,nVisRows| (o,nMvType,nCurPos,nOffSet,nVisRows) }

Sendo:

ParâmetroDescrição
oIndica a instância do objeto TGrid().
nMvType

Indica o tipo de movimento, sendo:

Valormnemônicodescrição
0GRID_MOVEUPMove uma linha para cima.
1GRID_MOVEDOWNMove uma linha para baixo.
2GRID_MOVEHOMEMove para o topo da base de dados.
3GRID_MOVEENDMove para o fim da base de dados.
4GRID_MOVEPAGEUPMove uma página de dados para cima.
5GRID_MOVEPAGEDOWNMove uma página de dados para baixo.
nCurPosIndica a posição visual da linha selecionada.
nOffSetIndica a diferença de linhas, entre a posição inicial e final, da movimentação do ponteiro do mouse de linha.
nVisRowsIndica o número de linhas visíveis, na grade, no momento da movimentação.

  

Propriedade: blDblClick

O bloco de código da propriedade , na classe TGrid(), é executado para ativar uma linha ou célula quando clicar duas vezes, com o botão esquerdo do mouse, sobre o objeto ou pressionar a tecla [ENTER]. 

 

Propriedade: bGridInfo

ParâmetroDescrição
oIndica a instância do objeto TGrid().
nVisRowsIndica o número de linhas visíveis na grade.

 



Importante

Classe disponível, para o TOTVS Application Server e TOTVS Smart Client, a partir da build 7.00.080806P.

Exemplo
#include "totvs.ch"
//------------------------------------------------------------------
//Exemplo de configuração de TGrid em array com navegação por linha
//------------------------------------------------------------------
#define GRID_MOVEUP       0
#define GRID_MOVEDOWN     1
#define GRID_MOVEHOME     2
#define GRID_MOVEEND      3
#define GRID_MOVEPAGEUP   4
#define GRID_MOVEPAGEDOWN 5           
// MyGrid ( Classe para encapsular acesso ao componente TGrid )
//------------------------------------------------------------------------------           
CLASS MyGrid	
	DATA oGrid	
	DATA oFrame	
	DATA oButtonsFrame	
	DATA oButtonHome	
	DATA oButtonPgUp	
	DATA oButtonUp	
	DATA oButtonDown	
	DATA oButtonPgDown	
	DATA oButtonEnd	
	DATA aData	
	DATA nLenData	
	DATA nRecNo	
	DATA nCursorPos	 	
	DATA nVisibleRows    	          	
	
	METHOD New(oDlg) CONSTRUCTOR	
	METHOD onMove( o,nMvType,nCurPos,nOffSet,nVisRows )	
	METHOD isBof()	
	METHOD isEof()	
	METHOD ShowData( nFirstRec, nCount ) 	
	METHOD ClearRows() 	
	METHOD DoUpdate()   	
	METHOD SelectRow(n)       		
	METHOD GoHome()                       	
	METHOD GoEnd() 	
	METHOD GoPgUp() 	
	METHOD GoPgDown()      	
	METHOD GoUp(nOffSet)	
	METHOD GoDown(nOffSet)     	
	METHOD SetCSS(cCSS)
ENDCLASS
METHOD New(oDlg, aData) CLASS MyGrid   
	Local oFont
		
	::oFrame:= tPanel():New(0,0,,oDlg,,,,,,200,200 )	
	::nRecNo:= 1	
	::nCursorPos:= 0     	
	::nVisibleRows:= 14 
	// Forçado para 1o ::GoEnd()		
	::aData:= aData	
	::nLenData:= Len(aData)		
	::oGrid:= tGrid():New( ::oFrame )	
	::oGrid:Align:= CONTROL_ALIGN_ALLCLIENT
	
	//oFont := TFont():New('Tahoma',,-32,.T.)
	//::oGrid:SetFont(oFont)   
	//::oGrid:setRowHeight(50)                    		
	
	::oButtonsFrame:= tPanel():New(0,0,, ::oFrame,,,,,, 10,200,.F.,.T. )	
	::oButtonsFrame:Align:= CONTROL_ALIGN_RIGHT    	
	::oButtonHome:= tBtnBmp():NewBar( "VCTOP.BMP",,,,, {||::GoHome()},,::oButtonsFrame )	
	::oButtonHome:Align:= CONTROL_ALIGN_TOP	
	::oButtonPgUp:= tBtnBmp():NewBar( "VCPGUP.BMP",,,,, {||::GoPgUp()},,::oButtonsFrame )	
	::oButtonPgUp:Align:= CONTROL_ALIGN_TOP 
	::oButtonUp:= tBtnBmp():NewBar( "VCUP.BMP",,,,,{||::GoUp(1)},,::oButtonsFrame )
	::oButtonUp:Align:= CONTROL_ALIGN_TOP 
	::oButtonEnd:= tBtnBmp():NewBar( "VCBOTTOM.BMP",,,,, {||::GoEnd()},,::oButtonsFrame )
	::oButtonEnd:Align:= CONTROL_ALIGN_BOTTOM
	::oButtonPgDown:= tBtnBmp():NewBar( "VCPGDOWN.BMP",,,,, {||::GoPgDown()},,::oButtonsFrame )
	::oButtonPgDown:Align:= CONTROL_ALIGN_BOTTOM
	::oButtonDown:= tBtnBmp():NewBar( "VCDOWN.BMP",,,,, {||::GoDown(1)},,::oButtonsFrame )
	::oButtonDown:Align:= CONTROL_ALIGN_BOTTOM 
	::oGrid:addColumn( 1, "Código", 50, CONTROL_ALIGN_LEFT )
	::oGrid:addColumn( 2, "Descrição", 150, 0 )
	::oGrid:addColumn( 3, "Valor", 50, CONTROL_ALIGN_RIGHT ) 
	::oGrid:bCursorMove:= {|o,nMvType,nCurPos,nOffSet,nVisRows| ::onMove(o,nMvType,nCurPos,nOffSet,nVisRows) }   
	::ShowData(1)    
	::SelectRow( ::nCursorPos )   
	// configura acionamento do duplo clique    
	::oGrid:bLDblClick:= {|| MsgStop("oi") } 
RETURN
METHOD isBof() CLASS MyGrid
RETURN 	( ::nRecno==1 )
METHOD isEof() CLASS MyGrid
RETURN ( ::nRecno==::nLenData )
METHOD GoHome() CLASS MyGrid
	if ::isBof()
		return
	endif
	::nRecno = 1
	::oGrid:ClearRows()
	::ShowData( 1, ::nVisibleRows )    
	::nCursorPos:= 0
	::SelectRow( ::nCursorPos )
RETURN
METHOD GoEnd() CLASS MyGrid  
	if ::isEof()  
		return  
	endif                                       
	
	::nRecno:= ::nLenData
	::oGrid:ClearRows()
	::ShowData( ::nRecno - ::nVisibleRows + 1, ::nVisibleRows )  
	::nCursorPos:= ::nVisibleRows-1
	::SelectRow( ::nCursorPos )
RETURN
METHOD GoPgUp() CLASS MyGrid
	if ::isBof()
		return
	endif                                
	
	// força antes ir para a 1a linha da grid           
	if ::nCursorPos != 0    
		::nRecno -= ::nCursorPos
		if ::nRecno <= 0 
			::nRecno:=1
		endif
		::nCursorPos:= 0
		::oGrid:setRowData( ::nCursorPos, {|o| { ::aData[::nRecno,1], ::aData[::nRecno,2], ::aData[::nRecno,3] } } ) 
	else
		::nRecno -= ::nVisibleRows
		if ::nRecno <= 0 
			::nRecno:=1
		endif
		::oGrid:ClearRows()
		::ShowData( ::nRecno, ::nVisibleRows )
		::nCursorPos:= 0
	endif
	::SelectRow( ::nCursorPos )
RETURN 
METHOD GoPgDown() CLASS MyGrid
	Local nLastVisRow
	
	if ::isEof()
		return
	endif                                         
	
	// força antes ir para a última linha da grid
	nLastVisRow:= ::nVisibleRows-1 
	
	if ::nCursorPos!=nLastVisRow    
	
		if ::nRecno+nLastVisRow > ::nLenData
			nLastVisRow:= ( ::nRecno+nLastVisRow ) - ::nLenData
			::nRecno:= ::nLenData
		else
			::nRecNo += nLastVisRow
		endif
		
		::nCursorPos:= nLastVisRow
		::oGrid:setRowData( ::nCursorPos, {|o| { ::aData[::nRecno,1], ::aData[::nRecno,2], ::aData[::nRecno,3] } } )
	else  
		::oGrid:ClearRows()
		::nRecno += ::nVisibleRows
		
		if ::nRecno > ::nLenData
			::nVisibleRows = ::nRecno-::nLenData
			::nRecno:= ::nLenData
		endif 
		
		::ShowData( ::nRecNo - ::nVisibleRows + 1, ::nVisibleRows )
		::nCursorPos:= ::nVisibleRows-1
	endif   
	
	::SelectRow( ::nCursorPos )
RETURN
	
METHOD GoUp(nOffSet) CLASS MyGrid
	Local lAdjustCursor:= .F.
	if ::isBof()
		RETURN
	endif
	if ::nCursorPos==0
		::oGrid:scrollLine(-1)
		lAdjustCursor:= .T.
	else            
		::nCursorPos -= nOffSet
	endif
	::nRecno -= nOffSet    
	
	// atualiza linha corrente  
	::oGrid:setRowData( ::nCursorPos, {|o| { ::aData[::nRecno,1], ::aData[::nRecno,2], ::aData[::nRecno,3] } } ) 
	
	if lAdjustCursor  
		::nCursorPos:= 0
	endif
	::SelectRow( ::nCursorPos )
RETURN
METHOD GoDown(nOffSet) CLASS MyGrid
    Local lAdjustCursor:= .F.    
	if ::isEof()
		RETURN
	endif      
	
	if ::nCursorPos==::nVisibleRows-1
		::oGrid:scrollLine(1)
		lAdjustCursor:= .T.
	else
		::nCursorPos += nOffSet
	endif                 
	::nRecno += nOffSet
	
	// atualiza linha corrente  
	::oGrid:setRowData( ::nCursorPos, {|o| { ::aData[::nRecno,1], ::aData[::nRecno,2], ::aData[::nRecno,3] } } ) 
	if lAdjustCursor 
		::nCursorPos:= ::nVisibleRows-1
	endif
	::SelectRow( ::nCursorPos )       
RETURN
METHOD onMove( oGrid,nMvType,nCurPos,nOffSet,nVisRows ) CLASS MyGrid                          
	::nCursorPos:= nCurPos
	::nVisibleRows:= nVisRows
	
	if nMvType == GRID_MOVEUP  
		::GoUp(nOffSet)
	elseif nMvType == GRID_MOVEDOWN       
		::GoDown(nOffSet)
	elseif nMvType == GRID_MOVEHOME           
		::GoHome()
	elseif nMvType == GRID_MOVEEND
		::GoEnd()  
	elseif nMvType == GRID_MOVEPAGEUP
		::GoPgUp()
	elseif nMvType == GRID_MOVEPAGEDOWN 
		::GoPgDown()
	endif
RETURN             
METHOD ShowData( nFirstRec, nCount ) CLASS MyGrid
	local i, nRec, ci
	DEFAULT nCount:=30
	
	for i=0 to nCount-1 
		nRec:= nFirstRec+i
		if nRec > ::nLenData
			RETURN
		endif
		ci:= Str( nRec )             
		cb:= "{|o| { Self:aData["+ci+",1], Self:aData["+ci+",2], Self:aData["+ci+",3] } }"
		::oGrid:setRowData( i, &cb )
	next i
RETURN
METHOD ClearRows() CLASS MyGrid
	::oGrid:ClearRows()
	::nRecNo:=1
RETURN
METHOD DoUpdate() CLASS MyGrid     
	::nRecNo:=1
	::Showdata(1)
	::SelectRow(0)
RETURN
METHOD SelectRow(n) CLASS MyGrid
	::oGrid:setSelectedRow(n)
RETURN           
METHOD SetCSS(cCSS) CLASS MyGrid
	::oGrid:setCSS(cCSS)
RETURN      
// U_TSTGRID ( Executa Grid )
//------------------------------------------------------------------         
USER FUNCTION TSTGRID()                                   
	Local oDlg, aData:={}, i, oGridLocal, oEdit, nEdit:= 0
	Local oBtnAdd, oBtnClr, oBtnLoa
	
	// configura pintura da TGridLocal 
	cCSS:= "QTableView{ alternate-background-color: red; background: yellow; selection-background-color: #669966 }"  
	
	// configura pintura do Header da TGrid
	cCSS+= "QHeaderView::section { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #616161, stop: 0.5 #505050, stop: 0.6 #434343,  stop:1 #656565); color: white; padding-left: 4px; border: 1px solid #6c6c6c; }"
	
	// Dados                      
	for i:=1 to 10000                          
		cCodProd:= StrZero(i,6)     
		if i<3           
			// inserindo imagem nas 2 primeiras linhas
			cProd:= "RPO_IMAGE=OK.BMP" 
		else
			cProd:= 'Produto '+cCodProd
		endif
		
		cVal = Transform( 10.50, "@E 99999999.99" )
		AADD( aData, { cCodProd, cProd, cVal } )
	next
	
	DEFINE DIALOG oDlg FROM 0,0 TO 500,500 PIXEL                             
	
	oGrid:= MyGrid():New(oDlg,aData)
	
	 
	
	// Aplica configuração de pintura via CSSoGrid:SetCSS(cCSS)                              
	@ 210, 10 GET oEdit VAR nEdit OF oDlg PIXEL PICTURE "99999"
	@ 210, 70 BUTTON oBtnAdd PROMPT "Go" OF oDlg PIXEL ACTION oGrid:SelectRow(nEdit)
	@ 210, 100 BUTTON oBtnClr PROMPT "Clear" OF oDlg PIXEL ACTION oGrid:ClearRows()
	@ 210, 150 BUTTON oBtnLoa PROMPT "Update" OF oDlg PIXEL ACTION oGrid:DoUpdate()
	ACTIVATE DIALOG oDlg CENTERED
	
RETURN

 


Exemplo da classe TGrid()

TOTVS Application Server 10 , ByYou Application Server

 

  • Sem rótulos