![]() |
Evento OnClick en runtime
Tal vez sea la pregunta del millón...
¿ Cómo disparar dinámicamente (runtime) un evento OnClick ? Ejemplo: Tenemos un procedimiento que en runtime crea un formulario, un Memo y un Boton. El fin de esto, es que, el usuario final escriba algo en el Memo y al hacer clic en el Boton lo pueda enviar a imprimir o a realizar otro tipo de tarea (en este caso no importa mucho). El código es similar a esto:
Por lo general, el evento se declara en el formulario principal, en su sección privada y funciona correctamente (mientras se haga referencia a componentes, procedimientos, variables, etc, que sean visibles al TForm principal):
El problema reside es que a este evento no lo puedo asignar a un procedimiento "pre-declarado" ya que hace referencia y uso de elementos que se crean dinámicamente tal como el TMemo. Tampoco fue posible dispararlo con un procedimiento local, al estilo:
¿ Alguien tiene alguna aproximación para su solución ? ^\||/ |
Asignando nombres a los componentes y usando FindComponent no debería ser difícil.
POdría ser una primera forma sin muchas complicaciones.
En el evento ClickMe puedes hacer algo así (no he puesto comprobaciones de error):
Un saludo. |
Cita:
Es una lástima que haya que "duplicar" los componentes en variables locales en el segundo procedimiento para poder trabajarlos, pero al menos, algo es algo...:D Saludos cordiales, |
Hola hgiacobone.
Cita:
Fijate que lo único que hice, fué reemplazar los nombres de variables por los moldeos y funciónes que estaban en el el ejemplo de Germán. En lo personal, me parece que usar las variables locales da un código mas eficiente y menos propenso a confusiones y errores. Saludos :) |
Estoy con ecfisa. ;), no sé que tiene de malo usar variables.
|
Cita:
De todas yo habitualmente lo uso, por varias razones. Lo pimero que hay que aclarar es que "no está duplicando componentes" simplemente estás creando variables que apuntan a ellos, por lo tanto no estás "duplicando" nada, y esas variables (no los componentes) se liberan al salir de ese procedimiento. Por otro lado, tal y como he dicho, si se utilizara ese método, habría que añadir comprobaciones de seguridad de este tipo, cosa que se facilita/simplifica si defines la variables:
Por último (personalmente) la estética de este código no me gusta, me "choca", es poco legible para un programador que llegue detrás tuyo a revisarlo, además de que soy "vago" y no me gusta escribir de más de la cuenta. Además cuantas más cosas vas poniendo en el código más tienes que repetir esos "churros". Es algo personal, pero yo prefiero definir un par de variables y que el código se parezca al que he puesto anteriormente. |
La franja horaria es GMT +2. Ahora son las 13:18:31. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi