¿ Como se crea un array de checbox ? (solucionado)

jefe
Posts: 23
Joined: Thu Apr 09, 2009 10:30 pm
Location: Valladolid, españa

¿ Como se crea un array de checbox ? (solucionado)

Post by jefe »

Buenos días a todos.

Bueno pues sigo investigando con esta librería de FWH.

Me encuentro con un problema y no se como resolverlo, vereis quiero crear un array con 10 checkbox y no se como se hace.

Code: Select all


#include "fivewin.ch"

function main()
  local oDlg
  local cId := space( 10 )
  local cPass := space( 10 )
  local oBtn
  local fila:=5
  local oCheck,valor,a
  
  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() ) )
  @ 40,01 button oBtn prompt "OK" of oDlg pixel ACTION MsgInfo( "click" )
  
  oBtn:Disable()
  
  for a=1 to 10
     
     @ fila+a, 2 checkbox oCheck var valor prompt "este es el elemento "+alltrim(str(a))

  next       
 
     
 
  for a=1 to 1
      valor:=.t.
      oCheck:refresh()
  next    
  
  activate dialog oDlg
 
return nil

 


Me podeis ayudar, no se como seguir


Gracias de antemano.
Last edited by jefe on Mon May 04, 2009 7:00 pm, edited 1 time in total.
jefe
Posts: 23
Joined: Thu Apr 09, 2009 10:30 pm
Location: Valladolid, españa

Re: ¿ Como se crea un array de checbox ?

Post by jefe »

He probado este cambio, pero no me funciona.

como se observa en el último FOR NEXT intento activar los cuatro primeros pero nada de nada.

Code: Select all


#include "fivewin.ch"

function main()
  local oDlg
  local cId := space( 10 )
  local cPass := space( 10 )
  local oBtn
  local fila:=5
  local oCheck[11],valor[11],a
  
  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() ) )
  @ 40,01 button oBtn prompt "OK" of oDlg pixel ACTION MsgInfo( "click" )
  
  oBtn:Disable()
  
  for a=1 to 10
     
     @ fila+a, 2 checkbox oCheck[a] var valor[a] prompt "este es el elemento "+alltrim(str(a))

  next       
 
     
 
  for a=1 to 4
      valor[a]:=.t.
      oCheck[a]:refresh()
  next    
  
  activate dialog oDlg
 
return nil
User avatar
jrestojeda
Posts: 543
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: ¿ Como se crea un array de checbox ?

Post by jrestojeda »

Prueba lo siguiente...
Ya que no son tantos los Check definir los 10 es una posibilidad.

Code: Select all

#include "fivewin.ch"

Function main()
Local oDlg
Local cId  :=Space(10)
Local cPass:=Space(10)
Local fila :=5
Local oBtn
Local oCheck[10],valor[10],A
  
FOR A=1 TO 4 
   Valor[A]:=.t.
NEXT 

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() ) )
   @ 40,01 button oBtn prompt "OK" of oDlg pixel ACTION MsgInfo( "click" )
  
   oBtn:Disable()
 
   @ fila+1 , 2 checkbox oCheck[ 1] var valor[ 1] prompt "este es el elemento "+alltrim(str(1))  
   @ fila+2 , 2 checkbox oCheck[ 2] var valor[ 2] prompt "este es el elemento "+alltrim(str(2))
   @ fila+3 , 2 checkbox oCheck[ 3] var valor[ 3] prompt "este es el elemento "+alltrim(str(3))
   @ fila+4 , 2 checkbox oCheck[ 4] var valor[ 4] prompt "este es el elemento "+alltrim(str(4))
   @ fila+5 , 2 checkbox oCheck[ 5] var valor[ 5] prompt "este es el elemento "+alltrim(str(5))
   @ fila+6 , 2 checkbox oCheck[ 6] var valor[ 6] prompt "este es el elemento "+alltrim(str(6))
   @ fila+7 , 2 checkbox oCheck[ 7] var valor[ 7] prompt "este es el elemento "+alltrim(str(7))
   @ fila+8 , 2 checkbox oCheck[ 8] var valor[ 8] prompt "este es el elemento "+alltrim(str(8))
   @ fila+9 , 2 checkbox oCheck[ 9] var valor[ 9] prompt "este es el elemento "+alltrim(str(9))
   @ fila+10, 2 checkbox oCheck[10] var valor[10] prompt "este es el elemento "+alltrim(str(10))

Activate Dialog oDlg
 
Nota: No estaría bien que definas el Array de 11 posiciones, si lo que quieres es que tenga 10 posiciones debes crearlo de 10 no de 11.

