Fecha actual Vie May 17, 2024 7:16 pm

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 10 mensajes ] 
Autor Mensaje
NotaPublicado: Jue Ago 20, 2009 2:54 pm 

Registrado: Lun Ene 08, 2007 5:56 pm
Mensajes: 91
Hola!
Tengo un problemilla con le funcion Tedit con variables de array al utilizar los eventos para asignarlos a la variable del array, el parametro del indice no pasa al dblclick ej:

METHOD DefgetDat(achdatos,WinActual) Class Tgetfac_Prg
For inx = 1 to 5
::get[inx]:=TEdit():Create(::getBarD1)
::get[inx]:Caption:="Prueba "+str(inx)
::get[inx]:OnDblClick := { | inx | ::BuscaInfOnDblClick(inx) }
Next inx
Return

Method BuscaInfOnDblClick (cpo) Class Tgetfac_Prg
?cpo
return

La edicion la hace perfecta pero
en la ejecucion del programa el parametro cpo que equivale a inx
no muestra nada cuando se da el doble click en la variable de edicion, es como si no pasara la informacion del parametro. y necesito saber el valor del indice en el procedimiento dblclick
para hacer otras operaciones

Que sera lo que estoy haciendo mal?

_________________
Saludos.
German


Arriba
 Perfil  
Responder citando  
NotaPublicado: Jue Ago 20, 2009 10:41 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
german escribió:
Hola!
Tengo un problemilla con le funcion Tedit con variables de array al utilizar los eventos para asignarlos a la variable del array, el parametro del indice no pasa al dblclick ej:

METHOD DefgetDat(achdatos,WinActual) Class Tgetfac_Prg
For inx = 1 to 5
::get[inx]:=TEdit():Create(::getBarD1)
::get[inx]:Caption:="Prueba "+str(inx)
::get[inx]:OnDblClick := { | inx | ::BuscaInfOnDblClick(inx) }
Next inx
Return

Method BuscaInfOnDblClick (cpo) Class Tgetfac_Prg
?cpo
return

La edicion la hace perfecta pero
en la ejecucion del programa el parametro cpo que equivale a inx
no muestra nada cuando se da el doble click en la variable de edicion, es como si no pasara la informacion del parametro. y necesito saber el valor del indice en el procedimiento dblclick
para hacer otras operaciones

Que sera lo que estoy haciendo mal?


Hola!!!!

Sin probarlo, yo pondría:

::get[inx]:OnDblClick := { | oSender, n | ::BuscaInfOnDblClick( oSender, n ) }

... asi le estamos diciendo que el evento recibirá DOS parámetros: el propio objeto y la posición.

Sin embargo tu código es incorrecto porque al estar dentro de un bucle FOR ... NEXT <inx> cambiará en cada vuelta, por lo que no es un parámetro válido.

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Vie Ago 21, 2009 4:18 pm 

Registrado: Lun Ene 08, 2007 5:56 pm
Mensajes: 91
No funciono, le he hecho cantidad de cambios a los parametros y ninguno funciona, en c3 no hay una funcion que me diga que indice es el que estoy usando, algo similar al itemindex, solo que en este caso para el arreglo de edicion,

Lo unico es colocar valores fijos, pero entonces el codigo se vuelve inmanejable, y ademas como c3 tiene limitaciones en cantidad de lineas de codigo, no me funcionaria.

Si bruno ha visto este mensaje, me podrias ayudar con este problemilla que aparentemente es sencillo, pero c3 no lo asimila.

La captura de la informacion la hace perfecta con arreglos, pero los eventos no se pueden asignar, con este tipo de capturas, entonces la optimizacion que logre la pierdo si tengo que colocar valores fijos.

Gracias Jesus, no funciono, el valor que pasa es NIL, Que mas se te ocurre?

_________________
Saludos.
German


Arriba
 Perfil  
Responder citando  
NotaPublicado: Vie Ago 21, 2009 5:39 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
trueSoft escribió:
german escribió:
Hola!
Tengo un problemilla con le funcion Tedit con variables de array al utilizar los eventos para asignarlos a la variable del array, el parametro del indice no pasa al dblclick ej:

METHOD DefgetDat(achdatos,WinActual) Class Tgetfac_Prg
For inx = 1 to 5
::get[inx]:=TEdit():Create(::getBarD1)
::get[inx]:Caption:="Prueba "+str(inx)
::get[inx]:OnDblClick := { | inx | ::BuscaInfOnDblClick(inx) }
Next inx
Return

Method BuscaInfOnDblClick (cpo) Class Tgetfac_Prg
?cpo
return

