FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ayuda con creaci贸n de GETs din谩micos (Solucionado)
Posts: 229
Joined: Sat Mar 18, 2006 03:42 PM
Ayuda con creaci贸n de GETs din谩micos (Solucionado)
Posted: Fri Aug 29, 2008 03:49 AM
Hola amigos

Me ha surgido la necesidad de generar un di谩logo con unos gets que se deben crear din谩micamente, es decir que bien puede tener 2 o n gets dependiendo de cu谩ntos campos tenga una tabla. Puede alguien darme una mano por favor.

Con el siguiente c贸digo me genera bien los says, tambi茅n se dibujan los gets pero parece que el valor de todos los gets creados toman el del 煤ltimo.

local asay:=array(nfields)        //Texto para los says
local aoget:=array(nfields)      //Variables para los objeto Get
local avarget:=array(nfields)   //Variables con el contenido del oGet

for n:=1 to nfields
   asay[n]:=ors:Fields(n-1):Name              //Asigno nombre del campo
   avarget[n]:=cvaltochar(ors:Fields(n-1):Value) //Asig el valor
next

DEFINE dialog odlgReg from 1,1 to (nfields*30)+30,150 title "Edici贸n de registro" pixel

for n:=1 to nfields
	tmp:=n  //Si no uso esto devuelve un error al generar el get
	@fila,colum say asay[n] of odlgReg pixel  //Esto genera bien
	@fila,Colum+30 get aoget[tmp] var avarget[tmp] of odlgReg pixel update size 30,10 //<-- Aqu铆 tengo el problema
	fila+=15
next


Parece ser por la forma en que el TGet asigna el valor mediante un codeblock bsetget......no se.

Estoy d谩ndole vueltas a esto y no le encuentro soluci贸n.

De antemano muchas gracias.

Marcelo Jingo
Marcelo Jingo
Posts: 1076
Joined: Fri Oct 07, 2005 10:41 PM
Re: Ayuda con creaci贸n de GETs
Posted: Fri Aug 29, 2008 03:53 AM

Marcelo,

Que error manda?
Algo m谩s de c贸digo seria bueno para verle

William, Morales

Saludos



m茅xico.sureste
Posts: 84
Joined: Wed Oct 24, 2007 12:48 PM
Re: Ayuda con creaci贸n de GETs
Posted: Fri Aug 29, 2008 07:14 AM
Hola Marcelo,
el problema es debido a que en tu bucle "for" creas los objetos gets, pero la ejecuci贸n del programa continua y la variable n cuando sale del bucle es igual a nfields + 1, entonces cuando se activa el dialogo y se ven los gets intenta asignarles el valor avarget[nfields+1], que est谩 fuera del rango de avarget.
Si por el contrario usas la variable tmp, no da error, pero su valor cuando se activa el dialogo es el del 煤ltimo paso por el bucle, tmp = nfields y tendras todos los gets apuntando a avarget[nfields]

La soluci贸n es usar un codeblock "din谩mico" para asiganarle el valor :

@fila,Colum+30 get aoget[tmp] var avarget[tmp] of odlgReg pixel update size 30,10 //<-- Aqu铆 tengo el problema
aoget[n]:bSETGET := GenLocalBlock ( avarget, n )

y la funcion :

function GenLocalBlock ( aGets, n )
return bSETGET ( aGets [n] )


la definici贸n de bSETGET () est谩 en el archivo FiveWin.CH, por si le quieres echar un vistazo.

Espero te sirva.
Posts: 229
Joined: Sat Mar 18, 2006 03:42 PM
Ayuda con creaci贸n de GETs din谩micos (Solucionado)
Posted: Fri Aug 29, 2008 03:35 PM
gmart1

Con tu sugerencia he logrado resolver este problema, pero he tenido que crear los gets en una funci贸n que mando a llamar desde el on init del di谩logo principal. asi:

DEFINE dialog odlgReg from 1,1 to (nfields*30)+50,250 title "Edici贸n de registro" pixel

@ (nfields*15),10 button obt1 prompt "OK" of odlgReg pixel 
@ (nfields*15),50 button obt2 prompt "Cancel" of odlgreg pixel

activate dialog odlgreg centered on init gendlg(odlgReg,asay,aoget,avarget,nfields) 
return nil

//-------------------------------------------------------
//Funci贸n para generar los gets y says
function gendlg(odlgReg,asay,aoget,avarget,nfields,obt1,obt2)
local n ,fila:=10,colum:=10

for n:=1 to nfields
	@fila,colum say asay[n] of odlgReg pixel
	aoget[n]:=TGet():New( fila, Colum+60, GenLocalBlock(avarget,n), odlgReg,50,20,,,,,,,,.t.)
	fila+=25
next
return nil

//------------------------------------------------------
function GenLocalBlock ( aGets, n ) 
return bSETGET ( aGets [n] )


Si tengo m谩s problemas estar茅 molestando. Gracias tambi茅n Willian por tu inter茅s.

Un saludo a todos.

Marcelo Jingo
Marcelo Jingo
Posts: 84
Joined: Wed Oct 24, 2007 12:48 PM
Ayuda con creaci贸n de GETs din谩micos (Solucionado)
Posted: Sat Aug 30, 2008 10:40 AM
Hola de nuevo Marcelo,

Perdona que no te indicara que ten铆as que cambiar la declaraci贸n de los gets al formato de clase TGet:new(), yo en su d铆a tuve que cambiarlo, ya que la soluci贸n que te di
aoget[n]:bSETGET := GenLocalBlock ( avarget, n )

requiere que el objeto exista, para poder modificar la propiedad bSETGET.
Pero con el cambio de nomenclatura que has hecho, creo que no es necesario que llames a la funci贸n en el on init, yo por lo menos lo tengo declarado antes y no me lanza ning煤n error.

Un saludo.

Continue the discussion