Page 1 of 1

xBrowse - Editar celda por codigo (SOLUCIONADO)

Posted: Mon Oct 21, 2013 3:27 pm
by MarioG
Estimados
Tengo un xbrowse con 2 celdas editables. He asignado :nMoveType:= MOVE_RIGHT
Lo que pretendo es que luego de validar lo ingresado en la celda 1, y luego de pasar a la celda 2, inmediatamente a su derecha, la edite sin necesidad de que el operador pusle <Intro/Enter>.
Lo que yo hice es:

Code: Select all

   WITH OBJECT ::oBrwCom:aCols[_Cantidad]
      :nEditType   := EDIT_GET
      :bOnPostEdit := {|o, nCant, nK| if( nK != VK_ESCAPE, ( if( !Empty( ::aArtCompra[::oBrwCom:nArrayAt][_CodArt] ), ;
                                                                 ( ::aArtCompra[::oBrwCom:nArrayAt][_Cantidad]:= nCant, ::Totaliza() ), msgBeep() ), ;
                                                             ::oBrwCom:Refresh(), ;
                                                             Eval( ::oBrwCom:aCols[_PrcCom], VK_RETURN ) ), ) }
   END
   WITH OBJECT ::oBrwCom:aCols[_PrcCom]
      :cHeader:= "Prc.Unit"
      :nEditType   := EDIT_GET
      :bOnPostEdit := {|o, nPrcUVta, nK| if( nK != VK_ESCAPE, ( if( !Empty( ::aArtCompra[::oBrwCom:nArrayAt][_CodArt] ), ;
                                                                    ( ::aArtCompra[::oBrwCom:nArrayAt][_PrcVta]:= nPrcUVta, ::Totaliza() ), msgBeep() ), ;
                                                                ::oBrwCom:Refresh()  ), ) }
   END
 
Evidentemente no es lo que corresponde, ya que ejecuta ::Totaliza y este me da error por tener un campo nil en una multiplicación.
Se puede?, como?
gracias

Re: xBrowse - Editar celda por codigo

Posted: Tue Oct 22, 2013 12:19 pm
by MarioG
:idea: ...

Re: xBrowse - Editar celda por codigo

Posted: Tue Oct 22, 2013 12:48 pm
by TecniSoftware
Mario

En mi opinion no estoy seguro que se pueda hacer que la celda de la derecha entre en edicion sin pulsar enter, calculo que porque lo estas llamando de otra celda y otro bOnPostEdit, intenté hacerlo pero no lo logro, probe agregando un oBrw:KeyChar( VK_RETURN ) al final del bOnPostEdit de la primer celda pero no hace lo que corresponde.

Saludos

Re: xBrowse - Editar celda por codigo

Posted: Tue Oct 22, 2013 2:29 pm
by MarioG
Alejandro;
Muchas gracias por ocuparte. A veces los clientes piden demasiado :)

Re: xBrowse - Editar celda por codigo

Posted: Tue Oct 22, 2013 5:55 pm
by FranciscoA
Lo que pretendo es que luego de validar lo ingresado en la celda 1, y luego de pasar a la celda 2, inmediatamente a su derecha, la edite sin necesidad de que el operador pusle <Intro/Enter>.
Hola Mario, mira si utilizando alguna de estas instrucciones se te coloca en modo edicion
oBrw:aCols[ n ]:Edit()
oBrw:SelectedCol():Edit()

Saludos.

Re: xBrowse - Editar celda por codigo

Posted: Wed Oct 23, 2013 4:13 am
by MarioG
Francisco;
gracias por tu interés. Ninguna de las opciones edita el campo

Re: xBrowse - Editar celda por codigo

Posted: Wed Oct 23, 2013 3:42 pm
by Hector Pedro Lerda
Mario

No se si será lo que buscas, pero para entrar en edición un campo sin pulsar enter el xbrowse trae FASTEDIT que hace la edición con solo escribir sobre él como si fuera una celda de excel.

Saludos y espero sea eso lo que buscas

Re: xBrowse - Editar celda por codigo

Posted: Wed Oct 23, 2013 3:49 pm
by nageswaragunupudi
Mr MarioG

I am not sure if I understood your requirement. But this sample of Invoice might give some hints on calculations in Xbrowse.

Please compile and run the program as it is

Code: Select all

#include "FiveWin.Ch"
#include "xbrowse.ch"

