FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Refrescar XBrowse con Array diferente
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Refrescar XBrowse con Array diferente
Posted: Sat Jul 20, 2013 04:59 AM
Amigos del Foro.
Estoy tratando de refrescar un mismo Xbrowse, desde arrays diferentes. No lo he podido lograr en 2 dias.
Podría decirme alguien que hago mal en este codigo? Si alguno lo ha hecho, puede suministrarme un ejemplo?
El error se presenta cuando alguno de los arrays posteriores al primero tiene longitud menor, y si es mayor solo presenta columnas segun longitud del primer array cargado.

Error description: Error BASE/1132 Bound error: array access
Args:
[ 1] = A { ... }
[ 2] = N 3

Stack Calls
===========
Called from: D:\FERR_P~1\wfic32.prg => (b)FAPSOFTSCAN( 1834 )
Code (fw): Select all Collapse
#include "FiveWin.ch"
#INCLUDE "XBROWSE.CH"
#INCLUDE "INKEY.CH"

//----------------------//
Function Main()
local oDlg, oBrw, oCbx, n
local nWidthRes := GetSysMetrics(SM_CXSCREEN) 
local nHeightRes := GetSysMetrics(SM_CYSCREEN)
local aInfo:={}, aTitCols:={}, aWMIscan, bMonitoring
local cVar 
local aOptions := {" Program Group             ",;
                          " Computer Systen           ",;
                          " Win32 Share                 ",;
                          " Win32 Service               " }

aWMIscan:=FapMonitoring(1)
aInfo:=aWMIscan[1] ; aTitCols:=aWMIscan[2]

DEFINE DIALOG oDlg FROM 1,2 to 15,80 TITLE "FapSoftScan" TRANSPARENT

cVar := aOptions[1]

@2,1 COMBOBOX oCBx VAR cVar OF oDlg ;
     ITEMS aOptions ;
     SIZE 160,12 ;
     ON CHANGE ( aWMIscan:=FapMonitoring(oCBx:nAt()) ,;
                 aInfo:=aWMIscan[1], aTitCols:=aWMIscan[2],;
                 oBrw:SetArray(aInfo),;
                 AEval( oBrw:aCols, { |o,n| o:cHeader := aTitCols[n],;    //aqui se da el error  
                                            o:nHeadStrAlign := AL_CENTER ,;
                                            o:nWidth := 170 } ) ,;
                 oBrw:Refresh(), oBrw:SetFocus() )

@3,1 XBROWSE oBrw OF oDlg ;
     ARRAY {} CELL LINES FOOTERS AUTOSORT 

     oBrw:CreateFromCode()
     oBrw:SetArray(aInfo)

     AEval( oBrw:aCols, { |o,n| o:cHeader := aTitCols[n],;
                                o:nHeadStrAlign := AL_CENTER ,;
                                o:nWidth  := 170 } )

 ACTIVATE DIALOG oDlg ;
   ON INIT ( oDlg:SetSize(nWidthRes-10,nHeightRes-50) ,;
             oDlg:Move(1,2) ,; 
             oBrw:nHeight:=oDlg:nHeight-163, oBrw:nWidth:=oDlg:nWidth-40, oBrw:nTop:=oDlg:nTop+160 )
Return nil

//-------------------------------------------------------------
Function FapMonitoring(nOption)
local aInfo:={}, aTitCols

if nOption == 1
   aInfo:={{"Info1","Info2","Info3"},{"Info1","Info2","Info3"}}
   aTitCols:={"Col1","Col2","Col3"}
elseif nOption == 2
   aInfo:={{"Info1","Info2"}}
   aTitCols:={"Col1","Col2"}
elseif nOption == 3
   aInfo:={{"Info1","Info2","Info3","Info4"},{"Info1","Info2","Info3","Info4"},{"Info1","Info2","Info3","Info4"},{"Info1","Info2","Info3","Info4"}}
   aTitCols:={"Col1","Col2","Col3","Col4"}
elseif nOption == 4
   aInfo:={{"Info1","Info2","Info3"},{"Info1","Info2","Info3"}}
   aTitCols:={"Col1","Col2","Col3"}
endif
RETURN {aInfo,aTitCols}

Gracias de antemano.
Saludos.

upps!!, por longitud diferente me refiero a cantidad de columnas diferentes, sorry.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Refrescar XBrowse con Array diferente
Posted: Sat Jul 20, 2013 09:57 AM
I made a very few modifications in the ON CHANGE clause to avoid the error:
Code (fw): Select all Collapse
     ON CHANGE ( aWMIscan:=FapMonitoring(oCBx:nAt()) ,;
                 aInfo:=aWMIscan[1], aTitCols:=aWMIscan[2],;
                 oBrw:SetArray(aInfo, .t., 1, .t. ),;
                 AEval( oBrw:aCols, { |o,n| o:cHeader := aTitCols[n],;  
                                            o:nHeadStrAlign := AL_CENTER ,;
                                            o:nWidth := 170 } ) ,;
                 oBrw:nColSel := 1, oBrw:Refresh(.t.), oBrw:SetFocus() )
Regards



G. N. Rao.

Hyderabad, India
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Refrescar XBrowse con Array diferente
Posted: Sat Jul 20, 2013 10:06 AM
Your problem is solved with the above corrections.

You can also use the shortcuts below instead of using AEval( oBrw:aCols, ..... )
Code (fw): Select all Collapse
@ 2,1 COMBOBOX oCBx VAR cVar OF oDlg ;
     ITEMS aOptions ;
     SIZE 160,12 ;
     ON CHANGE ( aWMIscan:=FapMonitoring(oCBx:nAt()) ,;
                 aInfo:=aWMIscan[1], aTitCols:=aWMIscan[2],;
                 oBrw:SetArray(aInfo, .t., 1, .t. ),;
                 oBrw:cHeaders := aTitCols, ;
                 oBrw:nHeadStrAligns := AL_CENTER, ;
                 oBrw:nWidths := 170,;
                 oBrw:nColSel := 1, oBrw:Refresh(.t.), oBrw:SetFocus() )
Regards



G. N. Rao.

Hyderabad, India
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Refrescar XBrowse con Array diferente
Posted: Sat Jul 20, 2013 02:53 PM

Mister Nages,
Yes!, it works. You had me removed a burden.
Many thanks.
Best Regards

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql

Continue the discussion