Equivalente de arreglos TXBrose

Equivalente de arreglos TXBrose

Postby ACC69 » Sat Mar 15, 2014 6:47 pm

Hola buenas tardes, en vista que nadie me respondieron de mi pregunta anterior, tuve que ver en todos los ejemplos y adaptarlo a mi codigo de TXBrowse,ahora se me presenta un detalle, cual es el equivalente o metodo ,que al seleccionar equis elementro dentro de un ARRAY, que me muestre informacion como referencia de datos a buscar para desplegar movimientos a detalles, ya que en cada cuenta de la balanza de comprobacion es acumulativa, y la quiero mostrar para el usuario vea a detalle la cuenta seleccionada por ejemplo 1020-0001-0001-0001

Espero haberme explicado adjunto codigo y la imagen.

Code: Select all  Expand view
#Include "FiveWin.ch"
#Include "xBrowse.ch"

STATIC oDlg,oBrw2
Static S08, S09, S10,S12, S13 // Alias de base de datos
STATIC nTCarg,nTCred
STATIC lSelSeg,NivBal
STATIC SdoMesAnt,SdoIni,Cta1,Cta2,Cta3,Cta4,nReg,nCol,aSum, aTot // Reportes
STATIC aDato,aClrRowBack

MemVar oWnd, oMOpc, nNumEmp, cDescrEmp, Mes_Per, Ano_Per, nStation

//------------------------------------------------------------------------------
FUNCTION MOD_PBAS()
 LOCAL oItem:=oMOpc,oBrw

 lSelSeg:= .F.
 NivBal := 4
 aTot   := {{0,0,0,0}}
 nReg   := 0
 aDato  := {}
 aDato  := CargaDatos()

 DEFINE DIALOG oDlg RESOURCE "CONSBALANZ" TITLE 'Listado de Pólizas y Movimientos'
  REDEFINE XBROWSE oBrw ID 101 ;
            HEADERS 'Cuentas','Descripción','Sdo Ant','Cargo','Abono','Sdo Act' ;
            COLSIZES 112,260,85,85,85,85;
            PICTURES "@!","@!","999,999,999.99","999,999,999.99","999,999,999.99","999,999,999.99";
            OF oDlg ARRAY aDato FOOTERS AUTOCOLS LINES CELL

  oBrw:lColDividerComplete := .F.
  [b]oBrw:bChange             := { || MovDet(oBrw) }               // Cual es el equivalente pasar como referencia la cuenta y refrescar los datos 2010-0001-0001-0001
  oBrw:bKeyDown            := {| nKey| Val_nKey_C(nKey, oBrw) } // Cual es el equivalente pasar como referencia la cuenta y refrescar los datos
  oBrw:bLDblClick          := {|| CaptDatos(.F.,oBrw) }         // Cual es el equivalente pasar como referencia la cuenta y refrescar los datos[/b]

 ACTIVATE DIALOG oDlg CENTERED // ON INIT Refresca(oBrw,oBrw2)

 oItem:Enable() // Cerramos
RETURN NIL

