Page 1 of 1

AYUDA CON XBROWSE

Posted: Mon Nov 03, 2008 7:47 pm
by angstin
Saludos amigos.....

Estoy trabajando con un xbrowse pero tengo el siguiente problema al momento de editar y validar cada columna, ya que yo armo mis columnas de la siguiente manera:

@ 6,2 XBROWSE Brw1 ;
FIELDS "" ;
ALIAS (CALIAS) ;
OF oWndChild ;
LINES CELL

FOR i := 1 TO xCols
ADD COLUMN TO Brw1 DATA bro_campo TITLE bro_subtit
NEXT

Brw1:SetRDD()
Brw1:nColDividerStyle := LINESTYLE_INSET
Brw1:nRowDividerStyle := LINESTYLE_INSET
Brw1:lHScroll = .T.
Brw1:lVScroll = .T.

// aqui es donde tengo el problema...

FOR nFor:=1 TO xCols
oCol:=Brw1:aCols[nFor]
oCol:nEditType := 1
oCol:bOnPostEdit := {|o, v, n| iif( n != VK_ESCAPE, FieldPut( o:nCreationOrder, v ), ) }
NEXT

// aqui necesito validar cada una de las columnas pero si coloco el beditValid aqui no me funciona........

Posted: Mon Nov 03, 2008 8:05 pm
by angstin
............................

Posted: Mon Nov 03, 2008 8:05 pm
by angstin
Tambien tengo el siguiente problema, yo debo desde un get hacer el focus al xbrowse y entrar en modo de edicion de una vez aqui les muestro el codigo:

REDEFINE GET oGet[2] VAR xNombre ID 102 OF oDlg PICTURE "@!" UPDATE
oGet[2]:bKeyDown := {|nKey| IIF(nKey==K_ENTER.and.empty(sw),Clickx(Brw1),)}

la funcion Clickx() :

FUNCTION Clickx(Brw1)
Brw1:bPastEof = {|| Dbappend(), Brw1:refresh(), Brw1:aCols[ 1 ]:Edit() }
Brw1:SetFocus()
RETURN

pero tampoco me entra en modo de edicion de una vez.....

Anexo imagen del xbrowse:

Image

Posted: Mon Nov 03, 2008 10:37 pm
by Antonio Linares
Angstin,
// aqui es donde tengo el problema...

FOR nFor:=1 TO xCols
oCol:=Brw1:aCols[nFor]
oCol:nEditType := 1
oCol:bOnPostEdit := {|o, v, n| iif( n != VK_ESCAPE, FieldPut( o:nCreationOrder, v ), ) }
NEXT
Que problema es ? Te dá un error ? Cual ?

Posted: Mon Nov 03, 2008 10:40 pm
by Antonio Linares
Angstin,

> yo debo desde un get hacer el focus al xbrowse

Al pulsar enter, el GET debe darle el foco al browse, no es preciso que uses oGet:bKeyDown

Posted: Tue Nov 04, 2008 12:02 am
by angstin
Saludos antonio....

lo que necesito es poder editar y y validar cada columna pero si coloco el beditvalid en el FOR no me funciona yo necesito que se quede en la primera columna hasta que el valor introducido sea valido y luego pase a la siguiente columna donde la la validacion que uso verifica si el codigo que ingreso pertenece a una compañia y sino abro otra ventana donde selecciono la compañia y debo traerme ese valor para la columna en edicion.... lo intente hacer con twbrowse pero ahi mientras tengo la columna en edicion y llamo a la otra ventana mdichild no me le da el foco.....

Gracias.......

Posted: Tue Nov 04, 2008 12:10 am
by Antonio Linares
Angel,

Intenta proporcionarnos un ejemplo pequeño y autocontenido y lo usamos de ejemplo para conseguir el funcionamiento que deseas, gracias

Posted: Tue Nov 04, 2008 1:41 pm
by angstin
Antonio... ya resolvi gracias....

Posted: Tue Nov 04, 2008 6:36 pm
by Antonio Linares
Angel,

> ya resolvi gracias....

te agradecemos si nos comentas a todos como lo hicistes, así servirá para otros usuarios. Gracias! :-)

Posted: Wed Nov 05, 2008 4:29 pm
by angstin
Ok con gusto Antonio....

Resolvi una parte te explico...

Yo estoy trabajando de la siguiente manera todo en MDI-MDICHILD

Tengo mi ventana MDICHILD, Tengo dos Gets y Varios Botones desde mi Dialogo de Recurso, y le estoy incrustando un xBrowse desde codigo,