Espero te sirva.
Saludos,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
jefe
Posts: 23
Joined: Thu Apr 09, 2009 10:30 pm
Location: Valladolid, españa

Re: ¿ Como se crea un array de checbox ?

Post by jefe »

ante todo muchas gracias por contestar, pero no lo entiendo.

Esta vez son sólo 10 elementos pero si son 100 ¿hay que escribir uno a uno ?

he cambiado el código sólo el final que es lo mismo que has echo tu, pero luego no muestra los cuatro elementos marcados.

Code: Select all


#include "fivewin.ch"

function main()
  local oDlg
  local cId := space( 10 )
  local cPass := space( 10 )
  local oBtn
  local fila:=5
  local oCheck[10],valor[10],a
  
  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() ) )
  @ 40,01 button oBtn prompt "OK" of oDlg pixel ACTION MsgInfo( "click" )
  
  oBtn:Disable()
  
  for a=1 to 10
     valor[a]=.f.
     @ fila+a, 2 checkbox oCheck[a] var valor[a] prompt "este es el elemento "+alltrim(str(a)) 
  next       
 
     
 
  for a=1 to 4
      valor[a]:=.t.
  next    
  
  activate dialog oDlg
 
return nil
User avatar
jrestojeda
Posts: 543
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: ¿ Como se crea un array de checbox ?

Post by jrestojeda »

Amigo,
El FOR que pone los primeros 4 elementos en .t. va antes del DEFINE DIALOG.
Prueba ponerlo antes...
Saludos,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: ¿ Como se crea un array de checbox ?

Post by Armando »

Jefe (Sí que es raro tu nombre)

Creo que la activación de los cuatro check que quieres poner a .T. debes ponerlo en el ON INIT del dialogo

Code: Select all

ACTIVATE DIALOG oDlg ON INIT (Valor[1] := .T. ,Valor[2] := .T. ,Valor[3] := .T. , Valor[4] := .T.)
 
Ojalá te ayude
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
jefe
Posts: 23
Joined: Thu Apr 09, 2009 10:30 pm
Location: Valladolid, españa

Re: ¿ Como se crea un array de checbox ?

Post by jefe »

jrestojeda wrote:Amigo,
El FOR que pone los primeros 4 elementos en .t. va antes del DEFINE DIALOG.
Prueba ponerlo antes...
Saludos,

si, pero si lo que quiero es mostrar primero los checkbox y luego que al pulsar un botón muestre los cuatro primeros como marcados .t.


un saludo y gracias, perdona por la chapa que te estoy dando.
User avatar
jrestojeda
Posts: 543
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: ¿ Como se crea un array de checbox ?

Post by jrestojeda »

Ok!
Entonces debes ponerle un ACTION a ese boton con una función que los marque!

Code: Select all

   @ 40,01 button oBtn prompt "OK" of oDlg pixel ACTION CambiaCheck(oCheck,@Valor)
 

Code: Select all

Function CambiaCheck(oCheck,Valor)
Local A
FOR A=1 TO 4
   valor[a]:=.t.
   oCheck[a]:Refresh()
NEXT    
Return nil
 
Espero te sirva.
Saludos,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
jefe
Posts: 23
Joined: Thu Apr 09, 2009 10:30 pm
Location: Valladolid, españa

Re: ¿ Como se crea un array de checbox ?

Post by jefe »

Muchas gracias a todos.

Por fin funciona.

Un saludo a todos, no se lo que haria sin vosotros.
jefe
Posts: 23
Joined: Thu Apr 09, 2009 10:30 pm
Location: Valladolid, españa

Re: ¿ Como se crea un array de checbox ?

Post by jefe »

Armando wrote:Jefe (Sí que es raro tu nombre)

Bueno jefe es José Félix Estébanez de forma abreviada.


un saludo.
User avatar
jrestojeda
Posts: 543
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: ¿ Como se crea un array de checbox ?

Post by jrestojeda »

Me alegro que haya funcionado.
Cuál fue la solución??
Saludos,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
jefe
Posts: 23
Joined: Thu Apr 09, 2009 10:30 pm
Location: Valladolid, españa

Re: ¿ Como se crea un array de checbox ?

Post by jefe »

Pues no lo entiendo, porque antes funcionaba y ahora sin hacer nada lo he vuelto a compilar y ya no funciona, por ejemplo le das al botón y no pasa nada, marcas unos cuantos check, dos por ejemplo le das al botón y te marca los cuatro primeros.

Estoy desesperado, no acabo de comprender el funcionamiento de todo esto, pues aunque se lo que hace el código nunca lo hace como debe

me tiene desconcertado.

este es el codigo

Code: Select all



