TXBrowse: Asociar Indices a los headers de las columnas

Post Reply
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

TXBrowse: Asociar Indices a los headers de las columnas

Post 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.
User avatar
Kleyber
Posts: 581
Joined: Tue Oct 11, 2005 11:28 am
Location: São Luiz, Brasil

Post 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,
Kleyber Derick

FWH / xHb / xDevStudio / SQLLIB
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post 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.
Post Reply