FoxPro/Visual FoxPro - Estoy haciendo un programa para ofertarlo a unas Compañias de Almacenes.

   
Vista:

Estoy haciendo un programa para ofertarlo a unas Compañias de Almacenes.

Publicado por Jose Alberto Gonzalez (1 intervención) el 12/06/2017 05:31:47
Como puedo adicionar un EVENTO Click o Cualquier Otro, a un LABEL, creado desde un Formulario en tiempo de ejecución. Después de Crear las LABEL, cuando se haga Click en cualquiera de ellas, que ejecute un Procedimiento
A modo de Ejemplo, les muestro el Código que he escrito. Mi pregunta es: Como puedo Insertar el EVENTO deseado?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
_top = 30
_left = 150
FOR x=1 TO 10
  _top = _top + 20
  _etiq = "Label"+ALLTRIM(STR(x))
  ThisForm.NewObject(_etiq,"Label")
  _var = "thisform."+_etiq
  WITH &_var
     .Caption = "Ejemplo"     && Aquí va otra Información que la extrae de una Base de Datos...
     .FontSize = 10
     .AutoSize = .t.
     .BorderStyle = 1
     .Top  = _top
     .Left  = _left
     .Visible=.t.
  ENDWITH
ENDFOR

Este código genera 10 LABEL, (Label1, Label2, ..., Label10), Deseo que al hacer Click en cualquiera de ellas, se ejecute un procedimiento estándar para todas.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Estoy haciendo un programa para ofertarlo a unas Compañias de Almacenes.

Publicado por Fidel José (465 intervenciones) el 12/06/2017 12:27:01
En tiempo de ejecución no puedes agregar nada a métodos o eventos. Si puedes agregar propiedades con el método .Addproperty de la clase o con la función ADdproperty().

Tienes dos caminos:
1) Crear una clase label en una biblioteca vcx y colocar el código que necesitas en el evento click.
1.1) Si tienes VFP 8 o superior, puedes crear en la clase label una propiedad, por ejemplo que se llame "cRaiseEvent" y al cargar la clase en el formulario le atribuyes el método del form que debe ejecutarse. En el evento click de la clase iría el siguiente código
IF !EMPTY(this.craiseEvent) AND PEMSTATUS(thisform,this.cRaiseEvent,5)
RaiseEvent(Thisform,this.cRaiseEvent)
ENDIF
1.2) Si tienes VFP 6 o 7, puedes crear igualmente la propiedad, pero ahí cambia el código en el evento click;
IF !EMPTY(this.craiseEvent) AND PEMSTATUS(thisform,this.cRaiseEvent,5)
lcRaise = this.raiseEvent
Thisform.&lcRaise()
endif
A su vez, en la misma clase label puedes hacer que la propiedad cRaiseEvent responda tenga un método assign, con el cual, si esta propiedad tiene un valor, el Mousepointer = 15 y ForeColor = Rgb(0,0,255)

2) Si tienes VFP 8 o superior, puedes usar BINDEVENT() creando los respectivos métodos delegados del evento click de la clase. Recuerda que los métodos delegados deben contener los mismos parámetros que el evento que sustituyen.
En el init del form:
BINDEVENT(Thisform.Label1, "Click", thisform, "cMetodoDelegado")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Estoy haciendo un programa para ofertarlo a unas Compañias de Almacenes.

Publicado por Santiago (419 intervenciones) el 12/06/2017 16:29:48
Hola, porque etiquetas y no botones?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar