Page 1 of 1

Ayuda con xBrowse SOLUCIONADO

PostPosted: Thu Oct 21, 2010 10:49 pm
by FranciscoA
Hola amigos: Estoy desarrollando un pequeño aplicativo con tXbrowse, pero me he encontrado con los siguientes problemas:

1- Utilizando la edición directa en xbrowse, cuando ya se ha editado determinada celda (xVal grabado), y regreso a la misma celda, oprimo enter como que voy a editar de nuevo pero no lo hago; oprimo enter para salir, y el valor cambia cuando es una cantidad mayor a centenas. Es decir, si tenía un valor no mayor de 999.99 todo bien... pero si era 1.000.00 lo convierte en 1.00, si era 11.000.00 en 11.00, etc. ¿Qué sucede aquí?

2- En un oBrw creado desde recursos (oBrw:CreateFromResources(181), cuando oprimo la tecla ENTER en una columna editable, no hace nada y el cursor se sale del oBrw y pasa al siguiente control (por Ej: un botón). Si la edito utilizando doble click, todo bien. En un entorno MDI usando MDICHILDS funciona correctamente. ¿Qué hago mal? He tenido que hacer un truco, pero es anti-estético y no estoy seguro de que sea correcto. Aquí el código:

Cuento con su amable asistencia para solucionar esto.
...
...
DBSELECTAREA(cFicTemp)

oBrw := TXBrowse():New( oDlg )
oBrw:cAlias := (cFicTemp)

//ESTILOS
oBrw:lKinetic := .f.
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLCELL //barra selectora (celda)
oBrw:nColDividerStyle := LINESTYLE_INSET
oBrw:nRowDividerStyle := LINESTYLE_INSET
oBrw:lColDividerComplete := .t. //completa pintado hasta el footer cuando lineas no llenan todo el browse
oBrw:nRowHeight := 20 //altura entre lineas
oBrw:lTransparent := .t.
oBrw:lContrastClr := .f. //para que no cambie color de texto automaticamente segun intensidad del fondo
oBrw:nStretchCol := STRETCHCOL_LAST //llenar espacio con ultima columna
oBrw:lAllowRowSizing := .f. // If true horizontal row sizing is allowed
oBrw:lAllowColSwapping := .f. // Si es .t., intercambiar col es permitido

//HEADERS Y FOOTERS
oBrw:nHeaderHeight := 36 //Altura cabeceras de col
oBrw:nHeaderLines := 2 //Lineas del header
oBrw:lFooter := .t. //Que tendrá footer
oBrw:nFooterLines := 1 //Lineas del footer
oBrw:nFooterHeight := 30 //Altura del Footer
oBrw:lRecordSelector := .t. //poner o no, COL de la flechita de la izq

//COLORES (texto y fondo del texto)
oBrw:bClrHeader := {|| { nRGB(140, 0, 0), nRGB(231,242,255) } }
oBrw:bClrFooter := oBrw:bClrHeader
oBrw:bClrStd := {|| { nRGB( 0, 0, 0), nRGB(255,248,220) } } // colores para lineas normales
oBrw:bClrSel := {|| { nRGB( 0, 0, 0), aGradBarSel } } // para barra de linea selecc cuando el control no tiene el foco
oBrw:bClrSelFocus := { || { CLR_BLACK, aGradBarSelFocus } } // para barra de linea selecc cuando el control tiene el foco
oBrw:oFont = oFont

oBrw:lFastEdit := .t.

//COLUMNAS DEL BROWSE
...
...
oCol = oBrw:AddCol()
oCol:bStrData = { || Transform((cFicTemp)->CuotaNum,"9999") }
oCol:nDataStrAlign := 1
oCol:cHeader = "Cuota" +CRLF+ "Num"
oCol:nWidth = 40
oCol:nEditType = 0 //no editable

oCol = oBrw:AddCol()
oCol:bStrData = { || Transform((cFicTemp)->PagoPrinc,"@Z 999,999,999.99") }
oCol:nDataStrAlign := 1
oCol:cHeader = "Pago" +CRLF+ "Principal"
oCol:nWidth = 100
oCol:nEditType = EDIT_GET
oCol:bOnPostEdit = { | oCol, xVal, nKey | If( nKey == VK_RETURN, ((cFicTemp)->PagoPrinc := VAL(xVal), Eval(bRecibido)) ,) }

oBrw:CreateFromResource(181)
oBrw:SetRDD()

oBrw:bKeyDown = { | nKey | TeclasDown( oBrw, nKey, bPagaDoc,bRecibido ) }
oBrw:bKeyChar = { | nKey | TeclasChar( oBrw, nKey, bAbonaDoc,bRecibido ) }

REDEFINE BUTTONBMP oBotAcept ID 100 OF oDLG BITMAP "ACEPTAR" TEXTRIGHT ;
ACTION IF(RCajaOK(nTotRecib,cCodigo, cDocum,dFecha,cConcepto1,cConcepto2,cCkEfect),(lSave:=.t.,oDlg:End(),SysRefresh()),lSave:=.f.)
oBotAcept:cTooltip := "Grabar e imprimir el documento"

REDEFINE BUTTONBMP oBotCance ID 101 OF oDLG BITMAP "CANCELAR" TEXTRIGHT ;
ACTION ( lSave:=.f., oDLG:END() ) CANCEL
oBotCance:cTooltip := "Abandonar edicion del documento"


ACTIVATE DIALOG oDlg NOWAIT ; //CENTERED ;
ON INIT ( oDlg:SetSize(oWnd:nWidth()-10,oWnd:nHeight()-4), oDlg:Move(0,0) ,;
oBrw:SetBackGround(".\STONE.BMP"), oBrw:Refresh() ,;
VALID if(!lSave, if(!empty((cFicTemp)), MsgNoYes("¿Está seguro(a) de abandonar la edición del documento?","Advertencia"),.t.),.t.)

oBrush:End()
oFont:End()
...
...


//-----------------------------------------------------------------//ESTE ES EL TRUCO
Static function TeclasChar( oBrw, nKey, bAbonaDoc, bRecibido )
local oCol
oCol:=oBrw:SelectedCol()

if oCol:lEditable
do case
case nKey == VK_RETURN
MsgRun("",,{|| inkey(.01) }) //SIN ESTO NO FUNCIONA, ¿WHY?
Eval(bAbonaDoc)
endcase
endif
return nil

//-----------------------------------------------------------//
Static function TeclasDown( oBrw, nKey, bPagaDoc, bRecibido )
do case
case nKey == VK_SPACE
Eval(bPagaDoc)
endcase
return nil

Saludos.

Re: Ayuda con xBrowse

PostPosted: Thu Oct 21, 2010 11:14 pm
by Daniel Garcia-Gil
Francisco

Que version de fivewin estas usando?

Re: Ayuda con xBrowse

PostPosted: Thu Oct 21, 2010 11:18 pm
by FranciscoA
Daniel, gracias por contestar. Estoy probando 10.06
Saludos.

Re: Ayuda con xBrowse

PostPosted: Fri Oct 22, 2010 12:09 am
by FranciscoA
Daniel, compilé con la 9.12 y lo mismo.
Saludos

Re: Ayuda con xBrowse

PostPosted: Fri Oct 22, 2010 12:20 am
by Daniel Garcia-Gil
Francisco

puede que tenga que ver con algun bug del xbrowse... creo que lo solvente en versiones actuales
puede que tenga algo relacionado con este bug: http://forums.fivetechsupport.com/viewtopic.php?p=102375#p102375
o que sea muy similar

preparame un ejemplo que te falle para probarlo con version actual y me mandas el xbrowse que estas usando
danielgarciagil@gmail.com

Re: Ayuda con xBrowse

PostPosted: Fri Oct 22, 2010 1:13 am
by FranciscoA
Daniel Garcia-Gil wrote:Francisco

puede que tenga que ver con algun bug del xbrowse... creo que lo solvente en versiones actuales
puede que tenga algo relacionado con este bug: http://forums.fivetechsupport.com/viewtopic.php?p=102375#p102375
o que sea muy similar

preparame un ejemplo que te falle para probarlo con version actual y me mandas el xbrowse que estas usando
danielgarciagil@gmail.com


Hola Daniel, Gracias.
Solucionado lo correspondiente al EDIT_GET del xBrowse, así :
//-----------------------------------------------------------------
Static function TeclasChar( oBrw, nKey, bPagaDoc, bAbonaDoc, bRecibido )
local oCol
oCol:=oBrw:SelectedCol()

if oCol:lEditable
do case
case nKey == VK_RETURN
//Simulate Click over button for no lost focus
PostMessage( oCol:oBtnList:hWnd, WM_LBUTTONDOWN, 1, 1 )
PostMessage( oCol:oBtnList:hWnd, WM_LBUTTONUP, 1, 1 )
** MsgRun("",,{|| inkey(.01) })
Eval(bAbonaDoc)
endcase
endif
return nil

Te estoy preparando el ejemplo para que veas lo del cambio de valor en el get del xbrowse.
Nuevamente, muy agradecido por tu atención.
Saludos.

Re: Ayuda con xBrowse

PostPosted: Fri Oct 22, 2010 3:07 am
by FranciscoA
Daniel, te he enviado email con lo solicitado. Gracias de antemano.

Saludos.

Re: Ayuda con xBrowse

PostPosted: Fri Oct 22, 2010 8:31 pm
by Daniel Garcia-Gil
Francisco

La solucion que encontre fue la siguiente

agrega este define en la clase txbrowse

Code: Select all  Expand view
#define WM_NEXTDLGCTL                   0x0028


agrega este IF en el method Edit

Code: Select all  Expand view
 
   if ::oBrw:oWnd:IsKindOf( "TDIALOG" )
      ::oBrw:oWnd:PostMsg( WM_NEXTDLGCTL, ::oEditGet:hWnd, 1 )
   else
        ::oEditGet:SetFocus()
   endif
 


Para la edicion, prueba hacerlo de esta forma
Code: Select all  Expand view

   oCol = oBrw:AddCol()
   oCol:bEditValue = { || (cAlias)->PagoPrinc }
   oCol:nDataStrAlign := 1
   oCol:cEditPicture = "@Z 999,999,999.99"
   oCol:cHeader = "Pago" +CRLF+ "Principal"
   oCol:nWidth = 100
   oCol:nEditType = EDIT_GET
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( nKey == VK_RETURN, ((cAlias)->PagoPrinc := xVal) ,) }
 


igual te reenvio el codigo que me enviaste con la modificaciones (inlcuso en la clase) que son muy pocas (parece sencilla la solucion pero me llevo tiempo encontrarla ;-) )

Re: Ayuda con xBrowse

PostPosted: Fri Oct 22, 2010 9:43 pm
by FranciscoA
Daniel, excelente trabajo. ¡Ahora si funciona de maravillas...!!! Muchas gracias por tu atención.
Saludos.

Re: Ayuda con xBrowse SOLUCIONADO

PostPosted: Sun Oct 24, 2010 6:35 pm
by carlos vargas
Daniel, donde se debe insertar el codigo en el metodo edit?

Re: Ayuda con xBrowse SOLUCIONADO

PostPosted: Sun Oct 24, 2010 7:15 pm
by Daniel Garcia-Gil
Carlos

busca esto ::oEditGet:SetFocus()
y lo subtituyes por el IF