Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Novo layout do documento
Composition Setup
import.css=/download/attachments/327912/newLayout.css

...

Pagetitle

...

...

Classe TGrid
Classe

...

TGrid

Exibe

...

os

...

dados

...

organizados

...

em

...

uma

...

tabela.

Hierarquia

TSrvObject -> TControl -> TGrid

New

New

Método construtor da classe.

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

...

    oTGrid()
  • Retorna o objeto criado.

AddColumn

<p>Adiciona colunas no objeto.</p>

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

...

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

<p>Apaga todas as linhas visíveis do objeto.</p>

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> ) -->

...

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. ATENÇÃO : o argumento array passado pela função é preenchido com as propriedades descritas.

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

...

RemoveColumn

<p>Remove a coluna do objeto.</p>

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

...

scrollLines

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

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

...

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.

Construtores

Inclusão de trecho
Classe TGrid - Construtores
Classe TGrid - Construtores
nopaneltrue

Propriedades

Inclusão de trecho
Classe TGrid - Propriedades
Classe TGrid - Propriedades
nopaneltrue

Métodos

Inclusão de trecho
Classe TGrid - Métodos
Classe TGrid - Métodos
nopaneltrue

Observações

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

Exemplos

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
#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

SetHeaderClick

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

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

...

SetRowData

<p>Confgura os dados que serão apresentados em determinada linha do objeto.</p>

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

...

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

<p>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] ) -->

...

setSelectedRow

<p>Posiciona na linha selecionada do objeto.</p>

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

...

  • 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> ) -->

...

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

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:

...

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.

...

  

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]. 

 

Importante

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

#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)END CLASSMETHOD New(oDlg, aData) CLASS MyGrid   	::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                       		::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") } RETURNMETHOD isBof() CLASS MyGridRETURN ( ::nRecno==1 )METHOD isEof() CLASS MyGridRETURN ( ::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 )RETURNMETHOD 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 MyGridLocal nLastVisRowif ::isEof()		returnendif                                         // 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-1endif   ::SelectRow( ::nCursorPos )				RETURNMETHOD GoUp(nOffSet) CLASS MyGridLocal lAdjustCursor:= .F.if ::isBof()	RETURNendif		       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:= 0endif	              ::SelectRow( ::nCursorPos )RETURNMETHOD GoDown(nOffSet) CLASS MyGrid    Local lAdjustCursor:= .F.    if ::isEof()	RETURNendif      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-1endif		  	                                ::SelectRow( ::nCursorPos )       RETURNMETHOD onMove( oGrid,nMvType,nCurPos,nOffSet,nVisRows ) CLASS MyGrid                          ::nCursorPos:= nCurPos::nVisibleRows:= nVisRowsif 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()endifRETURN             METHOD ShowData( nFirstRec, nCount ) CLASS MyGridlocal i, nRec, ciDEFAULT nCount:=30for 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     RETURNMETHOD ClearRows() CLASS MyGrid	::oGrid:ClearRows()	::nRecNo:=1RETURN                                                         METHOD DoUpdate() CLASS MyGrid     	::nRecNo:=1	::Showdata(1)	::SelectRow(0)RETURNMETHOD 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:= 0Local 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 } )nextDEFINE 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 CENTEREDRETURN
TOTVS Application Server 10
Composition Setup
import.css=/download/attachments/327912/newLayout.css

Classe: TGrid

Exibe os dados organizados em uma tabela.

TSrvObject -> TControl -> TGrid

New

New

Método construtor da classe.

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

    oTGrid(objeto)
  • Retorna o objeto criado.

AddColumn

Adiciona colunas no objeto.

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

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

Portuguese
Pagetitle
TGridTGrid
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.
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
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ênciaaArrRayArray 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ênciaaRetVetorIndica 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êncianIdNumé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êncianLinesNumé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ênciabBlockBloco 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êncianLinhaNumé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êncianRowNumé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êncianValNuméricoIndica a altura em pixels.

setSelectedRow

Posiciona na linha selecionada do objeto.

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

NomeTipoDescriçãoObrigatórioReferêncianRowNumé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êncianSelModeNumé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

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çãooIndica a instância do objeto TGrid().nMvTypeIndica 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.

#include "totvs.ch"
//------------------------------------------------------------------
//Valores 
Exemplo
para a 
de
propriedade 
configuração
nHScroll 
de
que 
TGrid
define 
em
o 
array com navegação por linha
comportamento da
//barra de rolagem horizontal
//------------------------------------------------------------------
#define GRID_
MOVEUP
HSCROLL_ASNEEDED   
0#define
0
#define GRID_
MOVEDOWN 1#define GRID_MOVEHOME 2#define GRID_MOVEEND 3#define GRID_MOVEPAGEUP 4#define GRID_MOVEPAGEDOWN 5
HSCROLL_ALWAYSOFF  1
#define GRID_HSCROLL_ALWAYSON   2
            
