xBrowse y SetArray(aArray) (SOLUCIONADO)

Post Reply
User avatar
FranciscoA
Posts: 2163
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

xBrowse y SetArray(aArray) (SOLUCIONADO)

Post by FranciscoA »

Amigos del Foro: Solicito un pequeño ejemplo, u orientación sobre el uso de xbrowse con arrays. (ya he visto los ejemplos en samples y aquí en el foro, pero no encuentro lo que deseo)
Antes que nada, esto lo tengo resuelto con TWinbrowse, pero quiero pasarlo a TxBrowse.

El caso es el siguiente: Tengo un dialogo con algunos gets y un xbrowse desde recursos. Al crear el brow le cargo un array vacío asi: aMiArray:={{"","",""}} (pueden ser mas columnas), y todo bien. (este array lo he declarado Static)

Más adelante, al actualizar cualquiera de los gets con un VALID activo una function llamada Actualizar(oBrw)
Dentro de esta funcion recargo el array con : (con la misma estructura, solo cambio datos)
aMiArray:={}
aMiArray:={{"nvo dato","otro","otro"}}
oBrw:SetArray(aMiArray)
oBrw:Refresh()

El oBrow recarga bien el array en cuanto a los datos, pero pierde los titulos de las columnas, los footers definidos y la presentacion de los valores numéricos. (pierde los pictures "9,999,999,999.99")

Mi pregunta es: ¿Como hacer para que al refrescar el browse no se pierdan los headers, footers y los pictures?
Nota: Al refrescar el Browse, los headers aparecen asi: oCol-1,oCol-2, etc,etc. y los footers en blanco.

Agradezco de antemano cualquier ayuda al respecto.
Saludos
Last edited by FranciscoA on Sat Sep 26, 2009 3:28 am, edited 1 time in total.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
pablovidal
Posts: 401
Joined: Thu Oct 06, 2005 10:15 pm
Location: Republica Dominicana
Contact:

Re: xBrowse y SetArray(aArray)

Post by pablovidal »

Code: Select all | Expand


aMiArray:={}
aMiArray:={{"nvo dato","otro","otro"}}
//oBrw:SetArray(aMiArray)
oBrw:aArrayData  := aMiArray // <- Asi es
oBrw:Refresh()
 
Saludos,

Pablo Alberto Vidal
/*
------------------------------------------------------
Harbour 3.2.0, Fivewin 17.02, BCC7
------------------------------------------------------
*/
User avatar
FranciscoA
Posts: 2163
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: xBrowse y SetArray(aArray)

Post by FranciscoA »

Pablo, Gracias por contestar. Agradezco tu interés.
Es correcto como tú indicas. Ya lo había probado así, pero sólo me presenta un registro del array. Mejor dicho, el Browse muestra tantos registros como contiene el array, pero todos con los mismos datos del primer registro.

Como dije anteriormente, si lo hago así: oBrw:SetArray(MiArray), muestra bien todos los datos, pero perdiendo los headers,footers y pictures.

¿Qué me dices tú?, o alguien más en el foro.
Gracias nuevamente.
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: xBrowse y SetArray(aArray)

Post by FranciscoA »

Aqui dejo un ejemplo funcional de lo que estoy haciendo. Agradeceré cualquier ayuda.
Saludos.

Code: Select all | Expand

#include "FiveWin.ch"
#include "xBrowse.ch"

static nTotalItems:=0
Static aMiArray := { {"", "" } }

//--------------------------------------------------------------------------------------------------------------------//

