FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ayuda con xBrowse SOLUCIONADO
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Ayuda con xBrowse SOLUCIONADO
Posted: 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.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Ayuda con xBrowse
Posted: Thu Oct 21, 2010 11:14 PM

Francisco

Que version de fivewin estas usando?

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Ayuda con xBrowse
Posted: 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
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Ayuda con xBrowse
Posted: 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
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Ayuda con xBrowse
Posted: 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
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Ayuda con xBrowse
Posted: Fri Oct 22, 2010 01: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:hWnd, WM_LBUTTONDOWN, 1, 1 )
PostMessage( oCol: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
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Ayuda con xBrowse
Posted: Fri Oct 22, 2010 03:07 AM

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

Saludos.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Ayuda con xBrowse
Posted: Fri Oct 22, 2010 08:31 PM
Francisco

La solucion que encontre fue la siguiente

agrega este define en la clase txbrowse

Code (fw): Select all Collapse
#define WM_NEXTDLGCTL                   0x0028


agrega este IF en el method Edit

Code (fw): Select all Collapse
   
   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 (fw): Select all Collapse
   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 :-) )
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Ayuda con xBrowse
Posted: Fri Oct 22, 2010 09: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
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Ayuda con xBrowse SOLUCIONADO
Posted: Sun Oct 24, 2010 06:35 PM

Daniel, donde se debe insertar el codigo en el metodo edit?

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Ayuda con xBrowse SOLUCIONADO
Posted: Sun Oct 24, 2010 07:15 PM

Carlos

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

Continue the discussion