FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour TDolphin + XBrowse drag column
Posts: 18
Joined: Mon Jan 13, 2014 08:37 PM
TDolphin + XBrowse drag column
Posted: Tue Aug 02, 2016 03:12 PM
Eu estou com um TXBrowse que utiliza um objeto da classe TDolphin para apresentar os valores de uma tabela. As opções (que eu conheço) para editar as colunas do browse estão todas setadas como falso:
Code (fw): Select all Collapse
oBrw:lAllowColReGroup      := .f.
oBrw:lAllowColHiding       := .f.
oBrw:lAllowRowSizing       := .f.
oBrw:lAllowColSwapping     := .f.

O problema que está sendo enfrentado é que, ao clicar em um dos cabeçalhos de coluna do browse, cujos valores são numéricos, e arrastar este para cima de uma caracter, está causando erro internamente na classe TDolphin:
Application
===========
Path and name: C:\base\getpdv.exe (32 bits)
Size: ********* bytes
Compiler version: xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 6406)
FiveWin Version: FWHX 13.07
Windows version: 6.2, Build 9200

Time from start: 0 hours 0 mins 14 secs
Error occurred at: 02/08/16, 11:32:20
Error description: Error BASE/2022 Argument error: ALLTRIM
Args:
[ 1] = N 13

Stack Calls
===========
Called from: => ALLTRIM( 0 )
Called from: .\source\prg\tdolpsrv.prg => CLIPVALUE2SQL( 1955 )
Called from: .\source\prg\tdolpqry.prg => TDOLPHINQRY:SEEK( 1376 )
Called from: T:\new\fivewin\xbrowse.prg => TXBRWCOLUMN:SETORDER( 11902 )
Called from: T:\new\fivewin\xbrowse.prg => TXBRWCOLUMN:HEADERLBUTTONUP( 10768 )
Called from: T:\new\fivewin\xbrowse.prg => TXBROWSE:LBUTTONUP( 3520 )
Called from: T:\new\fivewin\control.prg => TCONTROL:HANDLEEVENT( 1725 )
Called from: T:\new\fivewin\xbrowse.prg => TXBROWSE:HANDLEEVENT( 12246 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3234 )
Called from: => DIALOGBOX( 0 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 274 )
Called from: T:\new\fivewin\browseprodutos.PRG => BROWSEPRODUTOS( 257 )

Verifiquei no código fonte disponibilizado e encontrei um local onde é verificado o tipo da variável:
Code (fw): Select all Collapse
SWITCH cType
   CASE "N"
   CASE "I"

      if Value != NIL .OR. lNoNull
         cValue := AllTrim( Str( Value ) )
      else
         cValue := "NULL"
      endif

      EXIT

   CASE "C"
      if ! Empty( Value ) .OR. lNoNull
         cValue := cTxt + AllTrim( Value ) + cTxt
      else
         cValue := "NULL"
      endif
      EXIT
...


Esta variável cType é um parâmetro, passado como: ::aStructure[ aFields[ nId ] ][ MYSQL_FS_CLIP_TYPE ]
O parâmetro lTxt também é considerado .F. na chamada da função ClipValue2Sql.

No XBrowse eu defino uma coluna concatenando dois campos, quando eu defino duas colunas separadas o erro acima citado não é gerado.

A maneira como estou definindo a coluna do xbrowse é a seguinte:
Code (fw): Select all Collapse
oBrw:aCols[1]:nHeadStrAlign  := AL_CENTER                       //header alinhamento do browse
oBrw:aCols[1]:nDataStrAlign  := AL_CENTER                       //data   alinhamento do browse
oBrw:aCols[1]:cHeader        := 'Código'                        //header do browse
oBrw:aCols[1]:nWidth         := 80                              //tamanho coluna
oBrw:aCols[1]:cEditPicture   := '999999'                        //mascara do campo
oBrw:aCols[1]:bEditValue     := {|| M->oGetServerQry:codpro01}  //posição do array

oBrw:aCols[2]:nHeadStrAlign  := AL_LEFT                         //header alinhamento do browse
oBrw:aCols[2]:nDataStrAlign  := AL_LEFT                         //data   alinhamento do browse
oBrw:aCols[2]:cHeader        := 'Descrição do Produto'          //header do browse
oBrw:aCols[2]:cEditPicture   := '@!'                            //mascara do campo

if PegaUsaDescricaoComplementarProdutos() == 'J'
   oBrw:aCols[2]:bEditValue     := {|| M->oGetServerQry:descpro01 + M->oGetServerQry:desccomp01 } // concatenamos a descricao complementar
   oBrw:aCols[2]:nWidth         := 600                             //tamanho coluna
else
   oBrw:aCols[2]:bEditValue     := {|| M->oGetServerQry:descpro01} //posição do array
   oBrw:aCols[2]:nWidth         := 300                             //tamanho coluna
endif

...


Att

Continue the discussion