Xbrowse en varios folders, tipo excel.

Xbrowse en varios folders, tipo excel.

Postby Garbi » Sat Dec 10, 2016 9:15 am

Hola, he creado con xbrowse y folder, varios folders,depende de los que el cliente establezca, así como el numero de filas y columnas, es decir son variables. He usado la misma tabla para cada xbrowse de cada folder, si muevo una celda no se mueve en los demás folders. En resumen es como si fuera los libros de una hoja excel.

Ahora mi duda es la siguiente: Me voy aponer a editar esas celdas, pero¿ tengo que crear una tabla para folder y xbrowse sabiendo que son variables? o¿ existe forma de decirle que modifique la tabla del folder en la que estoy y no se modifique en las demás? , además esto me es importante también para después poder guardar los datos y recuperarlos.

Por cierto, si le pongo las celdas y si las filas no llegan hasta bajo del xbrowse me aparece la linea de separación de la columna (la de fila se acaba en la ultima columna) hasta el final aunque no hayan lineas de array. ¿Existe forma de que no salga esa linea y se acabe donde acaban los registros? Es por estética.

Muchas Gracias por vuestra ayuda.


Code: Select all  Expand view
vllenandofilas:='" "'
for i:= 2 to vcolumnas
    vllenandofilas:=vllenandofilas+'," "'
next i


for i:=vfilas to 1 step -1
    aadd(tfilas,{transform(i,"999"),&vllenandofilas})
 next i

vprompt:='"'+chr(65)+"'"+'"'
VASCII:= 66

for i:=2 to vprofundo

    vprompt:=vprompt+","+'"'+chr(vascii++)+"'"+'"'

next i

vfolders:='"FOLDERS"'
FOR i:= 2 to vprofundo
    vfolders:=vfolders+","+'"FOLDERS"'
next i

 DEFINE DIALOG oDDATOS RESOURCE "FOLDER_VARIOS" TITLE " " OF oApp:aMod[20]:oWnd

     REDEFINE FOLDER oFld ID 101 OF oDDATOS UPDATE;
        PROMPT &vprompt DIALOGS &vfolders ADJUST

       FOR i:=1 to vprofundo
           REDEFINE XBROWSE oBrwt ID 101 autocols;
                  HEADERS V_Header ;
                  SIZES  V_ColSize ;
                  ARRAY tfilas CELL LINES of oFld:aDialogs[i]
       next i

oBrwt:bLDblClick := {|| MsgInfo("Tu function") }
oBrwt:bKeychar := {|nkey| iif(nkey=13,MsgInfo("Mi Funcion"),)}
oBrwt:lColDividerComplete := .t.
*

oBrwt:nFreeze:=1




 ACTIVATE DIALOG oDDATOS CENTER ON INIT (oFld:aDialogs[ 1 ]:setfocus(),.f.)
 
Saludos,
Regards,

Jose Luis Alepuz
joseluis@mancomputer.com
www.mancomputer.com
Garbi
 
Posts: 291
Joined: Wed Nov 02, 2005 3:28 pm

Re: Xbrowse en varios folders, tipo excel.

Postby Antonio Linares » Sat Dec 10, 2016 9:37 am

Puedes capturar la imagen y ponerla aqui ? gracias
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41315
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Xbrowse en varios folders, tipo excel.

Postby Garbi » Sat Dec 10, 2016 9:48 am

Image
Saludos,
Regards,

Jose Luis Alepuz
joseluis@mancomputer.com
www.mancomputer.com
Garbi
 
Posts: 291
Joined: Wed Nov 02, 2005 3:28 pm

Re: Xbrowse en varios folders, tipo excel.

Postby nageswaragunupudi » Sat Dec 10, 2016 1:40 pm

1) In the command REDEFINE XBROWSE
a) Use aBrw[ 1 ], aBrw[ 2 ]. etc
b) Instead of ARRAY tfilas, use ARRAY AClone( tfilas )

2) Set aBrw[ n ]:lFullGrid := .t.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Xbrowse en varios folders, tipo excel.

Postby nageswaragunupudi » Sat Dec 10, 2016 2:20 pm

This is a sample approach
Code: Select all  Expand view
#include "fivewin.ch"

