jrestojeda wrote:Amigo,
No entiendo porque defines los Arrays de 11 posiciones en vez de 10.
Prueba eso...
Saludos,
lo he puesto por probar si estaba el error hay, pero te puedo asegurar que ni con 10 ni nada.
yo no lo entiendo.
jrestojeda wrote:Amigo,
No entiendo porque defines los Arrays de 11 posiciones en vez de 10.
Prueba eso...
Saludos,
Es raro che lo que dices...
Yo hago bastante seguido ese tipo de Arrays de controles, nunca tuve problema!!
Saludos,
#include "fivewin.ch"
function main()
聽 local oDlg
聽 local cId := space( 10 )
聽 local cPass := space( 10 )
聽 local oBtn
聽 local fila:=4
聽 local oCheck[10],valor[10]
聽 local a
聽
聽 afill( valor, .f. )
聽
聽 define dialog oDlg pixel size 400,400
聽
聽 @ 01,01 Get oGetn var cId pixel of oDlg
聽 @ 20,01 Get oGetP var cPass Password pixel of oDlg ;
聽 on change( if( empty( oGetP:oGet:Buffer ), oBtn:Disable(), oBtn:Enable() ) )
聽// oBtn:Disable()
聽
聽 for a=1 to 10
聽 聽 聽oCheck[ a ] := TCheckBox():New(fila + a, 2, "este es el elemento "+alltrim(str(a)),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 MakeChkBox( valor, a ), oDlg )
聽 next 聽 聽 聽
聽
聽activate dialog oDlg
聽
return nil
Function MakeChkBox( valor, a )
Return { | u | If( PCount()==0, valor[ a ], valor[ a ]:= u ) }gracias, acabo de llegar voy a comer vuelvo a trabajar y cuando venga a la noche lo miro
muchas gracias
Daniel Garcia-Gil wrote:Jefe...
El problema lo tienes pq cuando creas los checkbox de esa forma al momento de terminar el ciclo FOR la variable "a" tendra un valor de 11, por eso imagino que debes crear los arrays con esa dimencion para que no te genere un error de acceso al array, por eso siempre tomara el ultimo valor del array el valor a usar en este caso seria siempre el que esta en la posicion 11....
Cuando creamos checkbox, get, etc, siempre se genera un codeblock bSETGET = { | u | If( PCount()==0, x, x:= u ) }, esto hara que se asigne un nuevo valor al control o mantener el actual.
Para correjir tu problema necesitas asignar la variable generando tu mismo el codeblock por medio de una funcion, pasandole como parametros el array y la posicion del mismo, por tal razon no podras usar el comando @ X,Y ya que este te general el bSETGET automaticamente
Function MakeChkBox( valor, a )
Return { | u | If( PCount()==0, valor[ a ], valor[ a ]:= u ) }
te dejo el ejemplo completo, pruebalo y nos comentas
Muchas gracias ahora si que funciona bien. He puesto el bot贸n que faltaba y la funci贸n de poner los cuatro checkbox primeros activados.
Lo que no entiendo es la funci贸n makechkbox.
Pongo el c贸digo nuevo
#include "fivewin.ch" function main() local oDlg local cId := space( 10 ) local cPass := space( 10 ) local oBtn local fila:=4 local oCheck[10],valor[10] local a afill( valor, .f. ) define dialog oDlg pixel size 400,400 @ 01,01 Get oGetn var cId pixel of oDlg @ 20,01 Get oGetP var cPass Password pixel of oDlg ; on change( if( empty( oGetP:oGet:Buffer ), oBtn:Disable(), oBtn:Enable() ) ) // oBtn:Disable() @ 40,01 button oBtn prompt "OK" of oDlg pixel ACTION cambiacheck(ocheck,@valor) for a=1 to 10 oCheck[ a ] := TCheckBox():New(fila + a, 2, "este es el elemento "+alltrim(str(a)),; MakeChkBox( valor, a ), oDlg ) next activate dialog oDlg return nil Function MakeChkBox( valor, a ) Return { | u | If( PCount()==0, valor[ a ], valor[ a ]:= u ) } Function CambiaCheck(oCheck,Valor) Local A FOR A=1 TO 4 valor[a]:=.t. oCheck[a]:Refresh() NEXT
Muchas gracias a todos.
Thanks for info.