La edicion la hace perfecta pero
en la ejecucion del programa el parametro cpo que equivale a inx
no muestra nada cuando se da el doble click en la variable de edicion, es como si no pasara la informacion del parametro. y necesito saber el valor del indice en el procedimiento dblclick
para hacer otras operaciones

Que sera lo que estoy haciendo mal?


Hola!!!!

Sin probarlo, yo pondría:

::get[inx]:OnDblClick := { | oSender, n | ::BuscaInfOnDblClick( oSender, n ) }

... asi le estamos diciendo que el evento recibirá DOS parámetros: el propio objeto y la posición.

Sin embargo tu código es incorrecto porque al estar dentro de un bucle FOR ... NEXT <inx> cambiará en cada vuelta, por lo que no es un parámetro válido.


Hola, de nuevo.

Yo juraría que tendría que funcionar... ¿en el method BuscaInfOnDblClick( oSender, n ) le pones los parámetros...?

Otra posibilidad que se me ocurre es que utilices :Cargo

For inx = 1 to 5
::get[inx]:=TEdit():Create(::getBarD1)
::get[inx]:Caption:="Prueba "+str(inx)
::get[inx]:Cargo:=inx
::get[inx]:OnDblClick := { | inx | ::BuscaInfOnDblClick(inx) }
Next inx

...y en el method ya dispones del indice correcto.

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
NotaPublicado: Vie Ago 21, 2009 5:45 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
trueSoft escribió:
trueSoft escribió:
german escribió:
Hola!
Tengo un problemilla con le funcion Tedit con variables de array al utilizar los eventos para asignarlos a la variable del array, el parametro del indice no pasa al dblclick ej:

METHOD DefgetDat(achdatos,WinActual) Class Tgetfac_Prg
For inx = 1 to 5
::get[inx]:=TEdit():Create(::getBarD1)
::get[inx]:Caption:="Prueba "+str(inx)
::get[inx]:OnDblClick := { | inx | ::BuscaInfOnDblClick(inx) }
Next inx
Return

Method BuscaInfOnDblClick (cpo) Class Tgetfac_Prg
?cpo
return

La edicion la hace perfecta pero
en la ejecucion del programa el parametro cpo que equivale a inx
no muestra nada cuando se da el doble click en la variable de edicion, es como si no pasara la informacion del parametro. y necesito saber el valor del indice en el procedimiento dblclick
para hacer otras operaciones

Que sera lo que estoy haciendo mal?


Hola!!!!

Sin probarlo, yo pondría:

::get[inx]:OnDblClick := { | oSender, n | ::BuscaInfOnDblClick( oSender, n ) }

... asi le estamos diciendo que el evento recibirá DOS parámetros: el propio objeto y la posición.

Sin embargo tu código es incorrecto porque al estar dentro de un bucle FOR ... NEXT <inx> cambiará en cada vuelta, por lo que no es un parámetro válido.


Hola, de nuevo.

Yo juraría que tendría que funcionar... ¿en el method BuscaInfOnDblClick( oSender, n ) le pones los parámetros...?

Otra posibilidad que se me ocurre es que utilices :Cargo

For inx = 1 to 5
::get[inx]:=TEdit():Create(::getBarD1)
::get[inx]:Caption:="Prueba "+str(inx)
::get[inx]:Cargo:=inx
::get[inx]:OnDblClick := { | inx | ::BuscaInfOnDblClick(inx) }
Next inx

...y en el method ya dispones del indice correcto.


...ademas...

Si no utilizas el IDE lo tendrias aun más facil.

Yo (que no uso el IDE mas que para diseñar pantallas) tengo todos los controles que heredan de X...., por ejemplo XEdit FROM TEDIT y de esta forma podrias tener una data llamada Index (por ejemplo) y alli guardas la variable con la posición.

...Volviendo al problema inicial LOGICAMENTE no te funciona porque me lié y estamos trabajando con CodeBloc y no con array (que si te daria la posicion)

Nada, que el :cargo te podria funcionar y si no usas IDE entonces HEREDA...

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Vie Ago 21, 2009 9:28 pm 

Registrado: Lun Ene 08, 2007 5:56 pm
Mensajes: 91
nos estamos acercando,con el cargo, en la ejecucion ahora en todos los campos saca el ultimo valor que tomo el indice es decir 5, y no el indice que corresponde al campo que se le dio el doble click (supongo que el campo de edicion es el codeblock, mejor dicho el ::get[inx]:caption),

