Page 1 of 2

AYUDA COMBOBOX DINAMICO RUTINA NO DEVUELVE ARRAY

Posted: Thu Dec 27, 2018 9:22 pm
by remtec
Amigos

Sigo molestando.

Tengo un problema, debo cargar dinamicamente un Combobox con un arreglo, en una rutina, para cada fecha seleccionada en el calendario.

El problema es que el arreglo se carga con datos desde una DBF en la rutina, proceso que se realiza correctamente, pero no se Actualiza el Combobox, siempre mantiene el dato con el que ingreso la primera ves que inicio el programa. He intentado varias formas vistas en el foro, pero no soluciona el problema.

Esperando poder solucionar mi problema, les saluda muy atte.

Antonio.


Dejo el Código para ver si algún maestro me puede ayuda:

Code: Select all

#include "FiveWin.ch"
#include "xbrowse.ch"
#include "colores.ch"
#include "dtpicker.ch"
#include "calendar.ch"

REQUEST HB_Lang_ESWIN, HB_CODEPAGE_ESWIN


FUNCTION Cua_caj1()
      Local oSay,oDlg,oSay1,oSay2,oSay3,oSay4,oBot1,oBtn1,oSay10,oSay11,oSay12,oSay13
      Local oFiltra,nFiltra,oFont,oFont1,oFont2
      Local nResu1:=1,cResu,oXbrore
      Local aFiltra:= {}
      Local dFecha:=Date(),oFecha

      Private Ing_xbro:=0
      Private nTot_vale:=0,nTot_gen:=0
      Public oIngre ,Mensa:="",cFiltra:="",In1:=0,Tegre:=0,Galle:=0,Bb1:=0

      Private aResu:= {},oResu
      SET DELETED ON
      HB_LangSelect( "ESWIN" )
      HB_SetCodePage( "ESWIN" )

      SET DATE TO BRITISH
      SET EPOCH TO 1980



    SET DATE FORMAT "DD/MM/YYYY"


      AADD( aResu,{ "TODO","TODOS               "})   <== Arreglo del Combobox que cargo con un dato iniciar el programa

    REDEFINE DTPICKER oFecha VAR dFecha ID 103  OF  oDlg  FONT oFont2 PICTURE "@d" UPDATE ;
                ON CHANGE IF(!Proce_Cua(dFecha,cFiltra,@aResu),(MsgStop(Mensa),.F.), (oIngre:Refresh(),oSay:Refresh(),oFiltra:Refresh(),oResu:Refresh(),oXbrore:Refresh(),oSay13:Refresh(), .T.) )
                    ** Aqui Selecciono una Fecha y mando a la Rutina Proce_cua(), se llena el Arreglo aResu(), Pero NO SE ACTUALIZA en el Combobox ID 220, aun cuando paso el arreglo por referencia.

        REDEFINE COMBOBOX oResu VAR nResu1 ITEMS ArrTranspose(aResu)[2] ID 220 OF oDlg COLORS nRGB(9, 11, 10), nRGB(73, 250, 202) Update;      <===== Necesito que este Combobox se llene Dinamicamente dependiendo de la fecha
                 ON CHANGE ((cResu:=ArrTranspose(aResu)[1][oResu:nAt])


                ACTIVATE DIALOG oDlg CENTERED ON INIT (oIngre:SetFocus())




Static FUNCTION Proce_Cua(dFecha,cFiltra,aResu)

             .......
             .......
             .......

             // Aqui se Carga el Arreglo   aResu()

             Sele e
             DbGotop()
             asize( aResu, 0 )
             AADD( aResu,{ "TODO","TODOS               "})   // Agrego un Dato Inicial
             Do While !Eof()
                AADD( aResu,{ e->Cod_cua,e->Nom_cua})
                    e->(DbSkip())
              Enddo

             oResu:Update()
             oResu:Refresh()

             // Aqui he comprobado que el Arreglo viene Cargado con 10 Registros

             Return  .t.


 

Re: AYUDA CON COMBOBOX DINAMICO

Posted: Thu Dec 27, 2018 10:45 pm
by armando.lagunas
prueba con esto

Code: Select all


             // Aqui se Carga el Arreglo   aResu()

             Sele e
             DbGotop()
             asize( aResu, 0 )
             AADD( aResu,{ "TODO","TODOS               "})   // Agrego un Dato Inicial
             Do While !Eof()
                AADD( aResu,{ e->Cod_cua,e->Nom_cua})
                    e->(DbSkip())
              Enddo



             oResu:SetItems( aResu, .t. )       <---- CON ESTO


             oResu:Refresh()

            // oResu:Update()
             // Aqui he comprobado que el Arreglo viene Cargado con 10 Registros

             Return  .t.


 

Re: AYUDA CON COMBOBOX DINAMICO

Posted: Thu Dec 27, 2018 11:35 pm
by remtec
Hola Armando

Muchas gracias por tu ayuda.

Probe tu sugerencia, pero me me arroja este en error.

Muchos Saludos.
Antonio.

Code: Select all

Time from start: 0 hours 0 mins 54 secs 
   Error occurred at: 27/12/2018, 20:31:40
   Error description: Error BASE/1004  No existe el método: EVAL
   Args:
     [   1] = U   

Stack Calls
===========
   Called from:  => (b)EVAL( 0 )
   Called from: .\source\classes\COMBOBOX.PRG => TCOMBOBOX:DEFAULT( 977 )
   Called from: .\source\classes\COMBOBOX.PRG => (b)TCOMBOBOX( 173 )
   Called from: .\source\classes\COMBOBOX.PRG => TCOMBOBOX:SETITEMS( 0 )
   Called from: .\Cua_caj.PRG => PROCE_CUA( 406 )
   Called from: .\Cua_caj.PRG => (b)CUA_CAJ1( 126 )
   Called from: .\source\classes\TDTPICKE.PRG => TDATEPICK:CHANGE( 236 )
   Called from: .\source\classes\TDTPICKE.PRG => TDATEPICK:_CTEXT( 207 )
   Called from: .\source\classes\TDTPICKE.PRG => TDATEPICK:INITIATE( 171 )
   Called from:  => __OBJSENDMSG( 0 )
   Called from: .\source\function\HARBOUR.PRG => OSEND( 291 )
   Called from: .\source\function\HARBOUR.PRG => ASEND( 259 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:INITIATE( 655 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:HANDLEEVENT( 906 )
   Called from:  => DIALOGBOX( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 296 )
   Called from: .\Cua_caj.PRG => CUA_CAJ1( 271 )
   Called from: .\Infocaja.PRG => (b)MAIN( 65 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 684 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 924 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1721 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 1873 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3348 )
   Called from:  => WINRUN( 0 )
   Called from: .\source\classes\WINDOW.PRG => TWINDOW:ACTIVATE( 1037 )
   Called from: .\Infocaja.PRG => MAIN( 88 )

System
======
   CPU type: Intel(R) Core(TM) i7-4510U CPU @ 2.00GHz 2594 Mhz
   Hardware memory: 8085 megs

   Free System resources: 90 %
        GDI    resources: 90 %
        User   resources: 90 %

   Windows total applications running: 5
      1 ,                                                                                                     
      2 , C:\Util\Infocaja\Infocaja.exe                                                                       
      3 , C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.17134.472_none_4102c1 
      4 DDE Server Window, C:\WINDOWS\System32\OLE32.DLL                                                                       
      5 G, C:\WINDOWS\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.17134.472_none_73d7c4b19f76b84 

Variables in use
================
   Procedure     Type   Value
   ==========================
   (b)EVAL
     Param   1:    O    Class: ERROR
   TCOMBOBOX:DEFAULT
     Local   1:    U    
     Local   2:    U    
   (b)TCOMBOBOX
     Local   1:    O    Class: TCOMBOBOX
     Local   2:    U    
   TCOMBOBOX:SETITEMS
     Param   1:    O    Class: TCOMBOBOX
     Param   2:    A    Len:    1
     Param   3:    L    .T.
   PROCE_CUA
     Param   1:    A    Len:    1
     Param   2:    L    .T.
   (b)CUA_CAJ1
     Param   1:    D    27/12/2018
     Param   2:    C    "TODAS"
     Param   3:    A    Len:    1
   TDATEPICK:CHANGE
     Param   1:    O    Class: TDATEPICK
   TDATEPICK:_CTEXT
   TDATEPICK:INITIATE
     Param   1:    D    27/12/2018
   __OBJSENDMSG
     Param   1:    N    1837144
   OSEND
     Param   1:    O    Class: TDATEPICK
     Param   2:    C    "INITIATE"
     Param   3:    N    1837144
   ASEND
     Param   1:    O    Class: TDATEPICK
     Param   2:    C    "INITIATE"
     Param   3:    N    1837144
   TDIALOG:INITIATE
     Param   1:    A    Len:   14
     Param   2:    C    "INITIATE()"
     Param   3:    N    1837144
     Local   1:    S    
   TDIALOG:HANDLEEVENT
     Param   1:    N    985172
     Param   2:    N    1837144
     Local   1:    L    .T.
     Local   2:    U    
     Local   3:    U    
     Local   4:    L    .F.
     Local   5:    U    
     Local   6:    U    
   DIALOGBOX
     Param   1:    N    272
     Param   2:    N    985172
     Param   3:    N    1837144
   TDIALOG:ACTIVATE
     Param   1:    N    4194304
     Param   2:    C    "#1005"
     Param   3:    N    590054
     Param   4:    O    Class: TDIALOG
   CUA_CAJ1
     Param   1:    U    
     Param   2:    U    
     Param   3:    U    
     Param   4:    L    .T.
     Param   5:    U    
     Param   6:    L    .T.
     Param   7:    B    {|| ... }
     Param   8:    U    
     Param   9:    U    
     Param  10:    U    
     Param  11:    U    
     Local   1:    N    590054
     Local   2:    S    
     Local   3:    O    Class: TDIALOG
   (b)MAIN
     Local   1:    O    Class: TSAY
     Local   2:    O    Class: TDIALOG
     Local   3:    O    Class: TSAY
     Local   4:    O    Class: TSAY
     Local   5:    O    Class: TSAY
     Local   6:    O    Class: TSAY
     Local   7:    O    Class: TSAY
     Local   8:    O    Class: TSAY
     Local   9:    O    Class: TCOMBOBOX
     Local  10:    N    1
     Local  11:    O    Class: TFONT
     Local  12:    O    Class: TFONT
     Local  13:    O    Class: TFONT
     Local  14:    N    1
     Local  15:    C    "TODO"
     Local  16:    O    Class: TXBROWSE
     Local  17:    A    Len:    7
     Local  18:    D    27/12/2018
     Local  19:    O    Class: TDATEPICK
   TBTNBMP:CLICK
     Param   1:    O    Class: TBTNBMP
   TBTNBMP:LBUTTONUP
   TCONTROL:HANDLEEVENT
     Param   1:    N    26
     Param   2:    N    26
     Param   3:    N    0
     Local   1:    L    .T.
     Local   2:    N    0
     Local   3:    S    
   TBTNBMP:HANDLEEVENT
     Param   1:    N    514
     Param   2:    N    0
     Param   3:    N    1703962
     Local   1:    U    
   _FWH
     Param   1:    N    514
     Param   2:    N    0
     Param   3:    N    1703962
   WINRUN
     Param   1:    N    1703962
     Param   2:    N    514
     Param   3:    N    0
     Param   4:    N    1703962
     Param   5:    N    4
     Local   1:    O    Class: TBTNBMP
   TWINDOW:ACTIVATE
     Param   1:    N    590054
   MAIN
     Param   1:    C    "MAXIMIZED"
     Param   2:    U    
     Param   3:    U    
     Param   4:    U    
     Param   5:    U    
     Param   6:    U    
     Param   7:    U    
     Param   8:    B    {|| ... }
     Param   9:    U    
     Param  10:    U    
     Param  11:    U    
     Param  12:    U    
     Param  13:    U    
     Param  14:    U    
     Param  15:    U    
     Param  16:    U    
     Param  17:    B    {|| ... }
     Param  18:    U    
     Param  19:    U    
     Param  20:    L    .F.
     Local   1:    O    Class: TWINDOW
     Local   2:    U    
     Local   3:    U    

Linked RDDs
===========
   DBF
   DBFFPT
   DBFBLOB
   DBFNTX

DataBases in use
================

  2: => CUACA1                             RddName: DBFNTX
     ==============================
     RecNo    RecCount    BOF   EOF
          1            0      .T.   .T.

     Indexes in use                        TagName
        => fol_caj                            CUACA1
           tip_pag+str(fol_caj,10)            CUACA21

     Relations in use

  4:    MODICAJA                           RddName: DBFNTX
     ==============================
     RecNo    RecCount    BOF   EOF
          2          693      .F.   .F.

     Indexes in use                        TagName
        => fol_caj                            MODICAJA

     Relations in use

  5:    CUARES1                            RddName: DBFNTX
     ==============================
     RecNo    RecCount    BOF   EOF
         17           16      .T.   .T.

     Indexes in use                        TagName
        => cod_cua                            CUARES1

     Relations in use

Classes in use:
===============
     1 ERROR
     2 HBCLASS
     3 HBOBJECT
     4 TCURSOR
     5 TFONT
     6 TWINDOW
     7 TDIALOG
     8 TBRUSH
     9 TCONTROL
    10 TBITMAP
    11 TSAY
    12 TGET
    13 GET
    14 TCLIPGET
    15 TBUTTON
    16 TRECT
    17 TMENU
    18 TREG32
    19 TMENUITEM
    20 TBAR
    21 TBTNBMP
    22 TMSGBAR
    23 TDATEPICK
    24 TCOMBOBOX
    25 TXBROWSE
    26 TXBRWCOLUMN
    27 TSTRUCT

Memory Analysis
===============
      385 Static variables

   Dynamic memory consume:
      Actual  Value:          0 bytes
      Highest Value:          0 bytes
 

Re: AYUDA CON COMBOBOX DINAMICO

Posted: Thu Dec 27, 2018 11:54 pm
by admsoporte
A ver si este codigo te da una idea para modificar el array en tiempo de ejecucion

Code: Select all

FUNCTION Combox()
local oDlg
local oResu,nresul
local arreglo1:={"opcion 01","opcion 02","opcion03"}
local arreglo2:={"opcion 11","opcion 12","opcion13"}
local arreglo3:={"opcion 21","opcion 22","opcion23"}
local obut1,obut2,obut3
define dialog oDlg FROM 0, 0 TO 20, 80 title "Prueba de combobox"

@1,10 COMBOBOX oResu VAR nresul ITEMS arreglo1 OF oDlg COLORS nRGB(9, 11, 10), nRGB(73, 250, 202) Update
@5,10 button obut1  action (oResu:setitems(arreglo1))
@5,20 button obut2  action (oResu:setitems(arreglo2))
@5,30 button obut3  action (oResu:setitems(arreglo3))
ACTIVATE DIALOG oDlg CENTERED
Return  .t.
 
solo debes sustituir arreglo deseado con el metodo setItems() de la clase combobox

Saludos

Re: AYUDA CON COMBOBOX DINAMICO

Posted: Thu Dec 27, 2018 11:57 pm
by armando.lagunas
es la variable nResul1 tuya, editala con un msginfo() para saber el estado que tiene antes de pasarla a la funcion de llenado de tu combobox y como retorna, yo tube esos mismos problemas y asi lo solucione...

Code: Select all

//-- ejemplo personal

oCbx[11]:SetItems( aEmpSer , .t. )

cEmpSer    := aEmpSer [ AScan( aEmpSer , {|x| SUBSTR(x,1,3) = oDbf->campo } ) ]

oCbx[11]:Refresh()

 

Re: AYUDA CON COMBOBOX DINAMICO

Posted: Fri Dec 28, 2018 12:29 am
by remtec
Armando

Modifique el nombre de la variable, para descartar que no fuera su nombre, consulte su Valor y es: 1
El usar esto " SetItems( aResu, .t. ) ", siempre me mostro error, incluso SetItems( aResu), fue lo primero que probe, pero nada, nunca muestra el arreglo con la actualizacion de los datos que son cargados en la rutina, aun cuando refresco en ambas partes.


Muchos Saludos.

Antonio.

Re: AYUDA CON COMBOBOX DINAMICO

Posted: Fri Dec 28, 2018 7:11 pm
by remtec
Amigos

Nada resulta, se fueron todos de fiesta.

Saludos
Antonio

Re: AYUDA CON COMBOBOX DINAMICO

Posted: Fri Dec 28, 2018 7:59 pm
by admsoporte
Por ningún lado veo la versión de FWH y harbour que estas usando

Re: AYUDA CON COMBOBOX DINAMICO

Posted: Fri Dec 28, 2018 10:37 pm
by remtec
Hola Jose.

Muchas gracias por tu interes.

Estoy lidiando con un Software que desarrollo otro programador.


Code: Select all

Compiler version: Harbour 3.2.0dev (r1506171039)
   FiveWin  version: FWH 17.09
   C compiler version: Borland/Embarcadero C++ 7.0 (32-bit)
   Windows version: 6.2, Build 9200 
  Windows 10.
 
He creado un PRG chico donde copie unos combos funcionales y le agregue un boton y una funcion, he realizado todo tipo de pruebas y no se actualiza el combobox al volver desde la rutina.
Codigo de prueba:

Code: Select all

      // Showing the use of different styles of ComboBoxes controls

#include "FiveWin.ch"
#include "Combos.ch"
#include "dtpicker.ch"
#include "calendar.ch"

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

function Main()

   local oDlg, oSay,oFecha
   local oCbx1, oCbx2, oCbx3 
   
  
     Static cConce:="",oConce,cItem5:=1

     Private aConce:={} ,oCbx5         <=== Arreglo de Combobox que no se actualiza

    AADD( aConce,{ "TODO","TODOS               "})

   SET _3DLOOK ON

   // SkinButtons()

   DEFINE DIALOG oDlg RESOURCE "Combos"


    REDEFINE COMBOBOX oCbx5 VAR cItem5 ITEMS ArrTranspose(aConce)[2] ;                 <===== Esta Combobox, jamas actualiza su lista
           ID ID_DROPDOWNLIST OF oDlg ;
           ON CHANGE (cConce:=ArrTranspose(aConce)[1][oCbx5:nAt])

   REDEFINE BTNBMP ID 105 Resource "#8004" OF oDlg TRANSPARENT ADJUST 2007;
                         ACTION (Proce(@oCbx5,@aConce),oCbx5:Refresh())     <==== Boton que mando a llenar el Combobox  oCbx5, paso las variables por referencia y nada.

   ACTIVATE DIALOG oDlg CENTERED

return nil

Static FUNCTION Proce(oCbx5,aConce)
             asize( aConce, 0 )  <==== Limpio el arreglo
                Sele 5
                Use Cuadratu Shared

                AADD( aConce,{ "TODO","TODOS               "})    <== Asigno un Primer registro
                
                    Do While !Eof()
                        AADD( aConce,{ e->Cod_cua,e->Nom_cua})    <<== LLeno el Array
                        e->(DbSkip())
                    Enddo

             Sele e
             Dbclosearea()

         //     oCbx5:Setitems(aConce,.t.)       <<===== Este comando no lo permite arroja error en la ejecuion.

       //   Hasta Aqui el Array tiene los registros agregados desde la DBF.
       //   Pero al retornar desde donde lo mando a esta rutina, no actualiza la lista y mantiene con los que ingreso al iniciar el programa
             Return  oCbx5

 
Muchos Saludos

Antonio.

Re: AYUDA COMBOBOX DINAMICO RUTINA NO DEVUELVE ARRAY

Posted: Sat Dec 29, 2018 5:14 pm
by remtec
Amigos

He subido un RAR con el codigo para poder revisar y realizar pruebas, para quien dese ayudar.

Feliz Año Nuevo Para Todos, que el proximo año sea de muchas bendicones y exitos para todos.

Link del Codigo:

https://drive.google.com/file/d/15UtgbH ... sp=sharing

Saludos

Antonio

Re: AYUDA COMBOBOX DINAMICO RUTINA NO DEVUELVE ARRAY

Posted: Sat Dec 29, 2018 7:11 pm
by admsoporte
ya probaste agregando en la linea

Code: Select all

REDEFINE BTNBMP ID 105 Resource "#8004" OF oDlg TRANSPARENT ADJUST 2007;
                         ACTION (Proce(@oCbx5,@aConce),oCbx5:Refresh())
 
REDEFINE BTNBMP ID 105 Resource "#8004" OF oDlg TRANSPARENT ADJUST 2007;
ACTION (Proce(@oCbx5,@aConce),oCbx5:setItems(aConce),oCbx5:Refresh())

Saludos

Re: AYUDA COMBOBOX DINAMICO RUTINA NO DEVUELVE ARRAY

Posted: Sat Dec 29, 2018 9:23 pm
by remtec
Hola Jose

Muchas gracias por responder.

He realizado todo tipo de pruebas, incluyendo lo que me indicas, ademas de usar un Combobox sin recursos solo con coordenadas y nada.

Muchos saludos
Antonio.

Al aplicar tu sugerencia, me arroja este error:

Code: Select all

Application
===========
   Path and name: C:\Util\fwh1709\samples\pruecomb.exe (32 bits)
   Size: 3,753,472 bytes
   Compiler version: Harbour 3.2.0dev (r1506171039)
   FiveWin  version: FWH 17.09
   C compiler version: Borland/Embarcadero C++ 7.0 (32-bit)
   Windows version: 6.2, Build 9200 

   Time from start: 0 hours 0 mins 21 secs 
   Error occurred at: 12/29/18, 18:19:41
   Error description: Error BASE/1004  No exported method: SETITEMS
   Args:
     [   1] = A   { ... } length: 6
     [   2] = A   { ... } length: 1

Stack Calls
===========
   Called from:  => SETITEMS( 0 )
   Called from: pruecomb.prg => (b)MAIN( 34 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 684 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 924 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1721 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 1873 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3348 )
   Called from:  => DIALOGBOX( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 296 )
   Called from: pruecomb.prg => MAIN( 37 )

System
======
   CPU type: Intel(R) Core(TM) i7-4510U CPU @ 2.00GHz 2594 Mhz
   Hardware memory: 8085 megs

   Free System resources: 90 %
        GDI    resources: 90 %
        User   resources: 90 %

   Windows total applications running: 4
      1 ,                                                                                                     
      2 , C:\Util\fwh1709\samples\pruecomb.exe                                                                
      3 DDE Server Window, C:\WINDOWS\System32\OLE32.DLL                                                                       
      4 G, C:\WINDOWS\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.17134.472_none_73d7c4b19f76b84 

Variables in use
================
   Procedure     Type   Value
   ==========================
   SETITEMS
     Param   1:    O    Class: ERROR
   (b)MAIN
     Param   1:    A    Len:    1
     Local   1:    U    
     Local   2:    U    
   TBTNBMP:CLICK
     Param   1:    O    Class: TBTNBMP
   TBTNBMP:LBUTTONUP
   TCONTROL:HANDLEEVENT
     Param   1:    N    17
     Param   2:    N    57
     Param   3:    N    0
     Local   1:    L    .T.
     Local   2:    N    0
     Local   3:    S    
   TBTNBMP:HANDLEEVENT
     Param   1:    N    514
     Param   2:    N    0
     Param   3:    N    1114169
     Local   1:    U    
   _FWH
     Param   1:    N    514
     Param   2:    N    0
     Param   3:    N    1114169
   DIALOGBOX
     Param   1:    N    1114169
     Param   2:    N    514
     Param   3:    N    0
     Param   4:    N    1114169
     Param   5:    N    2
     Local   1:    O    Class: TBTNBMP
   TDIALOG:ACTIVATE
     Param   1:    N    4194304
     Param   2:    C    "Combos"
     Param   3:    N    0
     Param   4:    O    Class: TDIALOG
   MAIN
     Param   1:    U    
     Param   2:    U    
     Param   3:    U    
     Param   4:    L    .T.
     Param   5:    U    
     Param   6:    L    .T.
     Param   7:    U    
     Param   8:    U    
     Param   9:    U    
     Param  10:    U    
     Param  11:    U    
     Local   1:    N    0
     Local   2:    S    
     Local   3:    O    Class: TDIALOG
 

Re: AYUDA COMBOBOX DINAMICO RUTINA NO DEVUELVE ARRAY

Posted: Wed Jan 02, 2019 8:53 am
by JESUS MARIN
Buenos días.
Es mi primera respuesta, así que te copio un pequeño ejemplo.
No está hecho desde recursos. No los utilizo.
Me temo que cuando pasas por referencia el objeto, llega a tu segunda rutina como un texto y no como un objeto.
Puedes verlo utilizando la función MsgAlert(Valtype( nombre_del_objeto))

Lo he probado y funciona correctamente :

STATIC FUNCTION PRUEBA()

LOCAL oDlg, oButton, oComboBox, aVariables, cVar

aVariables:={"a","b","c"}



DEFINE DIALOG oDlg TITLE "Prueba de ComboBox dinámico" SIZE 400,200 PIXEL

@10,10 COMBOBOX oComboBox VAR cVar ITEMS aVariables SIZE 100,20 OF oDlg PIXEL UPDATE

@50,50 BUTTON oButton PROMPT "Cambiar combo" OF oDlg PIXEL SIZE 100,20 ACTION ( aVariables:=CambiaCombo(oComboBox,aVariables), cVar:=aVariables[1], oComboBox:SetFocus(), oDlg:Update() )



ACTIVATE DIALOG oDlg CENTER

RETURN(NIL)


STATIC FUNCTION CambiaCombo(oComboBox,aVariables)

* Ahora mi arreglo para cambiar el contenido, cambialo por el tuyo

IF aVariables[1]="a"
aVariables:={}
aVariables:={"1","2","3"}
ELSE
aVariables:={}
aVariables:={"a","b","c"}
ENDIF

* Asignacion
oComboBox:SetItems(aVariables)


* Devuelo las nuevas variables por si las tengo que utilizar en el Dialogo

RETURN(aVariables)

Re: AYUDA COMBOBOX DINAMICO RUTINA NO DEVUELVE ARRAY

Posted: Thu Jan 03, 2019 4:37 pm
by remtec
Hola Jesus

Muchas gracias por ayudarme, mas aun si es tu primera intervención.

Disculpa por responder recien, habia tenido un problema con mi notebook, lo tuve que formatear y reinstalar todo.

Estuve viendo tu respuesta, veo que trabajas con un boton, que manda al proceso de cambio de array.

En mi caso el cambio se realiza en la Opcion Actualizacion de Fecha en el calendario, lo que hace es ir a la Funcion Proce_Cua(), donde rescata la informacion para la fecha solicitada, llena el Xbrowse y tambien carga con datos el Combobox, por lo que este proceso es dinamico y trabajo con un On Change por medio de una If y no se me ocurre, como debo aplicar tu sugerencia.

Muchos Saludos.
Antonio

Mira te dejo el codigo del recurso donde se actualiza la Fecha:

Code: Select all

           REDEFINE DTPICKER oFecha VAR dFecha ID 103  OF  oDlg  FONT oFont2 PICTURE "@d" UPDATE ;
                                    ON CHANGE IF(!Proce_Cua(dFecha,cFiltra),(MsgStop(Mensa),.F.), (oIngre:Refresh(),oSay:Refresh(),oFiltra:Refresh(),oXbrore:Refresh(),oSay13:Refresh(), .T.) )

 

Re: AYUDA COMBOBOX DINAMICO RUTINA NO DEVUELVE ARRAY

Posted: Thu Jan 03, 2019 7:04 pm
by JESUS MARIN
Buenas tardes Antonio.
Si, aunque no lo parezca es mi primera intervención. Siempre es bueno poder ayudar. Siempre se aprende algo.
(aunque realmente programo desde 1988. dbase II, dbase III, dbase III+, Clipper 5.0, Clipper 5.2, Fivewin (siempre que he podido), etc...)

Realmente el propósito de mi respuesta era responder a la pregunta que tu formulas. Que el ComboBox no se actualiza. Como puedes comprobar en el ejemplo simple que te he copiado, SI se actualiza.

Por lo tanto, no falla el control. Falla el código. ( o tal vez como está definido en los recursos. Ahí no te puedo ayudar)

En cuanto a tu nueva pregunta : ¿cómo hacerlo desde el evento ON CHANGE del objeto DTPICKER ?
Bueno... existen diversas maneras de hacerlo.

1) Puedes pasar los controles a tu segunda función y (si se cumplen ciertas condiciones) efectuar diversas acciones : actualizar datos, controles, refresh, etc...
2) Puedes crear in IF() y dentro de esta función asignada al objeto DTPICKER, ejecutar dichas acciones.

Nota: Lo he puesto en un botón para simplificar el ejemplo.

Creo que depende de gustos.

Para mi opinión funcional, es lo mismo.
Para mi gusto, si son pocas acciones las pongo en un IF(). Si son muchas prefiero ejecutarlas en el siguiente procedimiento.

Sobre todo para que el código sea claro y fácil de leer. Eso ayuda mucho cuando vuelves a leer tu propio código unos años después.

Espero que mi ejemplo sobre la actualización dinámica del objeto COMBOBOX (que si funciona), resuelva tu duda sobre dicho objeto.