//------------------------------------------------------------------------------
STATIC FUNCTION CargaDatos()
 LOCAL cCtas

 S08 := Abre_Dbf(8,8)   // ABRE CATCTAxA.DBF
 S12 := Abre_Dbf(12,12) // Abre: POLZxMxA.DBF
 S13 := Abre_Dbf(13,13) // Abre: MOVTxMxA.DBF

 nTCarg := 0
 nTCred := 0

 (S08)->(DbGoTop())

 SdoMesAnt:= ("SALD"+TSTR(Mes_Per - 1))
 cCtas    := SUBS((S08)->CUENTAS,1,4)

 DO WHILE (S08)->(!EOF())
     IF cCtas <> SUBS((S08)->CUENTAS,1,4)
         *AADD( aDato, { "" } )
         AADD( aDato, Nil )
     ENDIF

     (S08)->(DbSetOrder(1))
     (S08)->(DbSeek((S08)->CUENTAS))

     SdoIni := (S08)->(&SdoMesAnt)

     (S13)->(DbSetOrder(3))
     (S13)->(SetSeek((S08)->CUENTAS))

     nCol:= NivCol(nCol)

     aSum := {{0,0,0}}

     DO WHILE FUNNIV(lSelSeg,S08,S10,S13,Cta1,Cta2,Cta3,Cta4) .AND. (S13)->(!EOF())
          aSum[1,1] := aSum[1,1] + (S13)->MV_CARG // Suma CARGOS
          aSum[1,2] := aSum[1,2] + (S13)->MV_ABON // Suma ABONOS

         (S13)->(DbSkip())
     ENDDO

     aSum[1,3] := (SdoIni + aSum[1,1]) - aSum[1,2]

     IF ( (S08)->TIPONAT = 'D' )
         aTot[1,1] := aTot[1,1] + SdoIni    // Total Saldos iniciales
         aTot[1,2] := aTot[1,2] + aSum[1,1] // Total de Cargos
         aTot[1,3] := aTot[1,3] + aSum[1,2] // Total DE Abonos
     ENDIF

     IF ( (S08)->NIVSUM <= NivBal )
          IF SdoIni <> 0 .OR. aSum[1,1] <> 0 .OR. aSum[1,2] <> 0
              AADD( aDato, { (Ext_xNiv(LTRIM((S08)->CUENTAS))),nCol+(S08)->DESCRIP, SdoIni,aSum[1,1],aSum[1,2],aSum[1,3] } )
          ENDIF
     ENDIF

     cCtas := SUBS((S08)->CUENTAS,1,4)

     (S08)->(DbSkip())
 ENDDO
RETURN (aDato)

//------------------------------------------------------------------------------
STATIC FUNCTION NivCol(nCol)
 DO CASE
    CASE (S08)->NIVSUM = 1
          nCol := ""

    CASE (S08)->NIVSUM = 2
          nCol = " "

    CASE (S08)->NIVSUM = 3
          nCol = "  "

    CASE (S08)->NIVSUM = 4
          nCol = "   "
 ENDCASE
RETURN(nCol)

//------------------------------------------------------------------------------
[b]STATIC FUNCTION MovDet(oBrw)
 MsgInfo( "aqui que muestre el paso de la referecia 1020-0001-0001-001,cada que seleccione las cuentas de detalle"+CRLF+;
          " lo usare para buscar en un seek,para que muestre detalles de la cuenta seleccionada" +CRLF+;
          "ya que tendre browse de multiseleccion,cual es el equivalente")
RETURN NIL[/b]


Image

Image

Saludos y buen dia.!
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

Re: Equivalente de arreglos TXBrose

Postby ACC69 » Sat Mar 15, 2014 7:19 pm

ACC69 wrote:Hola buenas tardes, en vista que nadie me respondieron de mi pregunta anterior, tuve que ver en todos los ejemplos y adaptarlo a mi codigo de TXBrowse,ahora se me presenta un detalle, cual es el equivalente o metodo ,que al seleccionar equis elementro dentro de un ARRAY, que me muestre informacion como referencia de datos a buscar para desplegar movimientos a detalles, ya que en cada cuenta de la balanza de comprobacion es acumulativa, y la quiero mostrar para el usuario vea a detalle la cuenta seleccionada por ejemplo 1020-0001-0001-0001

Espero haberme explicado adjunto codigo y la imagen.

Code: Select all  Expand view
#Include "FiveWin.ch"
#Include "xBrowse.ch"

STATIC oDlg,oBrw2
Static S08, S09, S10,S12, S13 // Alias de base de datos
STATIC nTCarg,nTCred
STATIC lSelSeg,NivBal
STATIC SdoMesAnt,SdoIni,Cta1,Cta2,Cta3,Cta4,nReg,nCol,aSum, aTot // Reportes
STATIC aDato,aClrRowBack

MemVar oWnd, oMOpc, nNumEmp, cDescrEmp, Mes_Per, Ano_Per, nStation