Function Main()
local oBrw,oGet1,oGet2
local nItem:=1
local n:=0,oCol

   Local oDlg, nConsec:=0,dFecIni:=Date()


   SET DATE BRITISH
   SET CENTURY ON
   SET CONFIRM ON
   SET EPOCH TO 1990

   SET RESOURCES TO "Financ.dll"

   dFecIni  := Date()

   DEFINE DIALOG oDlg RESOURCE "INTERES"

   REDEFINE GET oGet1 VAR nConsec ID 101 OF oDlg ;
            UPDATE ;
            PICTURE "9999" ;
            VALID ( if(!empty(nConsec), (Actualice(oBrw, nConsec, dFecIni ), .T.),(MsgStop("Debe ingresar un valor.","Alto"),.f.) ) )

   oGet1:bGotFocus := {||oGet1:SetColor( CLR_WHITE, CLR_BLUE ) }
   oGet1:bLostFocus := {||oGet1:SetColor( CLR_BLACK, CLR_WHITE ) }


   REDEFINE GET oGet2 VAR dFecIni ID 102 OF oDlg ;
            UPDATE ;
            VALID ( if(!empty(dFecIni), (Actualice(oBrw, nConsec, dFecIni ), .T.),(MsgStop("Debe ingresar un valor.","Alto"),.f.) ) )

   oGet2:bGotFocus := {||oGet2:SetColor( CLR_WHITE, CLR_BLUE ) }
   oGet2:bLostFocus := {||oGet2:SetColor( CLR_BLACK, CLR_WHITE ) }


   //Para mostrar separadores de miles en TxBrowse
   xbrNumFormat( "A", .t. )  // "E" for European, "A" for American and others
                             // .t. for showing thousand separators

   oBrw := TXBrowse():New( oDlg )

      //ESTILOS DE LINEAS
   oBrw:nMarqueeStyle       := MARQSTYLE_HIGHLROW    //barra selectora
   oBrw:nColDividerStyle     := LINESTYLE_INSET
   oBrw:nRowDividerStyle     := LINESTYLE_INSET
   oBrw:lColDividerComplete  := .t.    //completa pintado hasta el footer cuando lineas no llenan todo el browse

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

   //COLORES (texto y fondo del texto)
   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(  0,  0,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:nRowHeight   := 20  //altura entre lineas
   oBrw:lFastEdit := .f.    //.t.= edicion rapida, salta a sig col


   //COLUMNAS DEL BROWSE
   oCol = oBrw:AddCol()
   oCol:bStrData = { || Transform(aMiArray[1][1],"9999") }
   oCol:nDataStrAlign := 1
   oCol:cHeader = "Consec"
   oCol:bFooter  =  {|| TRANSFORM(nTotalItems,"999999") }
   oCol:nFootStrAlign := 1

   oCol = oBrw:AddCol()
   oCol:bStrData = { || aMiArray[1][2] }
   oCol:nDataStrAlign := 1
   oCol:cHeader = "Fecha"

   oBrw:CreateFromResource(181)
   oBrw:SetArray(aMiArray)

   ACTIVATE DIALOG oDlg CENTERED

   
   SET RESOURCES TO

Return Nil


//--------------------------------------------------------------------------------------------------------------------//

Static Function Actualice(oBrw, nConsec, dFecIni )

   Local dFecha  := dFecIni, xVeces:=nConsec

   aMiArray  := {}

   If empty(nConsec) .OR. empty(dFecha)
      Return NIL
   EndIf

   While xVeces <= ( 10 )

      AAdd( aMiArray, { xVeces++, DtoC( dFecha ) } )
      dFecha += 10

   EndDo

   nTotalItems := xVeces


//oBrw:aArrayData:=aMiArray  //este presenta todos los registros con el valor del primero
  oBrw:SetArray(aMiArray)   //presenta bien los registros, pero sin headers,footers,pictures
   oBrw:Refresh()
Return NIL
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: xBrowse y SetArray(aArray)

Post by Daniel Garcia-Gil »

Francisco...

Falta el recurso para construir el ejemplo...

Pero prueba agreando esto a cada definicion de columna

oCol:nArrayCol := 1
oCol:nArrayCol := 2

y haces como te lo indica pablo
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: xBrowse y SetArray(aArray)

Post by Daniel Garcia-Gil »

Francisco...

Este es un ejemplo

Code: Select all | Expand

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

function Main()

  local oWnd
  local oWndDlg,;
         oBrw,;
         oCol
         
  local aArray := { }
   
  define dialog oWndDlg title "Test Blank Array on Dialog" size 500,500 pixel
           
  oBrw := TXBrowse():New( oWndDlg )
  oBrw:SetArray( aArray )
  oCol:= oBrw:addcol()
  oCol:cHeader   := "Num1"
  oCol:nWidth    := 40
  oCol:nArrayCol := 1  // it is necesary

  oCol:= oBrw:addcol()
  oCol:cHeader := "Date"
  oCol:nWidth  := 80
  oCol:nArrayCol := 2  // it is necesary

  oCol:= oBrw:addcol()
  oCol:cHeader := "Time"
  oCol:nWidth  := 80
  oCol:nArrayCol := 3  // it is necesary

  oCol:= oBrw:addcol()
  oCol:cHeader := "Extra"
  oCol:nWidth  := 80
  oCol:nArrayCol := 4  // it is necesary
 

  oBrw:lFastEdit    := .t.
  oBrw:lAutoAppend  := .t.

  if oBrw:lAutoAppend .and. oBrw:lFastEdit
     oBrw:bPastEof  := { || Actualice( oBrw, oBrw ), oBrw:GoBottom(), oBrw:Refresh() }
  endif        
  oBrw:CreateFromCode()
 
  oWndDlg:oClient := oBrw
 
  activate dialog oWndDlg on init( BtnBar( oWndDlg, oBrw ), oWndDlg:Resize() )
           
return nil

function BtnBar( oParent, oBrw )
   local oBar


   DEFINE buttonbar oBar of oParent size 80,32 2007

   define button of oBar prompt "Append" action  Actualice(oBrw, 1, date() )

   define button of oBar prompt "Delete" action DeleteRow( oBrw )

   define button of oBar prompt "Quit" action ( oParent:end() )

 
return nil

Function Actualice(oBrw, nConsec, dFecIni )

   Local dFecha  := dFecIni, xVeces:=nConsec

   aMiArray  := {}

   If empty(nConsec) .OR. empty(dFecha)
      Return NIL
   EndIf

   While xVeces <= ( 10 )

      AAdd( aMiArray, { xVeces++, DtoC( dFecha ), time(), time() + " " + DtoC( date() ) } )
      dFecha += 10

   EndDo

   nTotalItems := xVeces


oBrw:aArrayData:=aMiArray  //este presenta todos los registros con el valor del primero
//  oBrw:SetArray(aMiArray)   //presenta bien los registros, pero sin headers,footers,pictures
   oBrw:Refresh()
Return NIL

static function DeleteRow( oBrw )

  if !empty( oBrw:aArrayData )

     ADel(  oBrw:aArrayData, oBrw:nArrayAt )
     ASize( oBrw:aArrayData, Len( oBrw:aArrayData ) - 1 )

     oBrw:Refresh()
     oBrw:SetFocus()

  endif

return nil


 
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
FranciscoA
Posts: 2163
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: xBrowse y SetArray(aArray)

Post by FranciscoA »

Daniel, muchas gracias por contestar. Aquí está el recurso (.rc)
Hice los ajustes que indicas en el primer post y sigue lo mismo. Tu ejemplo me ha dado otras ideas, y por supuesto me es útil. Continúo luchando con lo que quiero hacer. Gracias, nuevamente.
Saludos.

pd: A mi ejemplo hay que quitarle las lineas referentes a: SET RESOURCES TO...
// RESOURCE SCRIPT generated by "Pelles C for Windows, version 6.00".

LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US

INTERES DIALOG FIXED IMPURE 0, -29, 476, 227
STYLE WS_POPUP|DS_MODALFRAME|WS_CAPTION|WS_SYSMENU|WS_VISIBLE
CAPTION "Prueba de TxBrowse"
FONT 8, "MS Sans Serif"
{
CONTROL "", 101, "Edit", ES_RIGHT|ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 120, 6, 80, 12
CONTROL "", 102, "Edit", ES_RIGHT|ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 120, 22, 52, 12
CONTROL "", 181, "ListBox", LBS_SORT|LBS_NOTIFY|LBS_MULTICOLUMN|WS_HSCROLL|WS_VSCROLL|WS_BORDER|WS_TABSTOP, 2, 40, 472, 174
CONTROL "Consecutivo", 4003, "Static", SS_RIGHT|WS_GROUP, 6, 8, 112, 8
CONTROL "Fecha", 4004, "Static", SS_RIGHT|WS_GROUP, 6, 24, 110, 8
}
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: xBrowse y SetArray(aArray)

Post by Daniel Garcia-Gil »

Francisco

El ejemplo que he publicado funciona perfectamente... voy a subir un ejecutable
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: xBrowse y SetArray(aArray)

Post by Daniel Garcia-Gil »

Francisco...

aqui dejo el ejecutable como he prometido


http://www.sitasoft.com/fivewin/test/xbrarra2.rar
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
FranciscoA
Posts: 2163
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: xBrowse y SetArray(aArray)

Post by FranciscoA »

Daniel, efectivamente tu ejecutable funciona bien.
El ejemplo compila y ejecuta sin ningún problema, pero al "clickear" en el boton append o delete no hace nada.
Estoy pensando que es cuestión de versión de FWH (uso 901) :roll:
Muchísimas gracias.
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: xBrowse y SetArray(aArray) (SOLUCIONADO)

Post by FranciscoA »

Hola Daniel.
Comprobado, es cuestión de versión. He leído varios post en los cuales se describe este inconveniente.
Sin embargo, he logrado solucionarlo de la manera siguiente. Dejo el ejemplo por si alguien tiene el mismo problema que yo.
Decidí no tocar la Classe TxBrowse. El recurso está posteado un poco más arriba.


#include "FiveWin.ch"
#include "xBrowse.ch"

static aTitCols:={}
static aFootCols:={}
static aWidthCols:={}
static aPictCols:={}

static nValores:=0

//--------------------------------------------------------------------------------------------------------------------//

Function Main()
local oBrw,oGet1,oGet2
local n:=0,oCol

Local oDlg, nConsec:=0,dFecIni:=Date()
local aMiArray:={{"","","",""}}

SET DATE BRITISH
SET CENTURY ON
SET CONFIRM ON
SET EPOCH TO 1990

dFecIni := Date()

DEFINE DIALOG oDlg RESOURCE "INTERES" TITLE "PRUEBA DE TXBROWSE CON ARRAY"

REDEFINE GET oGet1 VAR nConsec ID 101 OF oDlg ;
UPDATE ;
PICTURE "9999" ;
VALID ( if(!empty(nConsec), (Actualice(oBrw, nConsec, dFecIni ), .T.),(MsgStop("Debe ingresar un valor.","Alto"),.f.) ) )

oGet1:bGotFocus := {||oGet1:SetColor( CLR_WHITE, CLR_BLUE ) }
oGet1:bLostFocus := {||oGet1:SetColor( CLR_BLACK, CLR_WHITE ) }


REDEFINE GET oGet2 VAR dFecIni ID 102 OF oDlg ;
UPDATE ;
VALID ( if(!empty(dFecIni), (Actualice(oBrw, nConsec, dFecIni ), .T.),(MsgStop("Debe ingresar un valor.","Alto"),.f.) ) )

oGet2:bGotFocus := {||oGet2:SetColor( CLR_WHITE, CLR_BLUE ) }
oGet2:bLostFocus := {||oGet2:SetColor( CLR_BLACK, CLR_WHITE ) }


oBrw := TXBrowse():New( oDlg )

//ESTILOS DE LINEAS
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW //barra selectora
oBrw:nColDividerStyle := LINESTYLE_INSET
oBrw:nRowDividerStyle := LINESTYLE_INSET
oBrw:lColDividerComplete := .t. //completa pintado hasta el footer cuando lineas no llenan todo el browse

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

//COLORES (texto y fondo del texto)
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( 0, 0,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:nRowHeight := 20 //altura entre lineas

//COLUMNAS DEL BROWSE
oCol = oBrw:AddCol()
oCol:bStrData = { || Transform(aMiArray[1][1],"9999") }
oCol:nDataStrAlign := 1
oCol:cHeader = "Consec"
oCol:bFooter = {|| "Hola" }
oCol:nFootStrAlign := 1
oCol:nWidth = 44
oCol:cEditPicture := NumPict( 4, 0, .F., .f. )


oCol = oBrw:AddCol()
oCol:bStrData = { || aMiArray[1][2] }
oCol:nDataStrAlign := 1
oCol:cHeader = "Fecha"
oCol:bFooter = {|| "Hola" }
oCol:nWidth = 88

oCol = oBrw:AddCol()
oCol:bStrData = { || aMiArray[1][3] }
oCol:nDataStrAlign := 1
oCol:cHeader = "Hora"
oCol:nWidth = 88

oCol = oBrw:AddCol()
oCol:bStrData = { || aMiArray[1][4] }
oCol:nDataStrAlign := 1
oCol:cHeader = "Valores"
oCol:bFooter = {|| TRANSFORM(nValores,"9,999,999,999.99") }
oCol:nWidth = 100
oCol:cEditPicture := NumPict( 14, 2, .F., .t. )


For n:=1 to len(oBrw:aCols)
aadd(aTitCols,oBrw:aCols[n]:cHeader)
aadd(aFootCols,oBrw:aCols[n]:bFooter)
aadd(aWidthCols,oBrw:aCols[n]:nWidth)
aadd(aPictCols,oBrw:aCols[n]:cEditPicture)
Next


oBrw:CreateFromResource(181)
oBrw:SetArray(aMiArray)


ACTIVATE DIALOG oDlg CENTERED

Return Nil


//--------------------------------------------------------------------------------------------------------------------//

Static Function Actualice(oBrw, nConsec, dFecIni )

Local dFecha := dFecIni, xVeces:=1, nValor:=1000
local aMiArray := {}

If empty(nConsec) .OR. empty(dFecha)
Return NIL
EndIf

nValores:=0

While xVeces <= nConsec

AAdd( aMiArray, { xVeces++, DtoC( dFecha ), time(), nValor } )
dFecha += 10
nValores+=nValor
nValor ++

EndDo


oBrw:SetArray(aMiArray)
AEval( oBrw:aCols, {|oCol| oCol:cHeader := aTitCols[oCol:nArrayCol] ,;
oCol:bFooter := aFootCols[oCol:nArrayCol] ,;
oCol:nWidth:= aWidthCols[oCol:nArrayCol] ,;
oCol:cEditPicture:= aPictCols[oCol:nArrayCol] } )

oBrw:Refresh()


Return NIL
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
Patricio Avalos Aguirre
Posts: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Re: xBrowse y SetArray(aArray) (SOLUCIONADO)

Post by Patricio Avalos Aguirre »

Estimados

El ejemplo que propone Daniel sale una columna fantasma "Col1", a mi una columna "A"
como se soluciona esto?
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
elmoiquique
Posts: 323
Joined: Wed May 16, 2007 9:40 pm
Location: Region de Ñuble, Chile

Re: xBrowse y SetArray(aArray) (SOLUCIONADO)

Post by elmoiquique »

una consulta, como puedo sumar una columna del xbrowse en el footer
Fivewin-Xharbour 24.09, Iquique, Chile
Post Reply