FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Duda con Buttons!
Bien, pues yo estoy creando una pequeña aplicación, y allí se crean botones en tiempo de ejecución. Entonces, he hecho que, para crearlos, lo haga con el siguiente nombre:
button[buttonv] donde button es un array de 32767 y buttonv es 1. Con esto le consigo dar todas las propiedades, pero no se como hacer que me checkee el click. Alguna solución? Gracias por adelantado |
#2
|
||||
|
||||
Hola,
En principio no tendrías que tener ningún problema en hacer algo así:
Sin embargo... tal vez te interesara estudiar un poco el funcionamiento de objetos como "TObjectList", que te permiten mantener una lista de objetos (como pudieran ser los botones que mencionas) proporcionándote alguna funcionalidad "extra" que no contarás al tratarlos en un "Array". |
#3
|
|||
|
|||
Que es ManejadorEvento ?
Porque si pongo por ejemplo, button[2].Caption := 'Cambiado'; me da error. Alguna solución? |
#4
|
||||
|
||||
es tu rutina Onclick, debe tener los mismos parámetros que el evento Onclick, aunque el nombre le puedes poner el que más coraje te dé.
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#5
|
||||
|
||||
Hola,
"ManejadorEvento" es un procedimiento declarado y disponible que cumple con el prototipo del evento que se quiere "manejar". ¿Un ejemplo? El que nos ocupa, verás. Antes de nada podemos comprobar que el evento "OnClick" es del tipo "TNotifyEvent" (muy común en Delphi) y su declaración es la siguiente:
Esto quiere decir que el manejador del evento "OnClick" ha de ser un prodecimiento, mejor dicho un método (pues pertenecerá a un objeto), que cuenta con un solo parámetro de tipo "TObject". Bastaría con declarar e implementar un método de ese tipo para poder estar al tanto cuando se dispare el evento "OnClick". Como hemos de proveer el procedimiento como un método de un objeto, lo haremos utilizando un "TForm", que puede ser un formulario de tu aplicación. Aquí ves la declaración ("interface") de un formulario de ejemplo, tal como aparece al iniciarse un proyecto en Delphi y que no cuenta sino con un botón que luego utilizaremos para seguir con lo que nos ocupa.
Como ves dentro del formulario hay un botón y un método que responderá al evento "OnClick" de dicho botón. El código fuente anterior se encargó de escribirlo el diseñador de Delphi. Nosotros vamos a añadir por nuestra cuenta un procedimiento que se encarge del evento "OnClick" de otro botón, esta vez creado en tiempo de ejecución.
Como puedes ver los métodos "Button1Click" y "ManejadorEventoOnClick" tienen el mismo prototipo: mismo número de parámetros, y así podrían utilizarse indistintamente, es decir, al botón que luego crearemos en tiempo de ejecución podríamos darle cualquiera de los dos métodos para que manejase su evento "OnClick", puesto que son iguales, como queda dicho. Ahora vamos a la implementación del método. Se trata de que lo declarado en la cláusula "interfaz" de las unidades de Delphi ha de estar implementado, precisamente, en la cláusula "implementation". Lo vemos mejor en el propio código fuente, concretamente, con el de toda la unidad de nuestro formulario:
Ahí puedes ver que ya prepramos la implementación del método "ManejadorEventoOnClick", es decir, ya podríamos utilizarlo perfectamente. Entonces vamos a crear un botón en tiempo de ejecución y vamos a asignarle el manejador oportuno para su evento "OnClick". Para abreviar lo haremos en el otro evento "OnClick", es decir, en el que fue creado en tiempo de diseño para el botón que también añadimos a nuestro formulario en tiempo de diseño, con ayuda de Delphi. También por abreviar, declararemos una variable "global" que se dedique a guardar la instancia de nuestro botón creado en tiempo de ejecución:
Hecho lo anterior, cuando se haga "clic" en el botón creado en tiempo de diseño ("Button1") se disparará el evento correspondiente (asignado también en tiempo de diseño ("Button1Click") y en este instanciaremos el botón que creamos en tiempo de ejecución. Luego de lo dicho ya podríamos ver en nuestro formulario el botón que creamos en tiempo de ejecución, además del que creamos en tiempo de diseño, y, cuando se haga "clic" en el primero se disparará su evento "OnClick", es decir, se ejecutará el código del método "ManejadorEventoOnClick" y podremos ver el mensaje "¡Hola desde el manejador del evento OnClick!". Y eso es todo. Como al botón le dimos como padre el formulario en que se encuentra, cuando se destruya el formulario se destruirá también el botón, es decir, la instancia del botón que creamos en tiempo de ejecución será liberada de igual forma que se hará con la instancia del botón que creamos en tiempo de diseño. Sin embargo, creo que es una buena práctica asegurarse de que las instancias de que nosotros nos hacemos cargo (en tiempo de ejecución) sean liberadas también por nuestra cuenta, para lo que podríamos utilizar el propio evento "OnDestroy" de nuestro formulario. Algo así, vaya:
A continuación y cayendo en la prolijidad el código fuente de toda la unidad de nuestro formulario:
En cuanto al error que mencionas... ah, espera, que no mencionas ningún error. Decir que te da un error no es decir mucho: expón por aquí el error que te encuentras, su mensaje, pues que puede aportar información útil para tratar de ayudarte. |
#6
|
||||
|
||||
Cita:
(2) ¿Cómo tienes definido el array Button?
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#7
|
|||
|
|||
A ver. Me explico. Yo lo que estoy haciendo es una DLL. Esta DLL es para crear objetos en tiempo de ejecución. Entonces, como le daria una accion a un boton creado en tiempo de ejecución?
Aquí os dejo el source de la DLL (No está acabada):
Saludos, y a ver si alguien lo soluciona! PD: dec, gracias por la explición, era realmente buena. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Duda en DLL | Isako | API de Windows | 2 | 04-03-2005 18:08:27 |
Duda | alachaise | PHP | 1 | 11-01-2005 19:25:43 |
Duda con DBx e IB | Slash | Conexión con bases de datos | 0 | 27-12-2004 16:34:24 |
Una duda | condor | Varios | 8 | 02-06-2004 05:33:56 |
duda con sql | merlin | SQL | 2 | 19-05-2004 16:32:13 |
|