//------------------------------------------------------------------------------
FUNCTION MOD_PBAS()
 LOCAL oItem:=oMOpc,oBrw

 lSelSeg:= .F.
 NivBal := 4
 aTot   := {{0,0,0,0}}
 nReg   := 0
 aDato  := {}
 aDato  := CargaDatos()

 DEFINE DIALOG oDlg RESOURCE "CONSBALANZ" TITLE 'Listado de Pólizas y Movimientos'
  REDEFINE XBROWSE oBrw ID 101 ;
            HEADERS 'Cuentas','Descripción','Sdo Ant','Cargo','Abono','Sdo Act' ;
            COLSIZES 112,260,85,85,85,85;
            PICTURES "@!","@!","999,999,999.99","999,999,999.99","999,999,999.99","999,999,999.99";
            OF oDlg ARRAY aDato FOOTERS AUTOCOLS LINES CELL

  oBrw:lColDividerComplete := .F.
  [b]oBrw:bChange             := { || MovDet(oBrw) }               // Cual es el equivalente pasar como referencia la cuenta y refrescar los datos 2010-0001-0001-0001
  oBrw:bKeyDown            := {| nKey| Val_nKey_C(nKey, oBrw) } // Cual es el equivalente pasar como referencia la cuenta y refrescar los datos
  oBrw:bLDblClick          := {|| CaptDatos(.F.,oBrw) }         // Cual es el equivalente pasar como referencia la cuenta y refrescar los datos[/b]

 ACTIVATE DIALOG oDlg CENTERED // ON INIT Refresca(oBrw,oBrw2)

 oItem:Enable() // Cerramos
RETURN NIL

//------------------------------------------------------------------------------
STATIC FUNCTION CargaDatos()
 LOCAL cCtas

 S08 := Abre_Dbf(8,8)   // ABRE CATCTAxA.DBF
 S12 := Abre_Dbf(12,12) // Abre: POLZxMxA.DBF
 S13 := Abre_Dbf(13,13) // Abre: MOVTxMxA.DBF

 nTCarg := 0
 nTCred := 0

 (S08)->(DbGoTop())

 SdoMesAnt:= ("SALD"+TSTR(Mes_Per - 1))
 cCtas    := SUBS((S08)->CUENTAS,1,4)

 DO WHILE (S08)->(!EOF())
     IF cCtas <> SUBS((S08)->CUENTAS,1,4)
         *AADD( aDato, { "" } )
         AADD( aDato, Nil )
     ENDIF

     (S08)->(DbSetOrder(1))
     (S08)->(DbSeek((S08)->CUENTAS))

     SdoIni := (S08)->(&SdoMesAnt)

     (S13)->(DbSetOrder(3))
     (S13)->(SetSeek((S08)->CUENTAS))

     nCol:= NivCol(nCol)

     aSum := {{0,0,0}}

     DO WHILE FUNNIV(lSelSeg,S08,S10,S13,Cta1,Cta2,Cta3,Cta4) .AND. (S13)->(!EOF())
          aSum[1,1] := aSum[1,1] + (S13)->MV_CARG // Suma CARGOS
          aSum[1,2] := aSum[1,2] + (S13)->MV_ABON // Suma ABONOS

         (S13)->(DbSkip())
     ENDDO

     aSum[1,3] := (SdoIni + aSum[1,1]) - aSum[1,2]

     IF ( (S08)->TIPONAT = 'D' )
         aTot[1,1] := aTot[1,1] + SdoIni    // Total Saldos iniciales
         aTot[1,2] := aTot[1,2] + aSum[1,1] // Total de Cargos
         aTot[1,3] := aTot[1,3] + aSum[1,2] // Total DE Abonos
     ENDIF

     IF ( (S08)->NIVSUM <= NivBal )
          IF SdoIni <> 0 .OR. aSum[1,1] <> 0 .OR. aSum[1,2] <> 0
              AADD( aDato, { (Ext_xNiv(LTRIM((S08)->CUENTAS))),nCol+(S08)->DESCRIP, SdoIni,aSum[1,1],aSum[1,2],aSum[1,3] } )
          ENDIF
     ENDIF

     cCtas := SUBS((S08)->CUENTAS,1,4)

     (S08)->(DbSkip())
 ENDDO
