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.