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