xBrowse.Posicionar en una columna determinada despues add

xBrowse.Posicionar en una columna determinada despues add

Postby Biel EA6DD » Tue Jun 09, 2009 11:10 am

Tengo un xBrowse con lFastEdit a .t., deseo que se vayan añadiendo registros despues de editar la última columna, o bien si pulsan flecha abajo, y además quiero que la siguiente fila inicie la edición en la tercerla columna editable, ya que las dos anteriores tienen valores que casi nunca cambian.

Con la versión 0904 lo hacia mediante el codeblock bPastEof, añadia el registro en la tabla, y posicionaba en la columna deseada usando oBrw:Setos().

Con la verión 0905, esto ha dejado de funcionar, creo que motivado por los cambios introducidos en el método GoNextCtrl(). He itentado buscar otro punto donde variar la primera columna a editar, pero no lo he encontrado, seguro que habra alguna forma facil de hacerlo, pero ahora no doy con ella (todo lo que se me ocurre pasa por modificar la calse, cosa que quiseiera evitar). Help.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: xBrowse.Posicionar en una columna determinada despues add

Postby Daniel Garcia-Gil » Tue Jun 09, 2009 1:58 pm

Saludos Biel...

Podrias colocar un ejemplo que este funcinando en la version 904, por favor, con respecto al punto que estas exponiendo...

Gracias....
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: xBrowse.Posicionar en una columna determinada despues add

Postby Biel EA6DD » Tue Jun 09, 2009 3:10 pm

Hola Daniel,
aqui va un ejemplo autocontenido. Me ha costado un poco el sacarlo de dentro de la aplicación, pero bueno, así podras compilarlo y probarlo sin problema.
Code: Select all  Expand view  RUN
#include "FiveWin.ch"
#include "xBrowse.ch"
#include "EXStruc.ch"
FUNCTION Main()
   LOCAL oWnd, oBrw,oCol,oDef
   LOCAL aNomBan:={'50mhz','144 mhz','432mhz'},aCodBan:={'6M','2M','70CM'}
   LOCAL aNomMod:={'SSB','PKT','CLO','PAC2'},aCodMod:={'SSB','Packet','Clover','Pactor II'}
   STRUC oDef
      MEMBER dFecha    AS Date      INIT Date()
      MEMBER cProPMode AS CHARACTER INIT 'ES'
      MEMBER cOperator AS CHARACTER INIT 'EA6DD'
      MEMBER cQra      AS CHARACTER INIT 'JM19JK'
      MEMBER cMode     AS CHARACTER INIT 'SSB' SIZE 6
      MEMBER cBand     AS CHARACTER INIT '2M'  SIZE 6
   END STRUC

   DEFINE WINDOW oWnd

   DBCreate('Fast', {{ "BAND"      , "C",     6,    0 },;
                      { "CALL"      , "C",    12,    0 },;
                      { "COMMENT"   , "C",    30,    0 },;
                      { "GRIDSQUARE", "C",     6,    0 },;
                      { "MODE"      , "C",     6,    0 },;
                      { "TIMEON"    , "C",     5,    0 },;
                      { "OPERATOR"  , "C",    15,    0 },;
                      { "PROPMODE"  , "C",     2,    0 },;
                      { "QSODATE"   , "D",     8,    0 },;
                      { "QRA"       , "C",     6,    0 } })
   DBUseArea(.T.,,'fast','fast',.F.,.F.)
   oBrw := TxBrowse():New(oWnd)
   WITH OBJECT oBrw
      :nMarqueeStyle       := MARQSTYLE_HIGHLCELL
      :nColDividerStyle    := 4
      :nRowDividerStyle    := 4
      :lColDividerComplete := .T.
      :nHeaderLines        := 2
      :nDataLines          := 1
      :nFreeze             := 5
      :lFastEdit           :=.T.
      :bPastEof            := {||EsAddRec(oDef,oBrw,oCol)}
   END
   ADD TO oBrw DATA Fast->QsoDate    TITLE 'Fecha'
   ADD TO oBrw DATA Fast->TimeOn     TITLE 'Hora'
   ADD TO oBrw DATA Fast->Band       TITLE 'Banda'
   oCol:=ATail(oBrw:aCols)
   oCol:nEditType     := EDIT_LISTBOX
   oCol:aEditListTxt  := aNomBan
   oCol:aEditListBound:= aCodBan
   oCol:bOnPostEdit   := {|o,v,n| Fast->Band:=v }
   ADD TO oBrw DATA Fast->Mode       TITLE 'Modo'
   oCol:=ATail(oBrw:aCols)
   oCol:nEditType     := EDIT_LISTBOX
   oCol:aEditListTxt  := aNomMod
   oCol:aEditListBound:= aCodMod
   oCol:bOnPostEdit   := {|o,v,n| Fast->Mode:=v }
   ADD TO oBrw DATA Fast->Call       TITLE 'Indicativo' EDITABLE ON EDIT {|o,v,n| Fast->Call:=v }       PICTURE "@!"
   oCol:=ATail(oBrw:aCols)
   ADD TO oBrw DATA Fast->GridSquare TITLE 'Locator'    EDITABLE ON EDIT {|o,v,n| Fast->GridSquare:=v } PICTURE "!!99!!"
   ADD TO oBrw DATA Fast->Comment    TITLE 'Notas'      EDITABLE ON EDIT {|o,v,n| Fast->Comment:=v }
   //--
   oBrw:SetRdd()
   oBrw:CreateFromCode()
   oWnd:oClient:=oBrw
   ACTIVATE WINDOW oWnd ON INIT EsAddRec(oDef,oBrw,oCol)
