Page 1 of 1
TXBrowse: Asociar Indices a los headers de las columnas
Posted: Fri Sep 07, 2007 9:50 am
by Carlos Mora
Hola compañeros,
estoy cambiando un TSBrowse por un TXBrowse. En la configuración anterior tenía el TSBrowse definido de forma tal que al hacer dobleclick en una columna se cambiaba a un índice asociado, como en
Code: Select all
ADD COLUMN TO OBROWSE HEADER "CONCEPTO" ;
ORDER "CONCEPTO"
Como se hace lo mismo en TXBrowse? He estado buscando pero no encuentro nada relacionado en el código, aunque me parece haberlo visto en algun lado.
Saludos,
Carlos.
Posted: Fri Sep 07, 2007 12:58 pm
by Kleyber
Hola Carlos,
Usas asi:
Code: Select all
oBrw := TXBrowse():New( oDlg1 )
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW
oBrw:nColDividerStyle := LINESTYLE_LIGHTGRAY
oBrw:nRowDividerStyle := LINESTYLE_LIGHTGRAY
oBrw:bSeek := {|c| DbSeek( Upper( c ) ) }
Y en las columnas, yo defino asi:
Code: Select all
oCol := oBrw:AddCol()
oCol:cHeader := "Código"
oCol:bStrData := { || IF( SELECT(oBrw:cAlias) > 0,PRO->codi,"") }
oCol:nDataStrAlign := AL_LEFT
oCol:nHeadStrAlign := AL_LEFT
oCol:nWidth := 82
oCol:bLClickHeader := {|| Checa_Indices(1,1,oBrw,"PRO") }
oCol:AddBmpFile( "BLANK.BMP", .T. )
oCol:AddBmpFile( "CLIP.BMP", .T. )
oCol:nHeadBmpNo := 2
oCol := oBrw:AddCol()
oCol:cHeader := "Descrição"
oCol:bStrData := { || IF( SELECT(oBrw:cAlias) > 0,PRO->nome,"") }
oCol:nDataStrAlign := AL_LEFT
oCol:nHeadStrAlign := AL_LEFT
oCol:nWidth := 302
oCol:bLClickHeader := {|| Checa_Indices(2,2,oBrw,"PRO") }
oCol:AddBmpFile( "BLANK.BMP", .T. )
oCol:AddBmpFile( "CLIP.BMP", .T. )
oCol:nHeadBmpNo := 1
Donde la función Checa_Indices() es solo para cambiar el bitmap que aparece en el header, asi:
Code: Select all
//----------------------------------------------------------------------------//
Function Checa_Indices( nX, nZ, oBrwX, xAlias )
// Verificação do set order e dos headers
// nX - Índice
// nZ - Posição da coluna no browse
// oBrwX - Browse
// xAlias - Tabela a ser atualizada
//----------------------------------------------------------------------------//
for nA := 1 to len( oBrwX:aCols )
oCol := oBrwX:aCols[ nA ]
if oCol:nHeadBmpNo > 0
if nA = nZ
oCol:nHeadBmpNo := 2
else
oCol:nHeadBmpNo := 1
endif
endif
next
sele (xAlias)
DbSetOrder(nX)
oBrwX:Refresh()
return nil
Espero que te ayude.
Saludos,
Posted: Fri Sep 07, 2007 1:09 pm
by Carlos Mora
Hola Kleyber
muchas gracias por el código. El unico inconveniente es que TXBrowse no se refesca bien si por ejemplo está en el renglon 4 y con el nuevo indice estamos en la clave 2. Y hacer un Refresh(.T.) hace un gotop que no es lo que quiero.
Hay que tocar el refresh antes para que pivotee de manera correcta sobre el registro actual.
Un saludo,
Carlos.