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

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

Postby jefe » Sun May 03, 2009 11:51 am

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  Expand view


#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 ?

Postby jefe » Sun May 03, 2009 12:11 pm

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  Expand view


#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
jefe
 
Posts: 23
Joined: Thu Apr 09, 2009 10:30 pm
Location: Valladolid, españa

Re: ¿ Como se crea un array de checbox ?

Postby jrestojeda » Sun May 03, 2009 3:23 pm

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

Code: Select all  Expand view

#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
User avatar
jrestojeda
 
Posts: 598
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: ¿ Como se crea un array de checbox ?

Postby jefe » Sun May 03, 2009 3:58 pm

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  Expand view


#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
jefe
 
Posts: 23
Joined: Thu Apr 09, 2009 10:30 pm
Location: Valladolid, españa

Re: ¿ Como se crea un array de checbox ?

Postby jrestojeda » Sun May 03, 2009 4:33 pm

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
jrestojeda
 
Posts: 598
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: ¿ Como se crea un array de checbox ?

Postby Armando » Sun May 03, 2009 4:40 pm

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  Expand view

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
User avatar
Armando
 
Posts: 3106
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: ¿ Como se crea un array de checbox ?

Postby jefe » Sun May 03, 2009 4:43 pm

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.
jefe
 
Posts: 23
Joined: Thu Apr 09, 2009 10:30 pm
Location: Valladolid, españa

Re: ¿ Como se crea un array de checbox ?

Postby jrestojeda » Sun May 03, 2009 5:09 pm

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

Code: Select all  Expand view

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


Code: Select all  Expand view

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
User avatar
jrestojeda
 
Posts: 598
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: ¿ Como se crea un array de checbox ?

Postby jefe » Sun May 03, 2009 6:43 pm

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 ?

Postby jefe » Sun May 03, 2009 6:45 pm

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




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


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

Re: ¿ Como se crea un array de checbox ?

Postby jrestojeda » Sun May 03, 2009 6:56 pm

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
User avatar
jrestojeda
 
Posts: 598
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: ¿ Como se crea un array de checbox ?

Postby jefe » Sun May 03, 2009 7:09 pm

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  Expand view



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
 
jefe
 
Posts: 23
Joined: Thu Apr 09, 2009 10:30 pm
Location: Valladolid, españa

Re: ¿ Como se crea un array de checbox ?

Postby jrestojeda » Sun May 03, 2009 9:42 pm

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
User avatar
jrestojeda
 
Posts: 598
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: ¿ Como se crea un array de checbox ?

Postby jefe » Sun May 03, 2009 10:41 pm

He realizado los cambios 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  Expand view


#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.
jefe
 
Posts: 23
Joined: Thu Apr 09, 2009 10:30 pm
Location: Valladolid, españa

Re: ¿ Como se crea un array de checbox ?

Postby jrestojeda » Sun May 03, 2009 11:31 pm

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
User avatar
jrestojeda
 
Posts: 598
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 56 guests