Histórico da Página
| Composition Setup |
|---|
import.css=/download/attachments/327912/newLayout.css |
...
| Pagetitle |
|---|
...
...
|
...
|
Exibe
...
os
...
dados
...
organizados
...
em
...
uma
...
tabela.
Hierarquia
TSrvObject -> TControl -> TGrid
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údo | descrição |
|---|---|
| CONTROL_ALIGN_LEFT | Alinhamento do texto à esquerda. |
| CONTROL_ALIGN_RIGHT | Alinhamento do texto à direita. |
| 0 | Texto 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údo | Descriçã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.
- TControl
- TGrid
Construtores
| Inclusão de trecho | ||||||
|---|---|---|---|---|---|---|
|
Propriedades
| Inclusão de trecho | ||||||
|---|---|---|---|---|---|---|
|
Métodos
| Inclusão de trecho | ||||||
|---|---|---|---|---|---|---|
|
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 | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
#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> ) -->
...
| Propriedade | Descrição | Tipo |
| bCursorMove | Indica 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:
...
| Valor | mnemônico | descrição |
|---|---|---|
| 0 | GRID_MOVEUP | Move uma linha para cima. |
| 1 | GRID_MOVEDOWN | Move uma linha para baixo. |
| 2 | GRID_MOVEHOME | Move para o topo da base de dados. |
| 3 | GRID_MOVEEND | Move para o fim da base de dados. |
| 4 | GRID_MOVEPAGEUP | Move uma página de dados para cima. |
| 5 | GRID_MOVEPAGEDOWN | Move 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| Composition Setup |
|---|
import.css=/download/attachments/327912/newLayout.css |
| Portuguese | ||||
|---|---|---|---|---|
| Pagetitle | | TGrid | TGrid | |
| Nome | Tipo | Descrição | Obrigatório | Referência | oParent | Objeto | Indica a janela ou componente parent onde o objeto será criado. | X | nRow | Numérico | Indica a coordenada vertical em pixels. | nCol | Numérico | Indica a coordenada horizontal em pixels. | nWidth | Numérico | Indica a largura em pixels do objeto. | nHeight | Numérico | Indica a altura em pixels do objeto. |
| Nome | Tipo | Descrição | Obrigatório | Referência | nId | Numérico | Indica o ID de identificação da coluna que será criada. | X | cCaption | Caracter | Indica o título da coluna. | X | nWidth | Numérico | Indica a largura inicial da coluna em pixels. | X | nAlign | Numérico | Indica o alinhamento do texto na coluna. Para informações das opções disponíveis, consulte a área Observações. | X |
| Conteúdo | descrição |
|---|---|
| CONTROL_ALIGN_LEFT | Alinhamento do texto à esquerda. |
| CONTROL_ALIGN_RIGHT | Alinhamento do texto à direita. |
| 0 | Texto 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> ) -->
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> ) -->
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> ) -->
scrollLines
Movimenta as linhas de exibição, do objeto, para cima ou para baixo.
TGrid(): scrollLines ( < nLines> ) -->
As opções disponíveis para o parâmetro são:
| Conteúdo | Descriçã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> ) -->
setRowColor
Determina a cor exibida em uma linha visível do browse com as propriedades (nLinha, nColorBak, nColorFore).
TGrid(): setRowColor ( < nLinha>, < nColorBack>, < nColorFore> ) -->
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> ) -->
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] ) -->
setSelectedRow
Posiciona na linha selecionada do objeto.
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> ) -->
| Propriedade | Descrição | Tipo |
| bCursorMove | Indica 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 |
| bGridInfo | Indica 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:
| Valor | mnemônico | descrição |
|---|---|---|
| 0 | GRID_MOVEUP | Move uma linha para cima. |
| 1 | GRID_MOVEDOWN | Move uma linha para baixo. |
| 2 | GRID_MOVEHOME | Move para o topo da base de dados. |
| 3 | GRID_MOVEEND | Move para o fim da base de dados. |
| 4 | GRID_MOVEPAGEUP | Move uma página de dados para cima. |
| 5 | GRID_MOVEPAGEDOWN | Move 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].
Propriedade: bGridInfo
| Parâmetro | Descrição |
|---|---|
| o | Indica a instância do objeto TGrid(). |
| nVisRows | Indica 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. |
//------------------------------------------------------------------ //ValoresExemplo
para ade
propriedadeconfiguração
nHScrollde
queTGrid
defineem
oarray com navegação por linha
comportamento da //barra de rolagem horizontal //------------------------------------------------------------------ #define GRID_MOVEUP
HSCROLL_ASNEEDED0#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 nRecNoCLASS
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 GoEndGoDown(nOffSet)
METHODGoPgUp
SetCSS(cCSS)
METHODGoPgDown
SetFreeze(nFreeze)
METHOD GoUpSetHScrollState(nOffSet
nHScroll)
ENDCLASS METHODGoDown(nOffSet)
New(oDlg, aData) CLASS MyGrid Local oFontMETHOD 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 RETURNMyGridRETURN
( ::nRecno==1 ) METHOD isEof() CLASSMyGridRETURN
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
endifreturn 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:=1endif
endif
::nCursorPos:= 0 ::oGrid:setRowData( ::nCursorPos, {|o| { ::aData[::nRecno,1], ::aData[::nRecno,2], ::aData[::nRecno,3] } } )else
else ::nRecno -= ::nVisibleRowsif ::nRecno<=0 ::nRecno:=1 endif ::oGrid:ClearRows()
if ::nRecno <= 0 ::nRecno:=1 endif ::oGrid:ClearRows() ::ShowData( ::nRecno, ::nVisibleRows )
::nCursorPos:= 0endif
endif ::SelectRow( ::nCursorPos ) RETURN
METHOD GoPgDown() CLASSMyGridLocal 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 += nLastVisRowendif
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:= ::nLenDataendif
endif ::ShowData( ::nRecNo - ::nVisibleRows + 1, ::nVisibleRows )
::nCursorPos:= ::nVisibleRows-1endif
1 endif ::SelectRow( ::nCursorPos )RETURNMETHOD
RETURN METHOD GoUp(nOffSet) CLASSMyGridLocal
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 += nOffSetendif
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 ) RETURNMETHODRETURN 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 ) CLASSMyGridlocal
MyGrid local i, nRec,ciDEFAULT
ci DEFAULT nCount:=30for
30 for i=0 to nCount-1
nRec:= nFirstRec+i
if nRec > ::nLenDataRETURN 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 MyGridRETURNMETHOD
::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
METHODDoUpdate
SetFreeze(nFreeze) CLASS MyGrid
::nRecNonFreeze :=1
nFreeze ::Showdata(1) ::SelectRow(0)RETURNMETHOD SelectRow(n
oGrid:nFreeze := nFreeze RETURN METHOD SetHScrollState(nHScroll) CLASS MyGrid::oGrid:setSelectedRow(n)RETURN
::nHScrollMETHOD SetCSS(cCSS) CLASS MyGrid
:= nHScroll ::oGrid:setCSS(cCSS)RETURN
nHScroll := nHScroll RETURN
// U_TSTGRID ( Executa Grid ) //------------------------------------------------------------------
USER FUNCTIONTSTGRID()
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 linhasfor
icProd:=1 to 10000
"RPO_IMAGE=OK.BMP" else cProd:=cCodProd:= StrZero(i,6)
'Produto '+cCodProdif
i<3endif//
inserindo imagemnas
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 CENTEREDACTIVATE DIALOG oDlg CENTEREDRETURN

RETURN
Resultado do Exemplo
Abrangência
Classe disponível, para o TOTVS Application Server e TOTVS SmartClient, a partir da build 7.00.080806P.