RETURN (aDato)

//------------------------------------------------------------------------------
STATIC FUNCTION NivCol(nCol)
 DO CASE
    CASE (S08)->NIVSUM = 1
          nCol := ""

    CASE (S08)->NIVSUM = 2
          nCol = " "

    CASE (S08)->NIVSUM = 3
          nCol = "  "

    CASE (S08)->NIVSUM = 4
          nCol = "   "
 ENDCASE
RETURN(nCol)

//------------------------------------------------------------------------------
[b]STATIC FUNCTION MovDet(oBrw)
 MsgInfo( "aqui que muestre el paso de la referecia 1020-0001-0001-001,cada que seleccione las cuentas de detalle"+CRLF+;
          " lo usare para buscar en un seek,para que muestre detalles de la cuenta seleccionada" +CRLF+;
          "ya que tendre browse de multiseleccion,cual es el equivalente")
RETURN NIL[/b]


Image

Image

Saludos y buen dia.!


Image
https://imageshack.com/i/mj9gzyj
Image
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

Re: Equivalente de arreglos TXBrose

Postby FranciscoA » Sat Mar 15, 2014 9:05 pm

Prueba asi:
Code: Select all  Expand view
cCta := oBrw:aArrayData[oBrw:nArrayAt,1]    //valor de la columna 1, segun linea señalada actualmente.

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Equivalente de arreglos TXBrose

Postby cnavarro » Sat Mar 15, 2014 11:59 pm

Quizas te sea menos complicado hacer un Tree en el Browse
Hay varios ejemplos en el foro
viewtopic.php?f=3&t=25910&hilit=XBrowse+Tree#p142190

y un buen ejemplo tambien en el directorio Samples
xbrwtree.prg
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Equivalente de arreglos TXBrose

Postby FranciscoA » Sun Mar 16, 2014 6:24 pm

Este codigo puede servirte de guía. Lo he extraído de un sistema que hice para una micro-financiera. Es de entorno MDI
La tabla clientes podria representar a tu tabla Balanza, y la tabla creditos, a tus movimientos.
Utilizo CDX.
Aqui se incluye, en la parte izquierda a todos los clientes, y en la derecha a cada uno de sus prestamos con sus saldos.
Espero te ayude en algo.

Code: Select all  Expand view
//-------------------------------------
Function ClteCredito(cCodigo,cCredNum,cCliente,cMoneda)
local oDlg, oBigFont, oBrw1, oBrw2, n, cAlias1, cAlias2
local cOldSele:=Select(), cOrdAntCred
local oTextBusc, cTextBusc

local aGradBarSelFocus:= { { 1, RGB(252,232,171)   , RGB(248,195, 34) } }
local aGradBarSel:= {{1, RGB(252,235, 184), RGB(251,222,88)}}

DbSelectArea("CLIENTES")
cAlias1:=Alias()

DbSelectArea("CREDITOS")
cAlias2:=Alias()
cOrdAntCred:= Creditos->(OrdSetFocus())
CREDITOS->(ORDSETFOCUS("CODCTPTM"))  //Codigo de Clte +codigo de Ptmo

   cCodigo:=Space(len(Creditos->CodClte))
   cCredNum:=Space(len(Creditos->Ptmo))
   cCliente:=Space(len(Creditos->cliente))
   cMoneda:=Space(len(Creditos->moneda))

DEFINE FONT oBigFont NAME "TAHOMA" SIZE 0,-22 ITALIC BOLD

DEFINE DIALOG oDlg RESOURCE "CLTEPTMO" TRANSPARENT

REDEFINE SAY ID 4001 OF oDlg FONT oBigFont
REDEFINE SAY ID 4002 OF oDlg
REDEFINE BITMAP RESOURCE "LUPA" ID 500 OF oDlg

   XbrNumFormat( 'A', .t. )

