Page 1 of 1

Aqui Un Ejemplo funcional para xbrowse

Posted: Thu Oct 23, 2008 6:06 am
by FranciscoA
Amigos, aquí está el código ejemplo de una función para edición contable de un comprobante de diario. Fácilmente puede ser pasado a código para facturación.

Es una manera de hacer público mi agradecimiento por toda la ayuda que he recibido de este grandioso foro.

Agradeceré cualquier comentacio o mejora al código.
Espero que les sea de utilidad.

ImageImage

/*
Ejemplo de TXbrowse para edicion de comprobantes de diario.
Francisco Alegría P., Octubre 22/2008

1- Edicion automatica (lFastEdit = .t.)
2- Validacion de celdas (en este caso, cta y scta).
3- Salto sobre la celda cuando ésta no es editable (con tecla return)
Si la celda proxima no es editable, salta sobre ella a la siguiente.
4- Columnas de Debitos y Creditos:
Si debitos tiene valor, creditos no es editable y viceversa.
5- Cuando se edita la ultima columna, agrega nueva fila y se va a la primer columna.
6- Navegacion con las teclas direccionales, manteniendo el estado de edición.
7- Si se oprima flecha abajo en cualquier columna, y es la ultima fila del browse,
agrega un nuevo registro y se traslada a la primer columna en modo de edicion.
Si se oprime Escape, elimina el registro recien agregado, si este estaba vacio.
8- Para eliminar un registro con valor, se utiliza la tecla delete y presenta dialog para confirmar.
9- Edicion de cualquier columna editable sin necesidad de oprimir enter.
10 Totales y otros textos en footer
11- No admite salvar el registro si no validan .t., las funciones lCtaOK() y lDebHabOK()


Para accionar el salto sobre columna no editable, utilizar este codigo:
Introducirlo en la parte final del metodo function EditGetkeyDown( Self, nKey ),
o usarlo como parte del programa.
Local nNextCol
...
...
nNextCol := ::oBrw:nColSel + 1 // FranciscoA Sept/23/2008
if ::oBrw:aCols[nNextCol]:nEditType == 0 //Si prox col no es editable...
if nNextCol < Len(::oBrw:aCols) //Si no es la ult columna, salta a sig editable
::oBrw:nColSel := nNextCol + 1
::oBrw:Refresh()
endif
endif
*/

Code: Select all

#include "FiveWin.ch"
#include "InKey.ch"
#include "xbrowse.ch"

//----------------------------
Function CDiario()
local oWnd, oBrw, oCol, cAlias
local n:=0
local nTotal1:=0, nTotal2:=0


DbUseArea(.T.,,"Datos","Datos",.F.)
cAlias:=Alias()

dbSelectArea(cAlias)

   DEFINE WINDOW oWnd TITLE "EDITAR COMPROBANTE DE DIARIO" ;
          FROM 0,0 TO 600,900 PIXEL ;
          COLOR nRGB(247, 243, 232), nRGB(228, 213, 184)

   oBrw := TXBrowse():New( oWnd )
   oBrw:cAlias := cAlias 

   oBrw:nColDividerStyle     := LINESTYLE_INSET
   oBrw:nRowDividerStyle     := LINESTYLE_INSET
   oBrw:lColDividerComplete  := .t.    //completa pintado sobre el footer cuando lineas no llenan todo el browse

   oBrw:nHeaderHeight        := 30   //Altura cabeceras de col
   oBrw:lFooter              := .t.  //Que tendrá footer 
   oBrw:nFooterLines         := 1    //Lineas del footer 
   oBrw:nFooterHeight        := 24   //Altura del  Footer
   oBrw:lRecordSelector      := .t.  //poner o no, COL de la flechita de la izq


   oBrw:bClrHeader    := {|| { nRGB(140,  0,  0), nRGB(229,0,0) } }  // VERDECITO
   oBrw:bClrFooter    := oBrw:bClrHeader
   oBrw:bClrStd       := {|| { nRGB(  0,  0,  0), nRGB(255,248,220) } }  // colores para lineas normales
   oBrw:bClrSel       := {|| { nRGB(255,255,255), nRGB(241,222,088) } }  // para barra de linea selecc cuando el control no tiene el foco
   oBrw:bClrSelFocus  := {|| { nRGB(  0,  0,  0), nRGB(248,195, 34) } }  // para barra de linea selecc cuando el control tiene el foco

   oBrw:nMarqueeStyle    := MARQSTYLE_HIGHLCELL  //solo ilumina la celda actual

   oBrw:nRowHeight   := 20  //altura entre lineas

   oBrw:lFastEdit := .t. 

   oBrw:bPastEof = {|| if( lCtaOK(oBrw) .and. lDebHabOK((cAlias)->debe+(cAlias)->haber) ,;
                           (Dbappend(), oBrw:GoLeftMost(), oBrw:Refresh(), oBrw:aCols[ 1 ]:Edit() ),) }  //agrega registro y "oprime" enter


   //Aqui uso DbPack() porque es una dbf pequeña y temporal. En grandes usar function de mantenimiento.
   oCol = oBrw:AddCol() 
   oCol:bStrData = { || (cAlias)->cta } 
   oCol:cHeader = "CTA" 
   oCol:nEditType = EDIT_GET 
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, ( DbAppend(), oBrw:Refresh() ),) ,;
                        If( nKey == VK_RETURN, (cAlias)->Cta := xVal, ) ,;
                        If( nKey == VK_ESCAPE .and. Empty((cAlias)->Cta), ( (cAlias)->(dbDelete()),(cAlias)->(__dbPack()),(cAlias)->(dbGoBottom()),oBrw:Refresh() ), ) } 

   oCol = oBrw:AddCol() 
   oCol:bStrData = { || (cAlias)->Scta } 
   oCol:cHeader = "SC4" 
   oCol:nEditType = EDIT_GET
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, ( DbAppend(), oBrw:Refresh() ),) ,;
                        If( nKey == VK_RETURN, if(lCtaOK(oBrw),(cAlias)->Scta := xVal, oBrw:GoLeftMost()),) } 


   oCol = oBrw:AddCol() 
   oCol:bStrData = { || (cAlias)->NOMBRE } 
   oCol:cHeader = "DESCRIPCION DE LA CUENTA" 
   oCol:cFooter = "BALANCE --->  "
   oCol:nFootStrAlign := 1
   oCol:nEditType = 0   //no editable

   oCol = oBrw:AddCol() 
   oCol:bStrData = { || Transform((cAlias)->DEBE,"9,999,999,999.99") } 
   oCol:nDataStrAlign := 1   //alineado a la derecha
   oCol:cHeader = "DEBITOS" 
   oCol:nEditType = EDIT_GET 
   oCol:lTotal := .t.    //para totalizar cols a report y/o excel
   oCol:bFooter  =  {|| TRANSFORM(nTotal1,"9,999,999,999.99") }
   oCol:nFootStrAlign := 1
   oCol:bEditWhen := {|| (cAlias)->Haber =0 }
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, ( DbAppend(), oBrw:Refresh() ),),;
                        If( nKey == VK_RETURN,;
                        if(lCtaOK(oBrw),( nTotal1+=(Val(xVal)-(cAlias)->DEBE), oCol:RefreshFooter(), (cAlias)->DEBE := Val(xVal) ), oBrw:GoLeftMost()) ,) } 

   oCol = oBrw:AddCol() 
   oCol:bStrData = { || Transform((cAlias)->HABER,"9,999,999,999.99") } 
   oCol:nDataStrAlign := 1
   oCol:cHeader = "CREDITOS" 
   oCol:nEditType = EDIT_GET
   oCol:lTotal := .t.    //para totalizar cols a report y/o excel
   oCol:bFooter  =  {|| TRANSFORM(nTotal2,"9,999,999,999.99") }
   oCol:nFootStrAlign := 1
   oCol:bEditWhen := {|| (cAlias)->Debe =0 }
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, ( DbAppend(), oBrw:Refresh() ),),;
                        If( nKey == VK_RETURN,;
                        if(lCtaOK(oBrw), ( nTotal2+=(Val(xVal)-(cAlias)->HABER), oCol:RefreshFooter(), (cAlias)->HABER := Val(xVal) ), oBrw:GoLeftMost()) ,) } 


   oCol = oBrw:AddCol() 
   oCol:bStrData = { || (cAlias)->CONCEPTO } 
   oCol:cHeader = "CONCEPTO" 
   oCol:nEditType = EDIT_GET 
   //Es la ultima columna, agrega nuevo registro en blanco y se va a primer columna,
   //solo si la cta y/o valores están OK
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
                        If( nKey == VK_RETURN, (cAlias)->CONCEPTO := xVal ,) ,;
                        if( !lCtaOK(oBrw),(oBrw:GoLeftMost(), oBrw:Refresh()),;
                            if ( (cAlias)->(Recno())==(cAlias)->(Reccount()) .and. lDebHabOK((cAlias)->debe+(cAlias)->haber), (DbAppend(), oBrw:GoLeftMost(), oBrw:Refresh()),) ) } 


   oBrw:SetRDD()
   oBrw:CreateFromCode()

   oBrw:bKeyDown :={ | nKey | Teclas(nKey, oBrw, cAlias) }

   oWnd:oClient := oBrw

   ACTIVATE WINDOW oWnd ;
      ON INIT oBrw:SetFocus() 

RETURN NIL

//--------------------
Function Teclas(nKey, oBrw, cAlias)
Do Case
   Case nKey == VK_DELETE
       if MsgNoYes("¿Está seguro(a) de borrar este registro?","Borrar registro de "+cAlias)
          (cAlias)->(dbDelete())
          (cAlias)->(dbPack())
           oBrw:GoBottom()
           oBrw:Refresh()
       endif
EndCase
Return nil

//----------------//
Function lCtaOK(oBrw)
//tu codigo de validacion
(oBrw:cAlias)->nombre := "Nombre de la Cuenta, si existe..."
 oBrw:Refresh()
Return .t.

//----------------------------//No permitir registro sin valores
Function lDebHabOK(nValor)
if nValor = 0
   MsgStop("Omision de Valores","Alto")
   return .f.
endif
Return .t.


//ESTAS FUNCIONES SON PARA COLORES PERSONALIZADOS DEL XBROWSE YA PUBLICADAS
//No son necesarias a menos que quieras emplear las classes modificadas.

//-------------------COLOR BUTTONBAR
Function ClrMsgBar()
Return {nRGB(255,228,150),nRGB(167,128,0)}

//-------------------COLOR HEARDERS DEL TXBROWSE
Function ClrHeader()
Return { nRGB(255,248,220), nRGB(157, 138,0) }   //VERDECITO

//-------------------COLOR FOOTER DEL TXBROWSE
Function ClrFooter()
Return { nRGB(255,248,220), nRGB(157, 138,0) }   //VERDECITO
 
Lo probé antes de subirlo y me funciona bien.

Saludos

Francisco J. Alegría P[/img][/url]

Re: Aqui Un Ejemplo funcional para xbrowse

Posted: Thu Oct 23, 2008 3:42 pm
by FranciscoA
Para las funciones descritas, puedes buscar asi:
No encuentro las mejoras hechas a xbrowse por franciscoA ??

Re: Aqui Un Ejemplo funcional para xbrowse

Posted: Tue Mar 03, 2009 8:24 pm
by QAZWSX2K
SALUDOS FRANCISCO

He tratado de ejecutar tu ejemplo pero me he encontrado algunos problemitas que son:

1.- no tengo la tabla, lo cual no es grave pq se puede ir creando a medida que de errores de base de datos, etc
2.- me da errores lo siguiente:
oCol:lTotal := .t. //para totalizar cols a report y/o excel
oCol:bFooter = {|| TRANSFORM(nTotal2,"9,999,999,999.99") }
o:nFootStrAlign := 1
oCol:bEditWhen := {|| DBTEST:Debe =0 }
oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, ( DbAppend(), oBrw:Refresh() ),),;

lo que me hace pensar que no tengo la misma version de xbrowse y tras ponerlas todas en comentarios solo a la final, veo la ventana vacia, bueno precisamente esoty trabajando en esto y no se si seria mucho pedirte enviaras las dbf y el xbrowse que tu usas

yo uso fw74 para xharbour no se si afectara, bueno si puedo hacer arrancar tu programa y le logro hacer algo adicional con gusto te informare, buenom cualquier cosa me escribes a mi privado, gracias de antemanos y estamos a la orden aqui en venezuela tanbien

Re: Aqui Un Ejemplo funcional para xbrowse

Posted: Tue Mar 03, 2009 10:27 pm
by FranciscoA
Alex, revisa tu correo.

Re: Aqui Un Ejemplo funcional para xbrowse

Posted: Wed Mar 04, 2009 7:17 pm
by QAZWSX2K
GRACIAS FRANCISCO, te cuento que no ha llegado nada, revisa si se devolvio o si podrias volver a intentar, gracias nuevamente y disculpa

Re: Aqui Un Ejemplo funcional para xbrowse

Posted: Thu Jan 13, 2011 4:34 pm
by Compuin
Hola,

Podrias enviarme el mismo DBF y codigo a mi tambien? MI email es wbguerrero@gmail.com Aun no he podido lograr compilar ningun browser de los samples de fwh. Todos me dan error

A la espera de tu email y gracias de antemano

Re: Aqui Un Ejemplo funcional para xbrowse

Posted: Thu Jan 13, 2011 5:27 pm
by FranciscoA
Compuin, revisa tu correo. Es para la ver 712
Saludos.

Re: Aqui Un Ejemplo funcional para xbrowse

Posted: Thu Jan 13, 2011 6:01 pm
by sysctrl2
aqui esta el ejeplo: se crea la tabla DATOS.DBF si no existe.

Code: Select all

#include "FiveWin.ch"
#include "InKey.ch"
#include "xbrowse.ch"