function Main()

   local oDlg, oFld, oFont, aBrw
   local nFolders, aTabs, nRows, nCols, aData, aHeader
   local i

   nFolders :=  4
   nRows    := 10
   nCols    :=  6

   aData    := Array( nFolders )
   aData[ 1 ]  := Array( nRows, nCols )
   AEval( aData[ 1 ], { |a,k| a[ 1 ] := nRows - k + 1 } )
   AEval( aData, { |u,k| aData[ k ] := AClone( aData[ 1 ] ) }, 2 )
   aHeader  := Array( nCols )
   aHeader[ 1 ] := ""
   AEval( aHeader, { |u,k| aHeader[ k ] := Chr( 63 + k ) }, 2 )
   aTabs    := Array( nFolders )
   AEval( aTabs, { |u,k| aTabs[ k ] := Chr( 64 + k ) } )
   aBrw     := Array( nFolders )
   //

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-12
   DEFINE DIALOG oDlg SIZE 800,600 PIXEL OF oDlg FONT oFont TRUEPIXEL

   @ 20,20 FOLDER oFld SIZE 760,500 PIXEL OF oDlg ITEMS aTabs

   for i := 1 to nFolders
      @ 0,0 XBROWSE aBrw[ i ] SIZE 0,0 PIXEL OF oFld:aDialogs[ i ] ;
         DATASOURCE aData[ i ] AUTOCOLS HEADERS aHeader ;
         CELL LINES NOBORDER FASTEDIT

      WITH OBJECT aBrw[ i ]
         :nEditTypes := EDIT_GET
         :lFullGrid  := .t.
         :CreateFromCode()
      END

   next

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFont

return nil
 


Image

Please build and test the sample without changes and later adopt to your resources and requirements.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Xbrowse en varios folders, tipo excel.

Postby Garbi » Mon Dec 12, 2016 10:09 am

It's work very fine.

Now i adopt to my resources and requirements and i talk you is fine works too.

Very thanks for you.

Happy new year everybody.
Saludos,
Regards,

Jose Luis Alepuz
joseluis@mancomputer.com
www.mancomputer.com
Garbi
 
Posts: 291
Joined: Wed Nov 02, 2005 3:28 pm

Re: Xbrowse en varios folders, tipo excel.

Postby Garbi » Sat Dec 17, 2016 10:30 am

Hola al final he conseguido hacerlo y funciona perfectamente cada folder con su propio array, pero como no conozco muy bien esta clase me gustaría como saber como guardar los datos en un fichero dbf ejemplo:

(cfichero)->fila := ¿?
(cfichero)->columna := ¿?
(cfichero)->pronfudo := ¿?
(cfichero)->unidades := ¿?
(cfichero)->articulo := ¿?

Estos dos últimos valores los obtendría de un dialog que abriría al pulsar sobre la celda y claro deben quedarse asignados a esa celda.¿Como?

Y una consulta: ¿Como puedo indicar que la primera fila no quiero que se pueda editar o que no se le pueda asignar una funcion?

Muchas Gracias, se que al final me saldra todo OK.

Code: Select all  Expand view

VASCII:= 65
vueltas:= 1
 for i:=1 to vcolumnas+1
     if i = 1 .and. vueltas = 1
         AADD(V_Header," ")
         AADD(V_Colsize,50)
     ELSEif vueltas = 1
         AADD(V_Header,chr(VASCII++))
         AADD(V_Colsize,100)
     elseif vueltas = 2
         AADD(V_Header,chr(65)+chr(VASCII++))
         AADD(V_Colsize,100)
     endif
     if vascii =91
        vueltas:=2
        VASCII:= 65
     endif
next i

vprompt:='"'+chr(65)+"'"+'"'
VASCII:= 66
for i:=2 to vprofundo
    vprompt:=vprompt+","+'"'+chr(vascii++)+"'"+'"'
next i

vfolders:='"FOLDERS"'
FOR i:= 2 to vprofundo
    vfolders:=vfolders+","+'"FOLDERS"'
next i

   aData    := Array( vprofundo )
   aData[ 1 ]  := Array( vfilas, vcolumnas+1 )
   AEval( aData[ 1 ], { |a,k| a[ 1 ] := vfilas - k + 1 } )
   AEval( aData, { |u,k| aData[ k ] := AClone( aData[ 1 ] ) }, 2 )
   oBrw  := Array( vprofundo )

 DEFINE DIALOG oDDATOS RESOURCE "FOLDER_VARIOS" TITLE "Titulo " OF oApp:aMod[20]:oWnd


      REDEFINE FOLDER oFld ID 101 OF oDDATOS UPDATE;
             PROMPT &vprompt DIALOGS &vfolders ADJUST

       FOR i:=1 to vprofundo
           REDEFINE XBROWSE oBrw[i] ID 101 ;
                  HEADERS V_Header ;
                  SIZES   V_ColSize ;
                  DATASOURCE aData[i] AUTOCOLS CELL LINES NOBORDER FASTEDIT of oFld:aDialogs[i]

            WITH OBJECT oBrw[ i ]
*           :aCols[1]:nEditType := 0
            :bLDblClick := {|| MsgInfo("Tu function") }
            :bKeychar := {|nkey| iif(nkey=13,MsgInfo("Mi Funcion"),)}
*           :nEditTypes :=EDIT_GET
           :nFreeze:=1
           :lFullGrid  := .t.
*           :CreateFromCode()
           END
       next i

 ACTIVATE DIALOG oDDATOS CENTER ON INIT (oFld:aDialogs[ 1 ]:setfocus(),.f.)


Image
Saludos,
Regards,

Jose Luis Alepuz
joseluis@mancomputer.com
www.mancomputer.com
Garbi
 
Posts: 291
Joined: Wed Nov 02, 2005 3:28 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 86 guests