RETURN NIL
//---------------------------------------
STATIC FUNCTION EsAddRec(oDef,oBrw,oCol)
   IF Empty(Fast->TimeOn)
      Fast->TimeOn:=Time()
   ENDIF
   Fast->(DBAppend())
   Fast->QsoDate :=oDef:dFecha
   Fast->Operator:=oDef:cOperator
   Fast->Qra     :=oDef:cQra
   Fast->PropMode:=oDef:cPropMode
   Fast->Band    :=oDef:cBand
   Fast->Mode    :=oDef:cMode
   oBrw:Refresh()
   oBrw:SetPos(,oBrw:ColPos(oCol))
*   oBrw:nColSel:=5 //Tambien funciona
RETURN NIL

Con FW0904 al pulsar intro en el último campo (notas), añade un nuevo registro y se posiciona en la columna indicativo.
Con FW0905 hace lo mismo que la anterior, pero se posiciona en la primera columa editable(banda).Este comportamiento no digo que sea erroneo, solo que necesito alguna manera para conseguir posicionarlo sobre indicativo.
Last edited by Biel EA6DD on Thu Jul 30, 2009 5:14 pm, edited 1 time in total.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: xBrowse.Posicionar en una columna determinada despues add

Postby Daniel Garcia-Gil » Tue Jun 09, 2009 5:14 pm

Saludo Biel...

Ciertamente hubo unos cambios de posicion en unas lineas del metodo GoNextCtrl().

Te dejo las lineas que cambian

Cambia esto:
Code: Select all  Expand view  RUN

                  elseif ::KeyNo() < ::nLen .or. ::lAutoAppend
                     ::Select( 0 )
                     ::GoDown()
                     ::Select( 1 )

                     ::GoLeftMost()
                     nNextPos := AScan( ::aDisplay, { |i| ::aCols[ i ]:nEditType > 0 } )
                     if nNextPos > 1
                        if ::IsDisplayPosVisible( nNextPos, .t. )
                           ::nColSel   := nNextPos
                           ::DrawLine( .t. )
                        else
                           for n := 2 to nNextPos
                              ::GoRight()
                           next
                        endif
                     endif
 


Por Esto:

Code: Select all  Expand view  RUN
                 else
                     ::GoLeftMost()
                     nNextPos := AScan( ::aDisplay, { |i| ::aCols[ i ]:nEditType > 0 } )
                     if nNextPos > 1
                        if ::IsDisplayPosVisible( nNextPos, .t. )
                           ::nColSel   := nNextPos
                           ::DrawLine( .t. )
                        else
                           for n := 2 to nNextPos
                              ::GoRight()
                           next
                        endif
                     endif
                     if ::lAutoAppend .or. ::nDataRows > ::nRowSel
                        if !( ::bPastEof == NIL .and. ::KeyNo() == ::nLen )
                           ::Select( 0 )
                           ::GoDown()
                           ::Select( 1 )
                        endif
                     endif
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: xBrowse.Posicionar en una columna determinada despues add

Postby Biel EA6DD » Wed Jun 10, 2009 7:45 am

Perfecto Daniel, muchas graicas.

Esta modificación se incluira en lasiguiente versión?, es para no tener que ir modificando cada version el fuente de xbrowse.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: xBrowse.Posicionar en una columna determinada despues add

Postby Daniel Garcia-Gil » Wed Jun 10, 2009 8:07 am

Biel.

Si, con seguridad será incluida
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: Google [Bot], jmartial and 73 guests