//PRIMER BROWSE
REDEFINE XBROWSE oBrw1 ID 118 OF oDlg ;
         COLUMNS "Codigo", "Nombre", "Apellido","CedulaIde" ;
         SIZES 60,170,170,170 ;
         ALIAS (cAlias1) FOOTERS LINES CELL


   AEval( oBrw1:aCols, { |o| o:nEditType := 0 ,;   //No editables
                            o:nHeadStrAlign := 2 } )  //texto encab/col centrado

   WITH OBJECT oBrw1
      :nMarqueeStyle    := MARQSTYLE_HIGHLROW  //_HIGHLROWMS
      :nColDividerStyle:=LINESTYLE_LIGHTGRAY
      :nRowDividerStyle:=LINESTYLE_LIGHTGRAY
      //:bClrStd       := {|| { nRGB(  0,  0,  0), nRGB(255,248,220) } }  // colores para lineas normales
      :bClrSel       := {|| { nRGB(  0,  0,255), aGradBarSel } }  // para barra de linea selecc cuando el control no tiene el foco
      :bClrSelFocus := { || { CLR_BLACK, aGradBarSelFocus } }     // para barra de linea selecc cuando el control tiene el foco
      :lKinetic      := .f.
      :lContrastClr  := .f.  //para que no cambie color de texto automaticamente segun intensidad del fondo

      :bKeyDown := {|nTecla| if(nTecla==VK_RETURN, (oBrw2:SetFocus(),oBrw2:Refresh()),) }
      :bChange := {|| PonerScope(cAlias1,cAlias2,oBrw2) }

      :bGotFocus:= {|| dbSelectArea("Clientes") }

      :Codigo:cSortOrder   := "CLIENTES"
      :nombre:cSortOrder   := "NOMBCLTE"
      :apellido:cSortOrder := "APELCLTE"
      :cedulaide:cSortOrder:= "CEDULIDE"
   END


   REDEFINE SAY oTextBusc PROMPT cTextBusc ID 4003 OF oDlg UPDATE
   oTextBusc:cTooltip:= {"Click sobre cabecera de columna para busqueda respectiva","BUSQUEDA INCREMENTAL          "}

   oBrw1:bSeek := {|c| Clientes->( DbSeek(UPPER(c),.t.) ) }
   oBrw1:oSeek := oTextBusc


//SEGUNDO BROWSE
REDEFINE XBROWSE oBrw2 ID 119 OF oDlg ;
         COLUMNS "Ptmo","Moneda","MontoPtmo" ;
         HEADERS "Prestamo","Moneda","Principal";
         SIZES 54,80,100;
         ALIAS (cAlias2) FOOTERS LINES CELL

   AEval( oBrw2:aCols, { |o| o:nEditType := 0 ,;   //No editables
                            o:nHeadStrAlign := 2 } )  //texto encab/col centrado

   WITH OBJECT oBrw2
      :nMarqueeStyle    :=  MARQSTYLE_HIGHLROW  //_HIGHLROWMS
      :nColDividerStyle:=LINESTYLE_LIGHTGRAY
      :nRowDividerStyle:=LINESTYLE_LIGHTGRAY
      //:bClrStd       := {|| { nRGB(  0,  0,  0), nRGB(255,248,220) } }  // colores para lineas normales
      :bClrSel       := {|| { nRGB(  0,  0,255), aGradBarSel } }  // para barra de linea selecc cuando el control no tiene el foco
      :bClrSelFocus := { || { CLR_BLACK, aGradBarSelFocus } }     // para barra de linea selecc cuando el control tiene el foco
      :lKinetic      := .f.
      :lContrastClr  := .f.  //para que no cambie color de texto automaticamente segun intensidad del fondo
      :nStretchCol            := STRETCHCOL_LAST

      :bLDblClick := {|| cMoneda:=(cAlias2)->Moneda,cCodigo:=(cAlias2)->CodClte, cCredNum:=(cAlias2)->Ptmo, cCliente:=(cAlias2)->Cliente, oDlg:End() }
      :bKeyDown := {|nTecla| if(nTecla==VK_RETURN, (cMoneda:=(cAlias2)->Moneda,cCodigo:=(cAlias2)->CodClte, cCredNum:=(cAlias2)->Ptmo, cCliente:=(cAlias2)->Cliente, oDlg:End()),) }

      :bGotFocus:= {|| dbSelectArea("Creditos") }
   END


   ACTIVATE DIALOG oDlg CENTERED ;
            ON INIT ( oBrw1:SetFocus(), PonerScope(cAlias1,cAlias2,oBrw2) )

   dbSelectArea(cOldSele)

   CREDITOS->(ORDSETFOCUS(cOrdAntCred))

   oBigfont:End()
