FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour xBrowse.Posicionar en una columna determinada despues add
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
xBrowse.Posicionar en una columna determinada despues add
Posted: 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/
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: xBrowse.Posicionar en una columna determinada despues add
Posted: Tue Jun 09, 2009 01: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....

Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: xBrowse.Posicionar en una columna determinada despues add
Posted: Tue Jun 09, 2009 03: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 (fw): Select all Collapse
#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.
Saludos desde Mallorca
Biel Maim贸
http://bielsys.blogspot.com/
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: xBrowse.Posicionar en una columna determinada despues add
Posted: Tue Jun 09, 2009 05: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 (fw): Select all Collapse
聽 聽 聽 聽 聽 聽 聽 聽 聽 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 (fw): Select all Collapse
 聽 聽 聽 聽 聽 聽 聽 聽 聽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
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: xBrowse.Posicionar en una columna determinada despues add
Posted: Wed Jun 10, 2009 07: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/
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: xBrowse.Posicionar en una columna determinada despues add
Posted: Wed Jun 10, 2009 08:07 AM

Biel.

Si, con seguridad ser谩 incluida

Continue the discussion