Asi defino mi ventana MDICHILD:

DEFINE WINDOW oWndChild COLOR 0, GETSYSCOLOR( 15 );
TITLE tit+" "+titulo ;
ICON "BC" MDICHILD OF bc:oWnd;
NOMAXIMIZE FROM crd_f2bal, crd_c2bal TO 0,0 pixel

asi mi Dialogo de Recurso:

DEFINE DIALOG oDlg RESOURCE "BCEDCBAL" OF bc:oWnd
oDlg:bGotFocus = { || oWndchild:SetFocus(),oget[nget]:setfocus(),.T.}


asi mi xBrowse:

@ 3,2 XBROWSE Brw1 ;
FIELDS "" ;
ALIAS (CALIAS) ;
OF oWndChild ;
LINES CELL

Brw1:aCols:= {}
FOR i := 1 TO xCols
ADD COLUMN TO XBROWSE Brw1 DATA bro_campo TITLE bro_subtit
NEXT

Brw1:SetRDD()
Brw1:nColDividerStyle := LINESTYLE_BLACK
Brw1:nRowDividerStyle := LINESTYLE_BLACK
Brw1:nMarqueeStyle := MARQSTYLE_HIGHLCELL
Brw1:lRecordSelector := .F.
Brw1:lColDividerComplete := .F.
Brw1:l2007 := .F.
Brw1:lFastEdit := .T.

brw&apl() // llamo a esta funcion para la parte de edicion del xbrowse

Brw1:CreateFromCode()

ahora Activo mi dialogo y la ventana:

ACTIVATE DIALOG oDlg NOWAIT;
ON INIT (SetParent( Brw1:hWnd,oDlg:hWnd ),SetParent( oDlg:hWnd,oWndChild:hWnd ),oGet[1]:SetFocus(), oDlg:Move( 46, 0 )) ;
VALID (oWndChild:End(),.T. )

oWndChild:bmoved = { | nRow, nCol, nFlags | savecrd1(oWndChild,"BAL") }

ACTIVATE WINDOW oWndChild ;
ON INIT (oWndChild:SetSize( oDlg:nWidth, oDlg:nHeight+61+12, .T. ),Brw1:SetSize(oDlg:nWidth-30, oDlg:nHeight-100),oGet[1]:SetFocus());
VALID (IF(oWnd#nil,(CALIAS)->(dbunlock()),[]),habbot(bot),CERRAR(CALIAS),CALIAS:=cal,odlg:=nil,.T.)

El problema que tenia aqui lo resolvi con el SetParent ya que el brow lo incrusto en el Window y no lo hago desde el dialo de recurso:
SetParent( Brw1:hWnd,oDlg:hWnd )
SetParent( oDlg:hWnd,oWndChild:hWnd )

Ok. todo hasta aqui me funciona bien...

esta es la funcion que llamo para la edicion del xbrowse

FUNCTION brwbal()
LOCAL oCol, lRetorno,xVal2
// Columna 1
oCol:=Brw1:aCols[1]
oCol:nEditType := 1
oCol:cEditPicture := "@k 9"
oCol:bClrEdit := Brw1:bClrStd
oCol:bEditValid := {| oGet, oCol | Validar1( oGet, oCol ) }
oCol:bOnPostEdit := { | oCol, xVal, nKey | DBSELECTAREA(CALIAS), IF( RecCount() == 0, ( DbAppend(), Brw1:Refresh() ),) , ;
IF( nKey == VK_RETURN, ( (CALIAS)->nivel := xVal ), ) }

//Columna 2
oCol:=Brw1:aCols[2]
oCol:nEditType := 1
oCol:cEditPicture := "XX"
oCol:bClrEdit := Brw1:bClrStd
oCol:bEditValid := {| oGet | (MsgInfo(SELECEMPRE( oGet, @xVal2 )),MsgInfo(xVal2)),.f. }
oCol:bOnPostEdit := { | oCol, xVal, nKey | IF( RecCount() == 0, ( DbAppend(), Brw1:Refresh() ),) , ;
IF( nKey == VK_RETURN, (CALIAS)->id_com := xVal , ) }

RETURN .T.

Aqui es donde tengo problema Antonio en el bEditValid de la Columna 2, yo aqui cuando entro en modo de edicion llamo a una funcion que me crea otra ventana mdichild que contiene otro browse yo aqui debo seleccionar un registro y devolverme con ese valor a la columna que tengo en edicion..
Lo que no se es como hacer para que se me mantenga esa ventana hasta que seleccione y luego devolverme a la ventana anterior donde tengo la edicion.....