FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour 驴 Como se crea un array de checbox ? (solucionado)
Posts: 23
Joined: Thu Apr 09, 2009 10:30 PM
驴 Como se crea un array de checbox ? (solucionado)
Posted: 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 (fw): Select all Collapse
#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.
Posts: 23
Joined: Thu Apr 09, 2009 10:30 PM
Re: 驴 Como se crea un array de checbox ?
Posted: 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 (fw): Select all Collapse
#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
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: 驴 Como se crea un array de checbox ?
Posted: Sun May 03, 2009 03:23 PM
Prueba lo siguiente...
Ya que no son tantos los Check definir los 10 es una posibilidad.

Code (fw): Select all Collapse
#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
Posts: 23
Joined: Thu Apr 09, 2009 10:30 PM
Re: 驴 Como se crea un array de checbox ?
Posted: Sun May 03, 2009 03: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 (fw): Select all Collapse
#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
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: 驴 Como se crea un array de checbox ?
Posted: Sun May 03, 2009 04: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
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: 驴 Como se crea un array de checbox ?
Posted: Sun May 03, 2009 04: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 (fw): Select all Collapse
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
Posts: 23
Joined: Thu Apr 09, 2009 10:30 PM
Re: 驴 Como se crea un array de checbox ?
Posted: Sun May 03, 2009 04: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.
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: 驴 Como se crea un array de checbox ?
Posted: Sun May 03, 2009 05:09 PM
Ok!
Entonces debes ponerle un ACTION a ese boton con una funci贸n que los marque!

Code (fw): Select all Collapse
   @ 40,01 button oBtn prompt "OK" of oDlg pixel ACTION CambiaCheck(oCheck,@Valor)


Code (fw): Select all Collapse
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
Posts: 23
Joined: Thu Apr 09, 2009 10:30 PM
Re: 驴 Como se crea un array de checbox ?
Posted: Sun May 03, 2009 06:43 PM

Muchas gracias a todos.

Por fin funciona.

Un saludo a todos, no se lo que haria sin vosotros.

Posts: 23
Joined: Thu Apr 09, 2009 10:30 PM
Re: 驴 Como se crea un array de checbox ?
Posted: Sun May 03, 2009 06:45 PM
Armando wrote:Jefe (S铆 que es raro tu nombre)




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


un saludo.
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: 驴 Como se crea un array de checbox ?
Posted: Sun May 03, 2009 06: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
Posts: 23
Joined: Thu Apr 09, 2009 10:30 PM
Re: 驴 Como se crea un array de checbox ?
Posted: Sun May 03, 2009 07: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 (fw): Select all Collapse
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
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: 驴 Como se crea un array de checbox ?
Posted: Sun May 03, 2009 09: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,

Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 23
Joined: Thu Apr 09, 2009 10:30 PM
Re: 驴 Como se crea un array de checbox ?
Posted: 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 (fw): Select all Collapse
#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.
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: 驴 Como se crea un array de checbox ?
Posted: 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