Ayuda con xBrowse SOLUCIONADO

Ayuda con xBrowse SOLUCIONADO

Postby FranciscoA » Thu Oct 21, 2010 10:49 pm

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.
Last edited by FranciscoA on Sat Oct 23, 2010 3:04 am, edited 1 time in total.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ayuda con xBrowse

Postby Daniel Garcia-Gil » Thu Oct 21, 2010 11:14 pm

Francisco

Que version de fivewin estas usando?
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Ayuda con xBrowse

Postby FranciscoA » Thu Oct 21, 2010 11:18 pm

Daniel, gracias por contestar. Estoy probando 10.06
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ayuda con xBrowse

Postby FranciscoA » Fri Oct 22, 2010 12:09 am

Daniel, compilé con la 9.12 y lo mismo.
Saludos
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ayuda con xBrowse

Postby Daniel Garcia-Gil » Fri Oct 22, 2010 12:20 am

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
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Ayuda con xBrowse

Postby FranciscoA » Fri Oct 22, 2010 1:13 am

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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ayuda con xBrowse

Postby FranciscoA » Fri Oct 22, 2010 3:07 am

Daniel, te he enviado email con lo solicitado. Gracias de antemano.

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ayuda con xBrowse

Postby Daniel Garcia-Gil » Fri Oct 22, 2010 8:31 pm

Francisco

La solucion que encontre fue la siguiente

agrega este define en la clase txbrowse

Code: Select all  Expand view  RUN
#define WM_NEXTDLGCTL                   0x0028


agrega este IF en el method Edit

Code: Select all  Expand view  RUN
 
   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  RUN

   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 ;-) )
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Ayuda con xBrowse

Postby FranciscoA » Fri Oct 22, 2010 9:43 pm

Daniel, excelente trabajo. ¡Ahora si funciona de maravillas...!!! Muchas gracias por tu atención.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ayuda con xBrowse SOLUCIONADO

Postby carlos vargas » Sun Oct 24, 2010 6:35 pm

Daniel, donde se debe insertar el codigo en el metodo edit?
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Ayuda con xBrowse SOLUCIONADO

Postby Daniel Garcia-Gil » Sun Oct 24, 2010 7:15 pm

Carlos

busca esto ::oEditGet:SetFocus()
y lo subtituyes por el IF
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 26 guests

cron