return nil
//-------------------------------------
Function PonerScope(cAlias1,cAlias2,oBrw)
(cAlias2)->(OrdScope(TOPSCOPE,(cAlias1)->Codigo))
(cAlias2)->(OrdScope(BOTTOMSCOPE,(cAlias1)->Codigo))
(cAlias2)->(DbGotop())
 oBrw:Refresh()
Return nil
 

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Equivalente de arreglos TXBrose

Postby MarioG » Mon Mar 17, 2014 2:09 pm

Otra opción:
Agregar un BUTTON al campo Cuentas
En el siguiente browse un button en el campo Banco
Image

Code: Select all  Expand view
  WITH OBJECT oBrw:aCols[1]
      :cHeader   := "Cuenta"
      :nWidth    := 50
      :nEditType := EDIT_BUTTON
      :AddResource( "bmp_Bank" )     // tu ícono p/el boton
      :nBtnBmp := 1

      :bstrData  := {|| field->cuentas }   // en tu caso
      :bEditBlock:= {|| MuestraDetalle() }   // llama a una funcion que abre un Dlg y muestra el Detalle
   END
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Equivalente de arreglos TXBrose

Postby ACC69 » Mon Mar 17, 2014 4:04 pm

MarioG wrote:Otra opción:
Agregar un BUTTON al campo Cuentas
En el siguiente browse un button en el campo Banco
Image

Code: Select all  Expand view
  WITH OBJECT oBrw:aCols[1]
      :cHeader   := "Cuenta"
      :nWidth    := 50
      :nEditType := EDIT_BUTTON
      :AddResource( "bmp_Bank" )     // tu ícono p/el boton
      :nBtnBmp := 1

      :bstrData  := {|| field->cuentas }   // en tu caso
      :bEditBlock:= {|| MuestraDetalle() }   // llama a una funcion que abre un Dlg y muestra el Detalle
   END


Hola buenos dias como estan, y gracias por sus respuestas y su atencion y la informacion que necesito.

Hola Ing. CNavarro, aun no tengo mucha experiencia en la clase de tree que a lentitud le ando buscando con la clase nativa de TXBrowse,por el momento lo hare abriendo tres browses y no complicarme mas, y de todas maneras gracias por las respuestas CNavarro al igual a Francisco y a Mario.

Les envio cordial saludos y gusto saludarles.

Atte: Adrian C. C.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

Re: Equivalente de arreglos TXBrose

Postby cnavarro » Mon Mar 17, 2014 4:51 pm

Adrian
El ejemplo que te indico de samples esta hecho con TXBrowse
Solo tienes que "armar" el array con los datos Maestro-Detalle
Un saludo
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Equivalente de arreglos TXBrose

Postby ACC69 » Tue Mar 18, 2014 5:25 pm

cnavarro wrote:Adrian
El ejemplo que te indico de samples esta hecho con TXBrowse
Solo tienes que "armar" el array con los datos Maestro-Detalle
Un saludo


Gracias Ing. Cristobal, estudiare el ejemplo del codigo y adaptarlo a mis necesidades, gracias de nuevo.

Saludos .
Atte: Adrian C. C.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 89 guests