Xbrowse con edicion automatica

Xbrowse con edicion automatica

Postby miarcod » Thu Jan 12, 2017 11:05 pm

Como hago para que cuando finalizo la edición de una celda de un xbrowse al cambiar a la siguiente se active el edición automática de la celda sin tener que puslar ninguna tecla.

Gracias

Pongo un pequeño ejemplo de lo que estoy intentando
Code: Select all  Expand view


    #include "FiveWin.ch"
    #include "InKey.ch"
    #include "xbrowse.ch"

#DEFINE COL1    1
#DEFINE COL2    2
#DEFINE COL3    3
#DEFINE COL4    4
#DEFINE COL5    5

#define DCONSU  0
#define DALTAS  1
#define DMODIF  2

#DEFINE DREGISTRO   { SPACE(10) , SPACE(40), 0,  CTOD(""), CTOD("") }

STATIC nAccion

    function Prueba2()

       local aArray := {}

       local oWnd, ;
             oBrw, oCol

       local nI

       AADD(aArray, DREGISTRO)

       define window oWnd FROM 0,0 TO 24, 120 title "test" //menu oMenu

       oBrw:= txbrowse():new( oWnd )
       oBrw:nRowHeight := 25
       oBrw:nColDividerStyle    := LINESTYLE_BLACK
       oBrw:nRowDividerStyle    := LINESTYLE_BLACK


       oCol := oBrw:AddCol()
       oCol:cHeader       := "Código"
       oCol:nWidth        := 80
       oCol:bStrData      := {|| IIF( LEN( aArray ) == 0, SPACE(10), aArray[oBrw:nArrayAt, COL1] ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_LEFT
       oCol:nArrayCol     := COL1
       oCol:nEditType     := EDIT_GET
       oCol:bClrEdit      := { || {CLR_BLACK, CLR_YELLOW} }
       oCol:bEditValid    := { |oGet, oCol| ValidaCol(oGet, oCol, COL1) }
       oCol:bOnPostEdit   := { |oCol, xValue, nKey| PostEdit( oCol, xValue, nKey, COL1) }

       oCol := oBrw:AddCol()
       oCol:cHeader       := "Comentario"
       oCol:nWidth        := 320
       oCol:bStrData      := {|| IIF( LEN( aArray ) == 0, SPACE(40), aArray[oBrw:nArrayAt, COL2] ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_LEFT
       oCol:nArrayCol     := COL2
       oCol:nEditType     := EDIT_GET
       oCol:bClrEdit      := { || {CLR_BLACK, CLR_YELLOW } }
       oCol:bEditValid    := { |oGet, oCol| ValidaCol(oGet, oCol, COL2) }
       oCol:bOnPostEdit   := { |oCol, xValue, nKey| PostEdit( oCol, xValue, nKey, COL2) }

       oCol := oBrw:AddCol()
       oCol:cHeader       := "Importe"
       oCol:nWidth        := 80
       oCol:bStrData      := {|| IIF( LEN( aArray ) == 0, 0, aArray[oBrw:nArrayAt, COL3] ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_RIGHT
       oCol:nArrayCol     := COL3
       oCol:nEditType     := EDIT_GET
       oCol:bClrEdit      := { || {CLR_BLACK, CLR_YELLOW } }
       oCol:bEditValid    := { |oGet, oCol| ValidaCol(oGet, oCol, COL3) }
       oCol:bOnPostEdit   := { |oCol, xValue, nKey| PostEdit( oCol, xValue, nKey, COL3) }


       oCol := oBrw:AddCol()
       oCol:cHeader       := "Fecha 1"
       oCol:nWidth        := 80
       oCol:bStrData      := {|| IIF( LEN( aArray ) == 0, CTOD(""), aArray[oBrw:nArrayAt, COL4] ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_CENTER
       oCol:nArrayCol     := COL4
       oCol:nEditType     := EDIT_GET
       oCol:bClrEdit      := { || {CLR_BLACK, CLR_YELLOW } }
       oCol:bEditValid    := { |oGet, oCol| ValidaCol(oGet, oCol, COL4) }
       oCol:bOnPostEdit   := { |oCol, xValue, nKey| PostEdit( oCol, xValue, nKey, COL4) }

       oCol := oBrw:AddCol()
       oCol:cHeader       := "Fecha 2"
       oCol:nWidth        := 80
       oCol:bStrData      := {|| IIF( LEN( aArray ) == 0, CTOD(""), aArray[oBrw:nArrayAt, COL5] ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_CENTER
       oCol:nArrayCol     := COL5
       oCol:nEditType     := EDIT_GET
       oCol:bClrEdit      := { || {CLR_BLACK, CLR_YELLOW } }
       oCol:bEditValid    := { |oGet, oCol| ValidaCol(oGet, oCol, COL5) }
       oCol:bOnPostEdit   := { |oCol, xValue, nKey| PostEdit( oCol, xValue, nKey, COL5) }


       oBrw:bPastEof  := { || AddRow( oBrw) }
       oBrw:bKeyDown := {| nKey | If( nKey == VK_DELETE, DelRow( oBrw ), NIL ) }


       oBrw:SetArray( aArray )

       oBrw:CreateFromCode()

       oWnd:oClient := oBrw

       nAccion := DCONSU

       ACTIVATE window oWnd ON INIT oWnd:Center()


    return nil


STATIC FUNCTION PostEdit(oCol, xValue, nKey, nCol)

If nKey == VK_ESCAPE .or. nKey == 0
   If nAccion == DALTAS
      DelRow(oCol:oBrw)
      RETURN .T.
   EndIf
EndIf

oCol:Value := xValue

If nAccion == DALTAS .and. nCol == COL5
   msginfo("guardar alta")
   nAccion := DCONSU
   RETURN .T.
EndIf


If nAccion != DALTAS
   MSGINFO("GUARDAR MODIFICACION")
eNDIF

If nKey == VK_RETURN
  oCol:oBrw:GoRight()
  PostMessage( oCol, WM_CHAR, VK_RETURN)
EndIf


RETURN .T.

STATIC FUNCTION ValidaCol(oGet, oCol, nCol)
dEPURA(OgET:CtEXT)
return .t.


static function AddRow( oBrw )
   If nAccion == DALTAS
      RETURN NIL
   EndIf

   AAdd( oBrw:aArrayData, DREGISTRO )
   oBrw:GoBottom()
   oBrw:GoLeftMost()
   oBrw:Refresh()
   oBrw:SetFocus()
   nAccion := DALTAS
   PostMessage( oBrw:hWnd, WM_CHAR, VK_RETURN)
return nil

static function DelRow( oBrw, aDialogo )
   If oBrw:nLen > 0
      ADel( oBrw:aArrayData, oBrw:nArrayAt )
      ASize( oBrw:aArrayData, oBrw:nLen - 1 )
      oBrw:Refresh()
   endif
   oBrw:SetFocus()
   nAccion := DCONSU

return nil

 
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm

Re: Xbrowse con edicion automatica

Postby joseluisysturiz » Fri Jan 13, 2017 12:47 am

Intenta usando FASTEDIT, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Xbrowse con edicion automatica

Postby miarcod » Fri Jan 13, 2017 9:10 am

Gracias,

Lo que pretendo es que al finalizar la edición de una celda, se seleccione la siguiente automaticamente y entre en modo edicion sin pulsar ninguna tecla. El modo fastedit permite la edicion pero hay que actuar sobre el browse pulsando una tecla (enter, etc.) para que se inicie la edición

Un saludo
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm

Re: Xbrowse con edicion automatica

Postby joseluisysturiz » Fri Jan 13, 2017 1:56 pm

miarcod wrote:Gracias,

Lo que pretendo es que al finalizar la edición de una celda, se seleccione la siguiente automaticamente y entre en modo edicion sin pulsar ninguna tecla. El modo fastedit permite la edicion pero hay que actuar sobre el browse pulsando una tecla (enter, etc.) para que se inicie la edición

Un saludo


Aca esta como lo hago y me funciona como quieres, al llegar a la ultima celda de edicion, crea un nuevo registro y empieza en la primera columna o la que se le indique, saludos... :shock:

viewtopic.php?f=6&t=32259
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Xbrowse con edicion automatica

Postby miarcod » Fri Jan 13, 2017 8:15 pm

Gracias por responder

He intentado adaptar el ejemplo que me dices pero no consiguo lo que quiero, ni lo que me indicas, lo que hace es

Si pulso ENTER -> entro en modo edicion. Si finalizo con enter finaliza la edición y se desplaza a la siguiente celda, pero tengo que pulsar enter u otro tecla para inciar el modo edicion. Lo que pretendo es que no tenga que pulsar ese enter para entrar el modo edición de la segunda y sucesivas celdas. El desplazamiento entre celdas lo hace correctamente. Si activo fastedit no necesito pulsar enter pero tengo que pulsar una tecla. Pretendo que el browse continue en modo edición para que el usuario sepa que tiene que continuar introduciendo los datos.

Este es el ejemplo adaptado. Le he agregado la opcion de edición de las celdas.


Code: Select all  Expand view

FUNCTION Prueba3()
  Local oWnd, oBrw, oCol, aProductos

   define window oWnd FROM 0,0 TO 24, 120 title "test" //menu oMenu


       aProductos := {}
       //AADD( aProductos, { "codigo", "Descripción", 10, 20, 200 })

    // DEFINICION BROWSE
       oBrw := TXBrowse():New(oWnd )

       WITH OBJECT oBrw
          :nMarqueeStyle    := MARQSTYLE_HIGHLROW
          :nColDividerStyle := LINESTYLE_BLACK
          :lAllowColSwapping := .f.
          :lAllowColHiding := .f.
          :lColDividerComplete := .t.
          :nHeaderHeight := 30
          :l2007 := .t.
          :lFooter := .t.
          :lRecordSelector := .t.
          :lFastEdit       := .t.
          :bClrStd := {|| IF( oBrw:nArrayAt % 2 == 0, {CLR_BLACK, CLR_WHITE} ,;
             {0, RGB(203, 226, 254)} ) }
       END WITH
    //
       oCol := oBrw:AddCol()
       oCol:cHeader       := "Código"
       oCol:nWidth        := 70
       oCol:bStrData      := {|| IIF( LEN( aProductos ) == 0, SPACE(10) ,  aProductos[oBrw:nArrayAt, 1] ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_LEFT
       oCol:nEditType     := EDIT_GET
       oCol:nArrayCol := 1
    //
       oCol := oBrw:AddCol()
       oCol:cHeader       := "Descripción"
       oCol:nWidth        := 350
       oCol:bStrData      := {|| IIF( LEN( aProductos ) == 0, SPACE(10) ,;
                                  aProductos[oBrw:nArrayAt, 2] ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_LEFT
       oCol:nEditType     := EDIT_GET
       oCol:nArrayCol := 2
    //
       oCol := oBrw:AddCol()
       oCol:cHeader       := "Cantidad"
       oCol:nWidth        := 50
       oCol:bStrData      := {|| IIF( LEN( aProductos ) == 0, SPACE(10) ,;
                                  aProductos[oBrw:nArrayAt, 3] ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_RIGHT
       oCol:nEditType     := EDIT_GET
       oCol:nArrayCol := 3
    //
       oCol := oBrw:AddCol()
       oCol:cHeader       := "Precio Unitario"
       oCol:nWidth         := 100
       oCol:bStrData      := {|| IIF( LEN( aProductos ) == 0, SPACE(10) ,;
                                  TRANSF( aProductos[oBrw:nArrayAt, 4], "@E999,999.99" ) ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_RIGHT
       oCol:nEditType     := EDIT_GET
       oCol:nArrayCol := 4
    //
       oCol := oBrw:AddCol()
       oCol:cHeader       := "Sub-Total"
       oCol:nWidth         := 100
       oCol:bStrData      := {|| IIF( LEN( aProductos ) == 0, SPACE(10) ,;
                                  TRANSF( aProductos[oBrw:nArrayAt, 5], "@E999,999.99" ) ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_RIGHT
       oCol:nFooterType   := AGGR_SUM
       oCol:nFootStrAlign := AL_RIGHT
       oCol:nEditType     := EDIT_GET
       oCol:cDataType     := "N"
       oCol:cEditPicture  := "@E 9,999,999.99"
       oCol:nArrayCol := 5
    //


       oBrw:CreateFromCode()
       AADD( aProductos, { "codigo", "Descripción", 10, 20, 200 })
       oBrw:SetArray( aProductos, .t. )

       oWnd:oClient := oBrw

       //oBrw:MakeTotals(); oBrw:RefreshFooters(); oBrw:REFRESH()
      // FIN DEFINICION DEL xBROWSE CON ARRAY

      /*

    // BOTONES CUERPO DE LA FACTURA (agr,mod,eli)
       REDEFINE BUTTONBMP aBtn[2] ID 202 OF oDlg ; // AGREGAR PRODUCTOS
          ACTION ( lAgregar := .t. ,; // ACTIVO LOS GETs
             limpiaget( aVar, aGet ) ,; // INICIALIZO LAS var CUERPO FACTURA
             aGet[24]:SetFocus(), aGet[24]:REFRESH() ) ; // VA A COD.
          BITMAP 2004 PROMPT "Agregar" ;
          WHEN ( !EMPTY( aVar[33] ) )

       REDEFINE BUTTONBMP aBtn[3] ID 203 OF oDlg ; // MODIFICAR PRODUCTOS
          ACTION ( IIF( LEN( aProductos ) == 0, lSuma := .f., ) ,;
             lMODIFI := .t., modifipro( aVar, aGet, oBrw, .f. ) ) ; // ACT.LAS var CUERPO FACTURA
          BITMAP 2004 PROMPT "Modificar" ;
          WHEN lSuma .and. LEN( aProductos ) > 0

       REDEFINE BUTTONBMP aBtn[4] ID 204 OF oDlg ; // ELIMINAR PRODUCTOS
          ACTION ( IIF( LEN( aProductos ) == 0, lSuma := .f., ) ,;
             elimipro( aVar, aGet, oBrw ) ) ;
          BITMAP 2004 PROMPT "Eliminar" ;
          WHEN lSuma .and. LEN( aProductos ) > 0
    // FIN BOTONES CUERPO DE LA FACTURA (agr,mod,eli)
    */

    ACTIVATE WINDOW oWnd ON INIT oWnd:Center()
 
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm

Re: Xbrowse con edicion automatica

Postby joseluisysturiz » Fri Jan 13, 2017 8:23 pm

miarcod wrote:Gracias por responder

He intentado adaptar el ejemplo que me dices pero no consiguo lo que quiero, ni lo que me indicas, lo que hace es

Si pulso ENTER -> entro en modo edicion. Si finalizo con enter finaliza la edición y se desplaza a la siguiente celda, pero tengo que pulsar enter u otro tecla para inciar el modo edicion. Lo que pretendo es que no tenga que pulsar ese enter para entrar el modo edición de la segunda y sucesivas celdas. El desplazamiento entre celdas lo hace correctamente. Si activo fastedit no necesito pulsar enter pero tengo que pulsar una tecla. Pretendo que el browse continue en modo edición para que el usuario sepa que tiene que continuar introduciendo los datos.

Este es el ejemplo adaptado. Le he agregado la opcion de edición de las celdas.


Code: Select all  Expand view

FUNCTION Prueba3()
  Local oWnd, oBrw, oCol, aProductos

   define window oWnd FROM 0,0 TO 24, 120 title "test" //menu oMenu


       aProductos := {}
       //AADD( aProductos, { "codigo", "Descripción", 10, 20, 200 })

    // DEFINICION BROWSE
       oBrw := TXBrowse():New(oWnd )

       WITH OBJECT oBrw
          :nMarqueeStyle    := MARQSTYLE_HIGHLROW
          :nColDividerStyle := LINESTYLE_BLACK
          :lAllowColSwapping := .f.
          :lAllowColHiding := .f.
          :lColDividerComplete := .t.
          :nHeaderHeight := 30
          :l2007 := .t.
          :lFooter := .t.
          :lRecordSelector := .t.
          :lFastEdit       := .t.
          :bClrStd := {|| IF( oBrw:nArrayAt % 2 == 0, {CLR_BLACK, CLR_WHITE} ,;
             {0, RGB(203, 226, 254)} ) }
       END WITH
    //
       oCol := oBrw:AddCol()
       oCol:cHeader       := "Código"
       oCol:nWidth        := 70
       oCol:bStrData      := {|| IIF( LEN( aProductos ) == 0, SPACE(10) ,  aProductos[oBrw:nArrayAt, 1] ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_LEFT
       oCol:nEditType     := EDIT_GET
       oCol:nArrayCol := 1
    //
       oCol := oBrw:AddCol()
       oCol:cHeader       := "Descripción"
       oCol:nWidth        := 350
       oCol:bStrData      := {|| IIF( LEN( aProductos ) == 0, SPACE(10) ,;
                                  aProductos[oBrw:nArrayAt, 2] ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_LEFT
       oCol:nEditType     := EDIT_GET
       oCol:nArrayCol := 2
    //
       oCol := oBrw:AddCol()
       oCol:cHeader       := "Cantidad"
       oCol:nWidth        := 50
       oCol:bStrData      := {|| IIF( LEN( aProductos ) == 0, SPACE(10) ,;
                                  aProductos[oBrw:nArrayAt, 3] ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_RIGHT
       oCol:nEditType     := EDIT_GET
       oCol:nArrayCol := 3
    //
       oCol := oBrw:AddCol()
       oCol:cHeader       := "Precio Unitario"
       oCol:nWidth         := 100
       oCol:bStrData      := {|| IIF( LEN( aProductos ) == 0, SPACE(10) ,;
                                  TRANSF( aProductos[oBrw:nArrayAt, 4], "@E999,999.99" ) ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_RIGHT
       oCol:nEditType     := EDIT_GET
       oCol:nArrayCol := 4
    //
       oCol := oBrw:AddCol()
       oCol:cHeader       := "Sub-Total"
       oCol:nWidth         := 100
       oCol:bStrData      := {|| IIF( LEN( aProductos ) == 0, SPACE(10) ,;
                                  TRANSF( aProductos[oBrw:nArrayAt, 5], "@E999,999.99" ) ) }
       oCol:nHeadStrAlign := AL_CENTER
       oCol:nDataStrAlign := AL_RIGHT
       oCol:nFooterType   := AGGR_SUM
       oCol:nFootStrAlign := AL_RIGHT
       oCol:nEditType     := EDIT_GET
       oCol:cDataType     := "N"
       oCol:cEditPicture  := "@E 9,999,999.99"
       oCol:nArrayCol := 5
    //


       oBrw:CreateFromCode()
       AADD( aProductos, { "codigo", "Descripción", 10, 20, 200 })
       oBrw:SetArray( aProductos, .t. )

       oWnd:oClient := oBrw

       //oBrw:MakeTotals(); oBrw:RefreshFooters(); oBrw:REFRESH()
      // FIN DEFINICION DEL xBROWSE CON ARRAY

      /*

    // BOTONES CUERPO DE LA FACTURA (agr,mod,eli)
       REDEFINE BUTTONBMP aBtn[2] ID 202 OF oDlg ; // AGREGAR PRODUCTOS
          ACTION ( lAgregar := .t. ,; // ACTIVO LOS GETs
             limpiaget( aVar, aGet ) ,; // INICIALIZO LAS var CUERPO FACTURA
             aGet[24]:SetFocus(), aGet[24]:REFRESH() ) ; // VA A COD.
          BITMAP 2004 PROMPT "Agregar" ;
          WHEN ( !EMPTY( aVar[33] ) )

       REDEFINE BUTTONBMP aBtn[3] ID 203 OF oDlg ; // MODIFICAR PRODUCTOS
          ACTION ( IIF( LEN( aProductos ) == 0, lSuma := .f., ) ,;
             lMODIFI := .t., modifipro( aVar, aGet, oBrw, .f. ) ) ; // ACT.LAS var CUERPO FACTURA
          BITMAP 2004 PROMPT "Modificar" ;
          WHEN lSuma .and. LEN( aProductos ) > 0

       REDEFINE BUTTONBMP aBtn[4] ID 204 OF oDlg ; // ELIMINAR PRODUCTOS
          ACTION ( IIF( LEN( aProductos ) == 0, lSuma := .f., ) ,;
             elimipro( aVar, aGet, oBrw ) ) ;
          BITMAP 2004 PROMPT "Eliminar" ;
          WHEN lSuma .and. LEN( aProductos ) > 0
    // FIN BOTONES CUERPO DE LA FACTURA (agr,mod,eli)
    */

    ACTIVATE WINDOW oWnd ON INIT oWnd:Center()
 


Deja que revise mis codigos ya que tengo un modulo que hace lo que quieres, se que hay una opcion que usas despues del bOnPostEdit y alli le dices a que columna ir o si inserta una lnueva linea y va automaticamente a la primera columna y queda en edicion, crei era el codigo que te mande, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Xbrowse con edicion automatica

Postby miarcod » Sat Jan 14, 2017 8:07 am

gracias, quedo a la espera
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm

Re: Xbrowse con edicion automatica

Postby joseluisysturiz » Sat Jan 14, 2017 2:08 pm

miarcod wrote:gracias, quedo a la espera

Buen dia, no consegui el .prg, pero aca esta lo que te decia, espero te ayude, saludos, gracias... :shock:

viewtopic.php?f=6&t=24418&p=132045&hilit=goright#p132045

viewtopic.php?f=3&t=26233&p=144091&hilit=goright#p144091

viewtopic.php?f=3&t=27739&p=154882&hilit=goright#p154882
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Xbrowse con edicion automatica

Postby FranciscoA » Sat Jan 14, 2017 3:52 pm

Hola. Como dice Jose Luis:
Code: Select all  Expand view
  oBrw:nMarqueeStyle    := MARQSTYLE_HIGHLCELL  
   oBrw:lFastEdit := .t.    //.t.= edicion rapida, salta a sig col

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

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


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 33 guests