function main()
  local oDlg
  local cId := space( 10 )
  local cPass := space( 10 )
  local oBtn
  local fila:=5
  local oCheck[10],valor[10],a

  
  
  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() ) )
 // @ 40,01 button oBtn prompt "OK" of oDlg pixel ACTION MsgInfo( "click" )
    
     @ 40,01 button oBtn prompt "OK" of oDlg pixel ACTION CambiaCheck(oCheck,@Valor)

 // oBtn:Disable()
  
  for a=1 to 10
     valor[a]=.f.
     @ fila+a, 2 checkbox oCheck[a] var valor[a] prompt "este es el elemento "+alltrim(str(a))

  next       
 
     
 
  for a=1 to 9                  // si quito este bucle da error al ejecutar
      valor[a]:=.t.               
      oCheck[a]:refresh()          
  next                             
  
  activate dialog oDlg
 
return nil


Function CambiaCheck(oCheck,Valor)
Local a
FOR a=1 TO 4
   valor[a]:=.t.
   oCheck[a]:Refresh()
NEXT    
Return nil
 
User avatar
jrestojeda
Posts: 543
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: ¿ Como se crea un array de checbox ?

Post by jrestojeda »

Hola amigo...
Yo te reomendaría que antes del DEFINE DIALOG ejecutes un FOR que ponga todas las variables de los Check en .f., de esa forma ya podrías sacar el FOR que tienes más abajo, te está dando error porque al momento de activar el Dialogo, los Check tienen nil, deben tener .t. o .f., luego con el botón llamas la función que active los primeros 4.
Asi deberia funcionar correctamente. No debes olvidarte del "@" en la llamada de la función de activación de los CHECK ya que como son variables locales para que tomen el valor al volver de la ejecución de la función que los activa deben tener el "@", caso contrario para no poner el "@" en la llamada las variables deben ser STATIC.

Prueba asi a ver si funciona corretamente.
Espero te sirva.
Saludos,
Last edited by jrestojeda on Fri Jul 03, 2009 4:55 pm, edited 1 time in total.
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
jefe
Posts: 23
Joined: Thu Apr 09, 2009 10:30 pm
Location: Valladolid, españa

Re: ¿ Como se crea un array de checbox ?

Post by jefe »

He realizado _ que me has mencionado, pero es que ni se ejecuta da este error.:

Application
===========
Path and name: C:\PRUEBAS\ventana.exe (32 bits)
Size: 1,336,832 bytes
Time from start: 0 hours 0 mins 0 secs
Error occurred at: 05/04/09, 00:39:02
Error description: Error BASE/1066 Argument error: conditional
Args:
[ 1] = U

Stack Calls
===========
Called from: CHECKBOX.PRG => (b)TCHECKBOX:TCHECKBOX(0)
Called from: => TCHECKBOX:INITIATE(0)
Called from: => __OBJSENDMSG(0)
Called from: HARBOUR.PRG => OSEND(0)
Called from: HARBOUR.PRG => ASEND(0)
Called from: DIALOG.PRG => TDIALOG:INITIATE(0)
Called from: DIALOG.PRG => TDIALOG:HANDLEEVENT(0)
Called from: => DIALOGBOXINDIRECT(0)
Called from: DIALOG.PRG => TDIALOG:ACTIVATE(0)
Called from: ventana.prg => MAIN(34)




El código

Code: Select all


#include "fivewin.ch"

function main()
  local oDlg
  local cId := space( 10 )
  local cPass := space( 10 )
  local oBtn
  local fila:=5
  local oCheck[11],valor[11]
  local a
  

   for a=1 to 10                  
     valor[a]:=.F.            
   next  
  
  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() ) )
 // @ 40,01 button oBtn prompt "OK" of oDlg pixel ACTION MsgInfo( "click" )
    
     @ 40,01 button oBtn prompt "OK" of oDlg pixel ACTION CambiaCheck(oCheck,@Valor)

 // oBtn:Disable()
  
  for a=1 to 10
     
     @ fila+a, 2 checkbox oCheck[a] var valor[a] prompt "este es el elemento "+alltrim(str(a)) of oDlg

  next       
 
 activate dialog oDlg
 
return nil



Function CambiaCheck(oCheck,Valor)
Local a
FOR a=1 TO 4
   valor[a]:=.t.
   oCheck[a]:Refresh()
NEXT    
Return nil


Ya siento la paliza que te estoy dando

un saludo.
User avatar
jrestojeda
Posts: 543
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: ¿ Como se crea un array de checbox ?

Post by jrestojeda »

Amigo,
No entiendo porque defines los Arrays de 11 posiciones en vez de 10.
Prueba eso...
Saludos,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
Post Reply