Página 1 de 1

Tbrowse com ADO: identificação do campo

Enviado: 14 Set 2020 00:20
por cjp
Pessoal, alguém poderia me ajudar com uma coisa que imagino que seja simples no Tbrowse, mas estou apenas iniciando em Tbrowse:
Só preciso identificar o campo sobre o qual o usuário vai dar Enter num tbrowse. No dbedit(), eu faço isso usando modo/coluna.
Como fazer isso no tbrowse?

Tbrowse com ADO: identificação do campo

Enviado: 14 Set 2020 09:57
por JoséQuintas
cjp escreveu:Como fazer isso no tbrowse?
O tbrowse está sempre posicionado.

Em DBF, é só pegar o campo, exemplo cliente->nome
Em Array, idem, através de um contador, exemplo elemento[ nIndex ]
Em ADO, não é diferente, exemplo rs:Fields( "NOME" ):Value

Tbrowse com ADO: identificação do campo

Enviado: 14 Set 2020 12:11
por cjp
Acho que não fui claro na pergunta, ou não entendi tua resposta.
Veja o seguinte: estou editando no tbrowse uma tabela com apenas um registro, mas com vários campos: A, B, C, D etc.
Então, o usuário irá se movimentar apenas com as setas pra direita e pra esquerda, e teclar Enter sobre algum campo.
Eu preciso saber sobre qual campo ele teclou Enter, entende?
A questão não é sobre qual registro, mas sim sobre qual campo.

Tbrowse com ADO: identificação do campo

Enviado: 14 Set 2020 12:38
por Fernando queiroz
oBrowse1:aArray[oBrowse1:nCurrent,15]

Tbrowse com ADO: identificação do campo

Enviado: 14 Set 2020 13:56
por Claudio Soto
oBrowse:colPos

https://vivaclipper.wordpress.com/2014/ ... browsenew/

Tbrowse com ADO: identificação do campo

Enviado: 14 Set 2020 19:32
por alxsts
Olá!
Fernando queiroz escreveu:oBrowse1:aArray[oBrowse1:nCurrent,15]
Isto é HwGUI.
Claudio Soto escreveu:oBrowse:colPos
É a resposta correta para este caso.

Segue um exemplo Harbour:

Código: Selecionar todos

// The example demonstrates the steps required for creating a
// browse view for a two dimensional array. Note that the data
// source and row pointer of the data source are stored in
// oTBrowse:cargo. The pseudo instance variables :data and :recno
// are translated by the preprocessor.

// Exemplo extraido e adaptado de "xHarbour Language Reference Guide" - Alexandre Santos

#include "box.ch"
#include "inkey.ch"
#include "setcurs.ch"
#include "tbrowse.ch"

#define DEF_CSEP " "+CHR(179)+" "             // define o caracter da coluna
#define FOOT_SEP CHR(196)+CHR(193)+CHR(196)   // define o caracter do horizontal
#define HEAD_SEP CHR(196)+CHR(194)+CHR(196)   // define o caracter do horizontal

#xtrans  :data   =>   :cargo\[1]
#xtrans  :recno  =>   :cargo\[2]

REQUEST HB_CODEPAGE_PTISO
REQUEST HB_LANG_PT