NO entendi bien la parte que decias de heredar, pues todavia tengo mucho por aprender, yo tampoco uso el IDE.
Si pudieras ampliar un poco este tema o mejor un ejemplo seria buenisimo

Tu ayuda es muy valiosa, gracias

_________________
Saludos.
German


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Vie Ago 21, 2009 11:10 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
german escribió:
nos estamos acercando,con el cargo, en la ejecucion ahora en todos los campos saca el ultimo valor que tomo el indice es decir 5, y no el indice que corresponde al campo que se le dio el doble click (supongo que el campo de edicion es el codeblock, mejor dicho el ::get[inx]:caption),

NO entendi bien la parte que decias de heredar, pues todavia tengo mucho por aprender, yo tampoco uso el IDE.
Si pudieras ampliar un poco este tema o mejor un ejemplo seria buenisimo

Tu ayuda es muy valiosa, gracias


Aqui tienes el XEdit que yo utilizo....
A lo peor no te aclaras mucho, pero es para que le des un vistazo con calma.


Adjuntos:
ClassEdit.prg [5.81 KiB]
362 veces

_________________
Un saludo.
Jesús P. Melgar Velasco
Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Dom Ago 30, 2009 2:33 pm 

Registrado: Lun Ene 08, 2007 5:56 pm
Mensajes: 91
Gracias jesus por tu procedimiento,
Manu me dio una mano tambien y entre los tres hemos resuelto el problema, la forma mas facil de hacerlo esta aqui:

METHOD DefgetDat(achdatos,WinActual) Class Tgetfac_Prg
For inx = 1 to 5
::get[inx]:=TEdit():Create(::getBarD1)
::get[inx]:Caption:="Prueba "+str(inx)
::get[inx]:Cargo:=inx
::get[inx]:OnDblClick := { | oSender | IndexCodeBlock(oSender) }
Next inx
Return

function IndexCodeBlock( o )
return ( { BuscaInfOnDblClick(o:cargo) } )

Method BuscaInfOnDblClick (cpo) Class Tgetfac_Prg
?cpo
return

Gracias Jesus,
Gracias Manu

_________________
Saludos.
German


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Dom Ago 30, 2009 3:44 pm 

Registrado: Lun Ene 08, 2007 5:56 pm
Mensajes: 91
El codigo anterior tiene un problema, Esta esta mejorado y funcionando

METHOD DefgetDat(achdatos,WinActual) Class Tgetfac_Prg
For inx = 1 to 5
::get[inx]:=TEdit():Create(::getBarD1)
::get[inx]:Caption:="Prueba "+str(inx)
::get[inx]:Cargo:=inx
::get[inx]:OnDblClick := { |oSender| ::BuscaInfOnDblClick(oSender,IndexCodeBlock(oSender))}
Next inx
Return

function IndexCodeBlock( o )
return ( { BuscaInfOnDblClick(o:cargo) } )

Method BuscaInfOnDblClick (o,cpo) Class Tgetfac_Prg
?cpo
return

_________________
Saludos.
German


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Lun Ago 31, 2009 9:30 am 
Site Admin
Avatar de Usuario

Registrado: Jue Oct 06, 2005 10:49 pm
Mensajes: 655
Ubicación: España - Salamanca
Germán,

el problema que tienes es de tiempos de ejecución, es decir, primero se crean los Gets y la variable inx del bucle llega a su fin. La función termina y se destruyen las variables locales, como inx. Luego, cuando se producen los eventos del click esa variable ya no existe, date cuenta que la función que creó los Gets terminó y como variable local se destruyó. Si intentas leer su valor desde el codeblock lees basura, o el contenido de otra variable o vete a saber que hay la memoria que ocupó la variable en ese momento.

Para hacer lo que quieres yo implementaría algo así:

Código:
METHOD DefgetDat( achdatos, WinActual ) Class Tgetfac_Prg

   For inx = 1 to 5
      ::get[inx] :=TEdit():Create( ::getBarD1 )
      ::get[inx]:Caption:= "Prueba "+str( inx )
      ::get[inx]:Cargo:= inx
      ::get[inx]:OnDblClick := { | oSender | ::BuscaInfOnDblClick( oSender ) }
   Next inx

Return

Method BuscaInfOnDblClick ( oSender ) Class Tgetfac_Prg

   local oObject

   oObject := aScan( ::get, oSender )

   if oObject != nil
      oObject:HazLoQueSea()
   endif

return

_________________
Un saludo,
Bruno Cantero
www.c3compiler.com


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 10 mensajes ] 

Todos los horarios son UTC + 1 hora [ DST ]


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a:  
cron