// 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
 
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
nCursorPos
    DATA nVisibleRows
    DATA nFreeze
    DATA nHScroll
       
    
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 
GoEnd
GoDown(nOffSet)
   
 METHOD 
GoPgUp
SetCSS(cCSS)
   
 METHOD 
GoPgDown
SetFreeze(nFreeze)

    
METHOD 
GoUp
SetHScrollState(
nOffSet
nHScroll)

ENDCLASS
METHOD 
GoDown(nOffSet)
New(oDlg, aData) CLASS MyGrid
    Local oFont
  
METHOD SetCSS(cCSS)END CLASSMETHOD New(oDlg, aData) CLASS MyGrid
         
    
::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
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") }
RETURNMETHOD

RETURN
METHOD isBof() CLASS MyGrid
RETURN 
MyGridRETURN
 ( ::nRecno==1 )
METHOD isEof() CLASS 
MyGridRETURN
MyGrid
RETURN ( ::nRecno==::nLenData )
METHOD GoHome() CLASS MyGrid

    if ::isBof()
return endif

        return
    endif
    
::
nRecno = 1
nRecno = 1
    ::oGrid:ClearRows()

    ::ShowData( 1, ::nVisibleRows )
    
::nCursorPos:= 0

    ::SelectRow( ::nCursorPos )
RETURN

RETURN
METHOD GoEnd() CLASS MyGrid
    if ::isEof()
  
return
  
endif
    return
    endif
       

    ::nRecno:= ::nLenData

    ::oGrid:ClearRows()

    ::ShowData( ::nRecno - ::nVisibleRows + 1, ::nVisibleRows )
    
::nCursorPos:= ::nVisibleRows-1

    ::SelectRow( ::nCursorPos )
RETURNMETHOD

RETURN
METHOD GoPgUp() CLASS MyGrid

    if ::isBof()
return endif

        return
    endif
       

    
// força antes ir para a 1a linha da grid
    
if ::nCursorPos != 0
        
::nRecno -= ::nCursorPos

        if ::
nRecno<
nRecno <= 0

            ::nRecno:=1
endif

        endif
        
::nCursorPos:= 0

        ::oGrid:setRowData( ::nCursorPos, {|o| { ::aData[::nRecno,1], ::aData[::nRecno,2], ::aData[::nRecno,3] } } )
else

    else
        ::nRecno -= ::nVisibleRows
if ::nRecno<=0 ::nRecno:=1 endif ::oGrid:ClearRows()

        if ::nRecno <= 0
            ::nRecno:=1
        endif
        ::oGrid:ClearRows()
        ::ShowData( ::nRecno, ::nVisibleRows )

        ::nCursorPos:= 0
endif

    endif
    ::SelectRow( ::nCursorPos )
RETURN

METHOD GoPgDown() CLASS 
MyGridLocal nLastVisRowif ::isEof() returnendif
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
::nRecno:= ::nLenData else ::

        else
            ::nRecNo += nLastVisRow
endif

        endif
           
        ::nCursorPos:= nLastVisRow
::oGrid:setRowData( ::nCursorPos, {|o| { ::aData[::nRecno,1], ::aData[::nRecno,2], ::aData[::nRecno,3] } } )else

        ::ShowData( ::nRecNo - ::nVisibleRows + 1, ::nVisibleRows )
    else
        ::oGrid:ClearRows()

        ::nRecno += ::nVisibleRows

           
        if ::nRecno > ::nLenData

            ::nVisibleRows = ::nRecno-::nLenData

            ::nRecno:= ::nLenData
endif

        endif
           
        ::ShowData( ::nRecNo - ::nVisibleRows + 1, ::nVisibleRows )

        ::nCursorPos:= ::nVisibleRows-
1endif
1
    endif
       
    ::SelectRow( ::nCursorPos )
RETURNMETHOD

RETURN
       
METHOD GoUp(nOffSet) CLASS 
MyGridLocal
MyGrid
    Local lAdjustCursor:= .F.
    if ::isBof()
RETURNendif

        RETURN
    endif
    if ::nCursorPos==0

        ::oGrid:scrollLine(-1)

        lAdjustCursor:= .T.
else

    else
        
::nCursorPos -= nOffSet
endif

    endif
    
::nRecno -= nOffSet
       
    // atualiza linha corrente
    ::oGrid:setRowData( ::nCursorPos, {|o| { ::aData[::nRecno,1], ::aData[::nRecno,2], ::aData[::nRecno,3] } } )
       
    if lAdjustCursor
  