PROCEDURE Main

   LOCAL i, nKey, bBlock, oTBrowse, oTBColumn
   LOCAL aHeading := { "File Name", ;
                       "File Size", ;
                       "File Date", ;
                       "File Time", ;
                       "File Attr"  }
   LOCAL aWidth := { 20, 10, 9, 9, 9 }, cSep := Chr(10), nCursor := SetCursor( SC_NONE )
   
   HB_CDPSELECT( 'PTISO' )
   HB_LANGSELECT( 'PT' )
   
   // Create TBrowse object
   oTBrowse := TBrowse():new( 3, 2, MaxRow()-2, MaxCol()-2 )

   // data source is the Directory() array
   oTBrowse:cargo      := { Directory( "*.*" ), 1 }

   oTBrowse:border     := B_SINGLE
   oTBrowse:headSep    := HEAD_SEP
   oTBrowse:colSep     := DEF_CSEP
   oTBrowse:footSep    := FOOT_SEP
   oTBrowse:colorSpec  := "N/W,W+/N"
   
   // Navigation code blocks for array
   oTBrowse:goTopBlock    := {|| oTBrowse:recno := 1 }
   oTBrowse:goBottomBlock := {|| oTBrowse:recno := Len( oTBrowse:data ) }
   oTBrowse:skipBlock     := {|nSkip| ArraySkipper( nSkip, oTBrowse ) }
   
   // create TBColumn objects and add them to TBrowse object
   FOR i:=1 TO Len( aHeading )
      // code block for individual columns of the array
      bBlock    := ArrayBlock( oTBrowse, i )
      oTBColumn := TBColumn():new( aHeading[i], bBlock )
      oTBColumn:width := aWidth[i]
      oTBrowse:addColumn( oTBColumn )
   NEXT
   
   CLS
   DispOutAt( 1, 1, PadR( " PATH " + hb_CurDrive() + ":\" + Curdir() + "\", MaxCol()-2 ), "N/W" )
   DispOutAt( MaxRow(), 1, PadC( " Pressione [ENTER] para informações ou [ESC] para finalizar", MaxCol()-2 ), "N/W" )
   
   // display browser and process user input
   DO WHILE .T.
      oTBrowse:forceStable()
   
      nKey := Inkey(0)
   
      IF oTBrowse:applyKey( nKey ) == TBR_EXIT
         If hb_Alert( "Fechar?", { " Sim ", " Não " }, "W+/N" ) == 1
            EXIT
         Endif
      ENDIF
   
      DO CASE
         CASE nKey == K_ENTER
              hb_Alert( "Linha atual na janela  : " + Transform( oTBrowse:rowPos(), "@ 99999" ) + cSep + ;
                        "Coluna atual na janela : " + Transform( oTBrowse:colPos(), "@ 99999" ) + cSep + ;
                        "Valor atual : "            + Transform( Eval( oTBrowse:getColumn( oTBrowse:colPos() ):block ), "@X" )  + cSep + ;
                        "Linha atual no ARRAY : "   + Transform( oTBrowse:recno, "@ 99999" ),, "W+/B" ;
                      )
      ENDCASE
   ENDDO

   SetCursor( nCursor )
   
RETURN

// This code block uses detached LOCAL variables to
// access single elements of a two-dimensional array.
FUNCTION ArrayBlock( oTBrowse, nSubScript )
RETURN {|| oTBrowse:data[ oTBrowse:recno, nSubScript ] }

// This function navigates the row pointer of the
// the data source (array)
FUNCTION ArraySkipper( nSkipRequest, oTBrowse )
   LOCAL nSkipped
   LOCAL nLastRec := Len( oTBrowse:data ) // Length of array

   IF oTBrowse:recno + nSkipRequest < 1
      // skip requested that navigates past first array element
      nSkipped := 1 - oTBrowse:recno
   ELSEIF oTBrowse:recno + nSkipRequest > nLastRec
      // skip requested that navigates past last array element
      nSkipped := nLastRec - oTBrowse:recno
   ELSE
      // skip requested that navigates within array
      nSkipped := nSkipRequest
   ENDIF
   // adjust row pointer
   oTBrowse:recno += nSkipped
// tell TBrowse how many rows are actually skipped.
RETURN nSkipped
A respeito do método rowPos(), mostrado no exemplo, vale destacar que este método retorna a posição da linha corrente em relação ao início da janela e não da fonte de dados.

Tbrowse com ADO: identificação do campo

Enviado: 14 Set 2020 22:22
por Claudio Soto
alxsts escreveu:Isto é HwGUI.
Claudio Soto escreveu:
oBrowse:colPos
No, es hb.

Tbrowse com ADO: identificação do campo

Enviado: 14 Set 2020 23:06
por alxsts
Olá!

A disposição do texto, em meio aos quotes, realmente ficou confusa. Mas o que escrevi está correto:
Fernando queiroz escreveu:oBrowse1:aArray[oBrowse1:nCurrent,15] ===> Isto é HwGUI
Claudio Soto escreveu:oBrowse:colPos ===> É a resposta correta para este caso.
Creio que agora está claro. Gracias Claudio.

Tbrowse com ADO: identificação do campo

Enviado: 15 Set 2020 00:46
por Claudio Soto
Perdón yo entendí mal entonces!

Tbrowse com ADO: identificação do campo

Enviado: 15 Set 2020 01:21
por cjp
Consegui com o ColPos(). Obrigado.