Les adjunto parte del codigo que utilizo, cualquier ayuda es de gran valor.
聽 聽 聽 聽 聽 聽 聽 聽 oBrw := TXBrowse():New( oPanelCue )
聽 聽 聽 聽 聽 聽 聽 聽 聽*-----------------------------------------------
聽 聽 聽 聽 聽 聽 聽 聽 聽oCol := oBrw:AddCol()
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[1]:cHeader 聽 聽 聽 := "Item"
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[1]:nWidth 聽 聽 聽 聽:= 100
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[1]:cDataType 聽 聽 := "N"
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[1]:nDataStrAlign := AL_CENTER
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[1]:oDataFont 聽 聽 := hFnt["BrwFC"]
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[1]:oHeaderFont 聽 := hFnt["CabFC"]
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[1]:nHeadStrAlign := 2
聽 聽 聽 聽 聽 聽 聽 聽 聽*-----------------------------------------------
聽 聽 聽 聽 聽 聽 聽 聽 聽oCol := oBrw:AddCol()
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[2]:cHeader 聽 聽 聽 := "C贸digo"
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[2]:nWidth 聽 聽 聽 聽:= 150
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[2]:cDataType 聽 聽 := "N"
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[2]:nDataStrAlign := AL_CENTER
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[2]:oDataFont 聽 聽 := hFnt["BrwFC"]
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[2]:oHeaderFont 聽 := hFnt["CabFC"]
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[2]:nHeadStrAlign := 2
聽 聽 聽 聽 聽 聽 聽 聽 聽*-----------------------------------------------
聽 聽 聽 聽 聽 聽 聽 聽 聽oCol := oBrw:AddCol()
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[3]:cHeader 聽 聽 聽 := "Producto"
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[3]:nWidth 聽 聽 聽 聽:= 300
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[3]:cDataType 聽 聽 := "C"
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[3]:nDataStrAlign := AL_LEFT
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[3]:oDataFont 聽 聽 := hFnt["BrwFC"]
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[3]:oHeaderFont 聽 := hFnt["CabFC"]
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[3]:nHeadStrAlign := 0 聽 聽 聽 聽 // 0=Izquierda 聽 1=Derecha 聽 2=Centrado
聽 聽 聽 聽 聽 聽 聽 聽 聽*-----------------------------------------------
聽 聽 聽 聽 聽 聽 聽 聽 聽oCol:=oBrw:AddCol()
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[4]:cHeader 聽 聽 聽 := "Cantidad"
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[4]:nWidth 聽 聽 聽 聽:= 150
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[4]:cDataType 聽 聽 := "N"
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[4]:cEditPicture 聽:= "@Z 9,999.999"
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[4]:nDataStrAlign := AL_RIGHT
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[4]:oDataFont 聽 聽 := hFnt["BrwFC"]
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[4]:oHeaderFont 聽 := hFnt["CabFC"]
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[4]:nHeadStrAlign := 2 聽 聽 聽 聽 // 0=Izquierda 聽 1=Derecha 聽 2=Centrado
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[4]:nEdittype 聽 聽 := EDIT_GET
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[4]:bOnPostEdit 聽 := {|o,x,n|If(n=VK_RETURN,( oBrw:aArrayData[oBrw:nArrayAt,4]:=x,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oBrw:aArrayData[oBrw:nArrayAt,7]:=x/oBrw:aArrayData[oBrw:nArrayAt,6] ),)}
聽 聽 聽 聽 聽 聽 聽 聽 聽*-----------------------------------------------
聽 聽 聽 聽 聽 聽 聽 聽 聽oCol := oBrw:AddCol()
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[5]:cHeader 聽 聽 聽 := "Uni.de Med."
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[5]:nWidth 聽 聽 聽 聽:= 150
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[5]:cDataType 聽 聽 := "N"
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[5]:nDataStrAlign := AL_LEFT
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[5]:oDataFont 聽 聽 := hFnt["BrwFC"]
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[5]:oHeaderFont 聽 := hFnt["CabFC"]
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[5]:nHeadStrAlign := 2
聽 聽 聽 聽 聽 聽 聽 聽 聽*-----------------------------------------------
聽 聽 聽 聽 聽 聽 聽 聽 聽oCol := oBrw:AddCol()
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[6]:cHeader 聽 聽 聽 := "Kg Bolsa"
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[6]:nWidth 聽 聽 聽 聽:= 150
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[6]:cDataType 聽 聽 := "N"
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[6]:nDataStrAlign := AL_CENTER
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[6]:oDataFont 聽 聽 := hFnt["BrwFC"]
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[6]:oHeaderFont 聽 := hFnt["CabFC"]
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[6]:nHeadStrAlign := 2
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[6]:cEditPicture 聽:= "@Z 9,999.999"
聽 聽 聽 聽 聽 聽 聽 聽 聽*-----------------------------------------------
聽 聽 聽 聽 聽 聽 聽 聽 聽oCol := oBrw:AddCol()
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[7]:cHeader 聽 聽 聽 := "Bolsas"
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[7]:nWidth 聽 聽 聽 聽:= 150
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[7]:cDataType 聽 聽 := "N"
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[7]:nDataStrAlign := AL_CENTER
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[7]:oDataFont 聽 聽 := hFnt["BrwFC"]
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[7]:oHeaderFont 聽 := hFnt["CabFC"]
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[7]:nHeadStrAlign := 2
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[7]:cEditPicture 聽:= "@Z 9,999.99"
聽 聽 聽 聽 聽 聽 聽 聽 聽*-----------------------------------------------
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[1]:nHeaderType := 2 // Comienza el primer grupo
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[2]:nHeaderType := 1
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[3]:nHeaderType := 1
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[4]:nHeaderType := 1
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[5]:nHeaderType := 1
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[6]:nHeaderType := 1
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:aCols[7]:nHeaderType := 1
聽 聽 聽 聽 聽 聽 聽 聽 聽with object oBrw
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nHeaderLines 聽 聽 聽 聽:= 1 聽 聽 聽// n煤mero de l铆neas de la cabecera
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nHeaderHeight 聽 聽 聽 := 100 聽 聽// Altura cabeceras de columna
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nRowHeight 聽 聽 聽 聽 聽:= 50
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nHeader 聽 聽 聽 聽 聽 聽 := 1
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :aHeaderTop 聽 聽 聽 聽 聽:= {"I T E M 聽 D E L 聽 C O M P R O B A N T E"}
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nMarqueeStyle 聽 聽 聽 := 3//MARQSTYLE_HIGHLROW // Estilo marquesina (fila seleccionada) 0 No 1 Marquesina punteada celular 2 Solid celular 3 Resalte la celda 4 fila resaltada y Levante tel茅fono 5
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nRowDividerStyle 聽 聽:= LINESTYLE_LIGHTGRAY
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nColDividerStyle 聽 聽:= LINESTYLE_LIGHTGRAY
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :bClrSel 聽 聽 聽 聽 聽 聽 := {||{nRGB(255,255,255),nRGB(000,128,255)}}// para barra de linea selecc cuando el control no tiene el foco
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :bClrHeader 聽 聽 聽 聽 聽:= {|| { nRGB(255,255,255), nRGB( 000, 000, 000 ), } }
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nStretchCol 聽 聽 聽 聽 := STRETCHCOL_WIDEST // ajusta la ultima columna al limite derecho del browse
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :l2007 聽 聽 聽 聽 聽 聽 聽 := (.F.)
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :lAllowColHiding 聽 聽 := .F. 聽 聽 聽 聽 聽 聽 // Anulo el menu contextual al hacer click sobre el Header del browse
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :lRecordSelector 聽 聽 := .F. 聽//poner o no, COL de la flechita de la izq
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :bClrStd 聽 聽 聽 聽 聽 聽 := { || { CLR_BLACK, If(oBrw:KeyNo % 2 == 0, RGB(193,221,255), RGB(221,245,255) ) } } // colores para lineas normales
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :lHScroll 聽 聽 聽 聽 聽 聽:= .F.
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :lVScroll 聽 聽 聽 聽 聽 聽:= .F.
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :lColDividerComplete := .T. //completa pintado hasta el footer cuando lineas no llenan todo el browse
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :lFastEdit 聽 聽 聽 聽 聽 := .T.
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :SetColor( CLR_BLACK, RGB(221,245,255) )
聽 聽 聽 聽 聽 聽 聽 聽 聽END WITH
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:SetArray( aTblItem )
聽 聽 聽 聽 聽 聽 聽 聽 聽oBrw:CreateFromCode()
聽 聽 聽 聽 聽 聽 聽 聽 聽oPanelCue:oClient := oBrw
聽 聽 聽 聽 聽 聽 聽 聽 聽WITH OBJECT oBrw
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :bChange 聽 聽:= { || oBrw:Refresh() }
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nTop 聽 聽 聽 := 0
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nLeft 聽 聽 聽:= 0
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nWidth 聽 聽 := nAnchoPan
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nHeight 聽 聽:= nAltoPan-320
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :aCols[1]:bStrData 聽 聽 聽:= {||If( Len( oBrw:aArrayData ) > 0, oBrw:aArrayData[ oBrw:nArrayAt, 1 ], "" )}
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :aCols[2]:bStrData 聽 聽 聽:= {||If( Len( oBrw:aArrayData ) > 0, oBrw:aArrayData[ oBrw:nArrayAt, 2 ], "" )}
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :aCols[3]:bStrData 聽 聽 聽:= {||If( Len( oBrw:aArrayData ) > 0, oBrw:aArrayData[ oBrw:nArrayAt, 3 ], "" )}
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :aCols[4]:bStrData 聽 聽 聽:= {||If( Len( oBrw:aArrayData ) > 0, oBrw:aArrayData[ oBrw:nArrayAt, 4 ], "" )}
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :aCols[5]:bStrData 聽 聽 聽:= {||If( Len( oBrw:aArrayData ) > 0, aUnidadMedida[oBrw:aArrayData[ oBrw:nArrayAt, 5 ]], 0 )}
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :aCols[6]:bStrData 聽 聽 聽:= {||If( oBrw:aArrayData[ oBrw:nArrayAt, 6 ] <> 0, oBrw:aArrayData[ oBrw:nArrayAt, 6 ], 0 )}
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :aCols[7]:bStrData 聽 聽 聽:= {||If( oBrw:aArrayData[ oBrw:nArrayAt, 6 ] <> 0, oBrw:aArrayData[ oBrw:nArrayAt, 4 ]/oBrw:aArrayData[ oBrw:nArrayAt, 6 ], 0 )}
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :bKeyDown 聽 := { |nKey| ( IF(nKey==VK_INSERT,(InsertaItems(oWndChild,oBrw,@aTblItem,lCpteNew),oBrw:SetArray(aTblItem)),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 IF(nKey==VK_DELETE,EliminaItems(oBrw,lCpteNew),)),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oBrw:SetFocus() ) }
聽 聽 聽 聽 聽 聽 聽 聽 聽END
聽 聽 聽 聽 聽 聽 聽 聽 聽*----------------------------------------------------------
聽 聽 聽 聽 聽 聽 聽 聽 hLays["H4"]:aVLayout[1]:oClient := oPanelCue
****************************************************************************
*
FUNCTION InsertaItems(oWndChild,oBrw,aTblItem,lCpteNew)
聽 聽 聽 聽 聽LOCAL hArt := Hash()
聽 聽 聽 聽 聽IF !lCpteNew
聽 聽 聽 聽 聽 聽 RETURN NIL
聽 聽 聽 聽 聽ENDIF
聽 聽 聽 聽 聽BuscarArticulos(oWndChild,@hArt)
聽 聽 聽 聽 聽IF EMPTY(hArt["cNomArt"])
聽 聽 聽 聽 聽 聽 RETURN NIL
聽 聽 聽 聽 聽ENDIF
聽 聽 聽 聽 聽AAdd( aTblItem, { LEN(aTblItem)+1,; 聽 聽 聽// 1-
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽hArt["cCodigo"],; 聽 聽 聽// 2-
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽hArt["cNomArt"],; 聽 聽 聽// 3-Nombre del Articulo
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽1,; 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽// 4-Cantidad
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽hArt["nUniMed"],; 聽 聽 聽// 5-
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽hArt["KgBolsa"],; 聽 聽 聽// 6-
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽1/hArt["KgBolsa"],; 聽 聽// 7-
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽"COMUN",; 聽 聽 聽 聽 聽 聽 聽// 8-Tipo de Remito
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽hArt["IdArticulo"],; 聽 // 9-Id_Articulo
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽hArt["IdRubro"],; 聽 聽 聽// 10-IdRubro
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽hArt["IdSubRubro"],; 聽 // 11-IdSubRubro
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽"" } )
聽 聽 聽 聽 聽oBrw:Refresh()
RETURN NIL
*
****************************************************************************Saludos
Marcelo