::nCursorPos:= 0endif
      ::nCursorPos:= 0
    
endif
    ::SelectRow( ::nCursorPos )
RETURNMETHOD

RETURN
METHOD GoDown(nOffSet) CLASS MyGrid
    Local lAdjustCursor:= .F.
    if ::isEof()
RETURNendif

        RETURN
    endif
       
    if ::nCursorPos==::nVisibleRows-1

        ::oGrid:scrollLine(1)

        lAdjustCursor:= .T.
else

    else
        ::nCursorPos += nOffSet
endif

    endif
    ::nRecno 
+= nOffSet
       

  
::nRecno
 
+=
 
nOffSet
// atualiza linha corrente
    ::oGrid:setRowData( ::nCursorPos, {|o| { ::aData[::nRecno,1], ::aData[::nRecno,2], ::aData[::nRecno,3] } } )

    if lAdjustCursor

        ::nCursorPos:= ::nVisibleRows-
1endif
1
  
  
endif
    
::SelectRow( ::nCursorPos )
RETURNMETHOD

RETURN
METHOD onMove( oGrid,nMvType,nCurPos,nOffSet,nVisRows ) CLASS MyGrid
    ::nCursorPos:= nCurPos
    
::nVisibleRows:= nVisRows
       
    
::nCursorPos:= nCurPos::nVisibleRows:= nVisRowsif
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()endifRETURN

        ::GoPgDown()
    
endif
RETURN
METHOD ShowData( nFirstRec, nCount ) CLASS 
MyGridlocal
MyGrid
    local i, nRec,
ciDEFAULT
 ci
    DEFAULT nCount:=
30for
30
       
    for i=0 to nCount-1

        nRec:= nFirstRec+i

        if nRec > ::nLenData
RETURN endif

            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
   
RETURNMETHOD
 ::oGrid:ClearRows()
    ::nRecNo:=1
RETURN
METHOD DoUpdate() CLASS MyGrid
    ::nRecNo:=1
    ::Showdata(1)
   
CLASS
 
MyGrid
::
oGrid:ClearRows() ::nRecNo:=1RETURN
SelectRow(0)
RETURN
METHOD SelectRow(n) CLASS MyGrid
    valor := n - ::nCursorPos
    ::nRecno += valor
    if ::nRecno <= 0
      ::nRecno = 1
    endif
    ::nCursorPos:=n
    ::oGrid:setSelectedRow(n)
RETURN
METHOD SetCSS(cCSS) CLASS MyGrid
    ::oGrid:setCSS(cCSS)
RETURN
   

METHOD 
DoUpdate
SetFreeze(nFreeze) CLASS MyGrid
    
::
nRecNo
nFreeze :=
1
 nFreeze
    ::
Showdata(1) ::SelectRow(0)RETURNMETHOD SelectRow(n
oGrid:nFreeze := nFreeze
RETURN
METHOD SetHScrollState(nHScroll) CLASS MyGrid
::oGrid:setSelectedRow(n)RETURN

    ::nHScroll 
METHOD SetCSS(cCSS) CLASS MyGrid
:= nHScroll
    ::oGrid:
setCSS(cCSS)RETURN
nHScroll := nHScroll
RETURN
   

// U_TSTGRID ( Executa Grid )
//------------------------------------------------------------------

USER FUNCTION 
TSTGRID()
EXEMPLO()
    Local oDlg, aData:={}, i, oGridLocal, oEdit, nEdit:=
0Local
 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
           
for
 
i
cProd:=
1 to 10000
 "RPO_IMAGE=OK.BMP"
        else
            cProd:= 
cCodProd:= StrZero(i,6)
'Produto '+cCodProd
     
if
 
i<3
  endif
         
//
 
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 }
)nextDEFINE DIALOG oDlg FROM 0,0 TO 500,500 PIXEL
 )
    next
       
    DEFINE DIALOG oDlg FROM 0,0 TO 500,500 PIXEL
       
    oGrid:= MyGrid():New(oDlg,aData)
//

   
Aplica configuração de pintura via CSSoGrid
 oGrid:SetFreeze(2)
    oGrid:SetCSS(cCSS)
    //oGrid:SetHScrollState(GRID_HSCROLL_ALWAYSON) // Somente build superior a 131227A
       
    // Aplica configuração de pintura via CSSoGrid:SetCSS(cCSS)
    @ 210, 10 GET oEdit VAR nEdit OF oDlg PIXEL PICTURE
"99999"
 "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
       
ACTIVATE DIALOG oDlg CENTEREDRETURN
Exemplo da classe TGrid()
Image Removed
TOTVS Application Server 10 , ByYou Application Server

RETURN

Resultado do Exemplo

Image Added

Abrangência

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