//----------------------------
Function CDiario()
   local oWnd, oBrw, oCol, cAlias
   local n:=0
   local nTotal1:=0, nTotal2:=0
   
   
   local aDbf := {}
   aadd( aDbf, {"cta"     , "C", 10, 00}  )
   aadd( aDbf, {"scta"    , "C", 10, 00}  )
   aadd( aDbf, {"nombre"  , "C", 40, 00}  )
   aadd( aDbf, {"debe"    , "n", 12, 02}  )
   aadd( aDbf, {"haber"   , "n", 12, 02}  )
   aadd( aDbf, {"concepto", "C", 40, 00}  )
   if !file( "DATOS.DBF"  )
      dbcreate( "datos.dbf", aDbf )
   Endif
   
   




   DbUseArea(.T.,,"Datos","Datos",.F.)
   
   if lastrec() = 0
      dbappend()
      rlock()
      field->cta  := "6130380125"
      field->scta := "3230"
      field->nombre := "NOMBRE CUENTA"
      dbunlock()
   endif
   
   
   cAlias:=Alias()

   dbSelectArea(cAlias)

   DEFINE WINDOW oWnd TITLE "EDITAR COMPROBANTE DE DIARIO" ;
          FROM 0,0 TO 600,900 PIXEL ;
          COLOR nRGB(247, 243, 232), nRGB(228, 213, 184)

   oBrw := TXBrowse():New( oWnd )
   oBrw:cAlias := cAlias 

   oBrw:nColDividerStyle     := LINESTYLE_INSET
   oBrw:nRowDividerStyle     := LINESTYLE_INSET
   oBrw:lColDividerComplete  := .t.    //completa pintado sobre el footer cuando lineas no llenan todo el browse

   oBrw:nHeaderHeight        := 30   //Altura cabeceras de col
   oBrw:lFooter              := .t.  //Que tendrá footer 
   oBrw:nFooterLines         := 1    //Lineas del footer 
   oBrw:nFooterHeight        := 24   //Altura del  Footer
   oBrw:lRecordSelector      := .t.  //poner o no, COL de la flechita de la izq


   oBrw:bClrHeader    := {|| { nRGB(140,  0,  0), nRGB(229,0,0) } }  // VERDECITO
   oBrw:bClrFooter    := oBrw:bClrHeader
   oBrw:bClrStd       := {|| { nRGB(  0,  0,  0), nRGB(255,248,220) } }  // colores para lineas normales
   oBrw:bClrSel       := {|| { nRGB(255,255,255), nRGB(241,222,088) } }  // para barra de linea selecc cuando el control no tiene el foco
   oBrw:bClrSelFocus  := {|| { nRGB(  0,  0,  0), nRGB(248,195, 34) } }  // para barra de linea selecc cuando el control tiene el foco

   oBrw:nMarqueeStyle    := MARQSTYLE_HIGHLCELL  //solo ilumina la celda actual

   oBrw:nRowHeight   := 20  //altura entre lineas

   oBrw:lFastEdit := .t. 

   oBrw:bPastEof = {|| if( lCtaOK(oBrw) .and. lDebHabOK((cAlias)->debe+(cAlias)->haber) ,;
                           (Dbappend(), oBrw:GoLeftMost(), oBrw:Refresh(), oBrw:aCols[ 1 ]:Edit() ),) }  //agrega registro y "oprime" enter


   //Aqui uso DbPack() porque es una dbf pequeña y temporal. En grandes usar function de mantenimiento.
   oCol = oBrw:AddCol() 
   oCol:bStrData = { || (cAlias)->cta } 
   oCol:cHeader = "CTA" 
   oCol:nEditType = EDIT_GET 
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, ( DbAppend(), oBrw:Refresh() ),) ,;
                        If( nKey == VK_RETURN, (cAlias)->Cta := xVal, ) ,;
                        If( nKey == VK_ESCAPE .and. Empty((cAlias)->Cta), ( (cAlias)->(dbDelete()),(cAlias)->(__dbPack()),(cAlias)->(dbGoBottom()),oBrw:Refresh() ), ) } 

   oCol = oBrw:AddCol() 
   oCol:bStrData = { || (cAlias)->Scta } 
   oCol:cHeader = "SC4" 
   oCol:nEditType = EDIT_GET
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, ( DbAppend(), oBrw:Refresh() ),) ,;
                        If( nKey == VK_RETURN, if(lCtaOK(oBrw),(cAlias)->Scta := xVal, oBrw:GoLeftMost()),) } 


   oCol = oBrw:AddCol() 
   oCol:bStrData = { || (cAlias)->NOMBRE } 
   oCol:cHeader = "DESCRIPCION DE LA CUENTA" 
   oCol:cFooter = "BALANCE --->  "
   oCol:nFootStrAlign := 1
   oCol:nEditType = 0   //no editable

   oCol = oBrw:AddCol() 
   oCol:bStrData = { || Transform((cAlias)->DEBE,"9,999,999,999.99") } 
   oCol:nDataStrAlign := 1   //alineado a la derecha
   oCol:cHeader = "DEBITOS" 
   oCol:nEditType = EDIT_GET 
   oCol:lTotal := .t.    //para totalizar cols a report y/o excel
   oCol:bFooter  =  {|| TRANSFORM(nTotal1,"9,999,999,999.99") }
   oCol:nFootStrAlign := 1
   oCol:bEditWhen := {|| (cAlias)->Haber =0 }
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, ( DbAppend(), oBrw:Refresh() ),),;
                        If( nKey == VK_RETURN,;
                        if(lCtaOK(oBrw),( nTotal1+=(Val(xVal)-(cAlias)->DEBE), oCol:RefreshFooter(), (cAlias)->DEBE := Val(xVal) ), oBrw:GoLeftMost()) ,) } 

   oCol = oBrw:AddCol() 
   oCol:bStrData = { || Transform((cAlias)->HABER,"9,999,999,999.99") } 
   oCol:nDataStrAlign := 1
   oCol:cHeader = "CREDITOS" 
   oCol:nEditType = EDIT_GET
   oCol:lTotal := .t.    //para totalizar cols a report y/o excel
   oCol:bFooter  =  {|| TRANSFORM(nTotal2,"9,999,999,999.99") }
   oCol:nFootStrAlign := 1
   oCol:bEditWhen := {|| (cAlias)->Debe =0 }
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, ( DbAppend(), oBrw:Refresh() ),),;
                        If( nKey == VK_RETURN,;
                        if(lCtaOK(oBrw), ( nTotal2+=(Val(xVal)-(cAlias)->HABER), oCol:RefreshFooter(), (cAlias)->HABER := Val(xVal) ), oBrw:GoLeftMost()) ,) } 


   oCol = oBrw:AddCol() 
   oCol:bStrData = { || (cAlias)->CONCEPTO } 
   oCol:cHeader = "CONCEPTO" 
   oCol:nEditType = EDIT_GET 
   //Es la ultima columna, agrega nuevo registro en blanco y se va a primer columna,
   //solo si la cta y/o valores están OK
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
                        If( nKey == VK_RETURN, (cAlias)->CONCEPTO := xVal ,) ,;
                        if( !lCtaOK(oBrw),(oBrw:GoLeftMost(), oBrw:Refresh()),;
                            if ( (cAlias)->(Recno())==(cAlias)->(Reccount()) .and. lDebHabOK((cAlias)->debe+(cAlias)->haber), (DbAppend(), oBrw:GoLeftMost(), oBrw:Refresh()),) ) } 


   oBrw:SetRDD()
   oBrw:CreateFromCode()

   oBrw:bKeyDown :={ | nKey | Teclas(nKey, oBrw, cAlias) }

   oWnd:oClient := oBrw

   ACTIVATE WINDOW oWnd ;
      ON INIT oBrw:SetFocus() 