function Invoice()

   local oDlg, oFont, oBrw
   local aInvoice    := { { 0, 0, 0 } }
   local aPriceTable := { 120, 234, 323, 456, 532, 619, 758, 821, 945 }
   local aBlank      := { 0, 0, 0 }

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg SIZE 600,400 PIXEL TITLE "INVOICE" FONT oFont
   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      DATASOURCE aInvoice ;
      COLUMNS 1, 1, 2, 3 ;
      HEADERS "CODE", "ITEM", "QUANTITY", "PRICE" ;
      PICTURES "9", nil, "99999.999", "999.99" ;
      COLSIZES nil, 120 ;
      CELL LINES FOOTERS NOBORDER FASTEDIT

   oBrw:Item:bEditValue       := { || If( oBrw:Code:Value > 0, "Item Num " + StrZero( oBrw:Code:Value, 4 ), "" ) }
   oBrw:AMOUNT                := { || oBrw:Quantity:Value * oBrw:Price:Value }
   oBrw:Amount:cEditPicture   := "999,999,999.99"
   oBrw:nEditTypes            := { EDIT_GET, EDIT_NONE, EDIT_GET, EDIT_GET, EDIT_NONE }

   WITH OBJECT oBrw:Code
      :bEditValid             := { |oGet| oGet:VarGet() > 0 }
      :bOnChange              := { |oCol| oBrw:aRow[ 3 ] := aPriceTable[ oCol:Value ] }
      :bFooter                := { || oBrw:nLen }
   END
   WITH OBJECT oBrw:Quantity
      :bEditWhen        := { || ! Empty( oBrw:Code:Value ) }
      :bOnChange        := { || oBrw:MakeTotals( oBrw:oCol( "Amount" ) ), oBrw:RefreshFooters() }
      :bEditValid       := { |oGet| oGet:VarGet() > 0 }
      :nFooterType      := AGGR_SUM
   END

   WITH OBJECT oBrw:Price
      :bEditWhen        := { || ! Empty( oBrw:Code:Value ) .and. ! Empty( oBrw:Quantity:Value ) }
      :bOnChange        := { || oBrw:MakeTotals( oBrw:oCol( "Amount" ) ), oBrw:RefreshFooters() }
      :bEditValid       := { |oGet| oGet:VarGet() > 0 }
   END

   oBrw:Amount:nFooterType := AGGR_SUM

   WITH OBJECT oBrw
      :nStretchCol      := STRETCHCOL_WIDEST

      :bPastEof         := { || If( Empty( oBrw:Amount:Value ), nil, ;
                                  ( AAdd( oBrw:aArrayData, AClone( aBlank ) ), ;
                                    oBrw:GoDown(), oBrw:GoLeftMost(), oBrw:Refresh() ) ) }

      :bChange          := { || If( oBrw:nArrayAt < Len( oBrw:aArrayData ) .and. ;
                                    ATail( oBrw:aArrayData )[ 2 ] == 0, ;
                                  ( ASize( oBrw:aArrayData, Len( oBrw:aArrayData ) - 1  ), ;
                                    oBrw:Refresh() ), ;
                                  nil ) }
      //
      :CreateFromCode()
   END

   ACTIVATE DIALOG oDlg CENTERED ;
      ON INIT ( oBrw:SetFocus(), .f. )
   RELEASE FONT oFont

   if ATail( aInvoice )[ 2 ] == 0
      ASize( aInvoice, Len( aInvoice ) - 1 )
   endif

   xbrowser aInvoice title "Edited Invoice" setup ( oBrw:cHeaders := { "Code", "Qty", "Price" } )

return nil
 
Image

Re: xBrowse - Editar celda por codigo (SOLUCIONADO)

Posted: Wed Oct 23, 2013 10:03 pm
by MarioG
Hector Pedro Lerda wrote:Mario

No se si será lo que buscas, pero para entrar en edición un campo sin pulsar enter el xbrowse trae FASTEDIT que hace la edición con solo escribir sobre él como si fuera una celda de excel.

Saludos y espero sea eso lo que buscas
Pedro;
Es lo que estaba buscando!

muchas gracias

Re: xBrowse - Editar celda por codigo

Posted: Wed Oct 23, 2013 10:05 pm
by MarioG
nageswaragunupudi wrote:Mr MarioG
I am not sure if I understood your requirement. But this sample of Invoice might give some hints on calculations in Xbrowse.
Mr. Rao, I'm very pleased with your sample; but is not my problem.
Mr. Lerda, given me the correct solution. I needed FASTEDIT!.
Mr. Rao, many thanks for your time and the sample
(sorry for my english, I use google trans.)