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:
// 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.