RETURN NIL

//--------------------
Function Teclas(nKey, oBrw, cAlias)
Do Case
   Case nKey == VK_DELETE
       if MsgNoYes("¿Está seguro(a) de borrar este registro?","Borrar registro de "+cAlias)
          (cAlias)->(dbDelete())
          (cAlias)->(dbPack())
           oBrw:GoBottom()
           oBrw:Refresh()
       endif
EndCase
Return nil

//----------------//
Function lCtaOK(oBrw)
//tu codigo de validacion
(oBrw:cAlias)->nombre := "Nombre de la Cuenta, si existe..."
 oBrw:Refresh()
Return .t.

//----------------------------//No permitir registro sin valores
Function lDebHabOK(nValor)
if nValor = 0
   MsgStop("Omision de Valores","Alto")
   return .f.
endif
Return .t.


//ESTAS FUNCIONES SON PARA COLORES PERSONALIZADOS DEL XBROWSE YA PUBLICADAS
//No son necesarias a menos que quieras emplear las classes modificadas.

//-------------------COLOR BUTTONBAR
Function ClrMsgBar()
Return {nRGB(255,228,150),nRGB(167,128,0)}

//-------------------COLOR HEARDERS DEL TXBROWSE
Function ClrHeader()
Return { nRGB(255,248,220), nRGB(157, 138,0) }   //VERDECITO

//-------------------COLOR FOOTER DEL TXBROWSE
Function ClrFooter()
Return { nRGB(255,248,220), nRGB(157, 138,0) }   //VERDECITO
 

Re: Aqui Un Ejemplo funcional para xbrowse

Posted: Thu Jan 13, 2011 6:10 pm
by Compuin
No funciona. Mi version de FWH es la 6.12. Que esta mal?

Re: Aqui Un Ejemplo funcional para xbrowse

Posted: Thu Jan 13, 2011 6:53 pm
by sysctrl2
es un error de ejecucion? o de compilacion,
saludos.

Re: Aqui Un Ejemplo funcional para xbrowse

Posted: Thu Jan 13, 2011 6:55 pm
by Compuin
Al momento de ejecutar. Te lo envie a tu correo como error browser.

Saludos,

Re: Aqui Un Ejemplo funcional para xbrowse

Posted: Thu Jan 13, 2011 7:08 pm
by sysctrl2
compuIn. Pon el error aqui, o mandamelo al correo: sysctrl@prodigy.net.mx,
ya que en mi correo de hotmail, no he recibido nada.
saludos..

Re: Aqui Un Ejemplo funcional para xbrowse

Posted: Thu Jan 13, 2011 7:11 pm
by Compuin
Te lo acabo de enviar. Agradezco tu ayuda ya que ningun browser me funciona

Re: Aqui Un Ejemplo funcional para xbrowse

Posted: Fri Jan 14, 2011 7:53 pm
by sysctrl2
CompuIn.
veo que utilizas harbour en tu compilacion,
con xharbour no me da ningun error.
Podrias hacer la prueba con xhb.

saludos..

Re: Aqui Un Ejemplo funcional para xbrowse

Posted: Sat Jan 15, 2011 4:02 am
by Bayron
Tuve un error al compilar con FWH10.2, lo resolví con la ayuda de este link de nageswaragunupudi:

http://forums.fivetechsupport.com/viewt ... 365#p96337