26 de junio de 2016

Añadir codigo a un evento en tiempo de ejecucion

Esto lo pense porque en el Grupo de Noticias de Visual FoxPro vi que muchos usuarios de nuestro amado Fox agregan objetos nuevos en tiempo de ejecucion pero desean tambien agregar codigo nuevo o personalizado a ese nuevo objeto y todo en tiempo de ejecucion.

Tienen que hacer lo siguiente: lo primero es crear una clase con el objeto al que quieran añadir codigo en tiempo de ejecucion, debe crear una propiedad con el nombre pc_shpname (o el que gusten). Yo uso este porque es un ejemplo sencillo para agregar codigo a un control Shape en el método Click.

Y en el método Click (o en el que necesiten) agregan este codigo:

SELECT tbremito
LOCATE FOR sname == this.pc_shpname
DO (scodigo)

En el Load (preferentemente) del formulario o prg donde estan trabajando hacer lo siguiente:

Crear un cursor tbremito, con los campos sname n(5), scodigo c(100)

lcx = 1
lCuenta = 0
** esta es una tabla mia ... es para ser claro con el ejemplo 
SELECT emn_oilcod   
SCAN ALL
  ** agregan el objeto, shape_ es el objeto instanciado en un clase ...
  lcmacro1 = "thisformset.frm_estadoInsumos.AddObject('Shape"+ALLTRIM(STR(lcx))+"','shape_')"  
  ** a la propiedad le agrego lcx para despues buscarla desde la clase &lcmacro1
  INSERT INTO tbremito (sname,scodigo) VALUES ((lcx),"sprshp"+ALLTRIM(STR(lcx)))
    lcmacrox1="thisformset.frm_estadoInsumos.shape"+ALLTRIM(STR(lcx))+".pc_shpname=lcx" 
  &lcmacrox1

  ***** aca agregan el codigo que necesitan ******
  lcfile2="sprshp"+ALLTRIM(STR(lcx))+".prg"
  SET TEXTMERGE ON
  SET TEXTMERGE TO (lcfile2) NOSHOW
  \wait windows '<<"shape"+ALLTRIM(STR(lcx))>>'
  SET TEXTMERGE OFF
  SET TEXTMERGE TO
  COMPILE (lcfile2)  
  ************ fin ***************
lcx = lcx + 1
lCuenta = lCuenta + 1
ENDSCAN

Tan simple como eso...!!! En este caso uso macrosusticion porque ahora mismo no se me ocurre otra forma pero si la encuentran.. usenlan!!

Bueno espero que la disfruten... todos los comentarios para mejorar son bienvenidos.

Saludos

Carlos Emilio

No hay comentarios. :

Publicar un comentario