FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Componente En Tiempo De Ejecucion
crear un boton en tiempo de ejecucion es facil, pero, ahora si queremos hacer 121 botones en tiempo de ejecucion, y que estos tenga un comportamiento identico al hacerle click no es tan facil
Este es el problema, necesito crear 121 botones que respondan al evento "onmouseclick", "onmouseenter", por lo tanto voy a tener que crear una nueva clase donde esten definido dichos eventos, mi nueva clase se va a llamar TButton1 que hereda de TButton asi ahorrandome definir los 242 eventos, el problema es que, formulario no me envia los eventos a mis objetos. Busque codigo de ejemplo por todos lados, pero no encontre, me gustaria saber si alguien conoce algun link donde tenga el codigo de ejemplo |
#2
|
||||
|
||||
pero sabes de eso de definir clases? o simplemente lo estas aprendiendo, lo digo porq si declaras mal los eventos que quieres modificar no vas a poder, si muestras la forma como la haces seguro alguien encuentra el fallo
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#3
|
|||
|
|||
No necesitas definir 121 eventos, basta asignar el mismo a los 121 botones:
donde Botones puede ser un arreglo dinámico de TButton. Lo de la clase está bien, pero te comento lo anterior en caso de que quieras reconsiderarlo. Bye |
#4
|
||||
|
||||
Aclaracion 01
tienes razon, no queria meter el codigo porque es c++ y no quiero asustar pero un ejemplo en delphi me viene bien
este es el archivo de cabecera (.h) Código:
//--------------------------------------------------------------------------- #ifndef Image1H #define Image1H //--------------------------------------------------------------------------- #include <SysUtils.hpp> #include <Classes.hpp> #include <Controls.hpp> #include <ExtCtrls.hpp> //--------------------------------------------------------------------------- class PACKAGE TImage1 : public TImage { private: protected: public: __fastcall TImage1(TComponent* Owner); __published: //aqui van mis supuestos eventos personalizado (definicion) void __fastcall Image1MouseEnter(TObject *Sender); void __fastcall Image1Click(TObject *Sender); }; //--------------------------------------------------------------------------- #endif Código:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Image1.h" #pragma package(smart_init) //--------------------------------------------------------------------------- // ValidCtrCheck is used to assure that the components created do not have // any pure virtual functions. // static inline void ValidCtrCheck(TImage1 *) { new TImage1(NULL); } //--------------------------------------------------------------------------- __fastcall TImage1::TImage1(TComponent* Owner) : TImage(Owner) { } //--------------------------------------------------------------------------- namespace Image1 { void __fastcall PACKAGE Register() { TComponentClass classes[1] = {__classid(TImage1)}; RegisterComponents("Standard", classes, 0); } } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //aquie van la implementacion de mis eventos (no creo que sea asi) void __fastcall TImage1::Image1MouseEnter(TObject *Sender) { this->Visible=false; } void __fastcall TImage1::Image1Click(TObject *Sender) { this->Visible=false; } despues de crear mi nueva clase, debo llamarla desde otro lado, la instancio de esta forma Código:
TImage1 *temp= new TImage1(Owner);//tambien coloque como parametro Form1, Application y no vi cambios // ahora modifico los atritutos para acomodar temp->Left=2; temp->Top=2; temp->Picture->LoadFromFile("00060001.BMP"); temp->Width=200; temp->Height=200; temp->Parent=Form1; // indica que form1 es el padre, y hace que temp se vuelva visible |
#5
|
||||
|
||||
Aclaracion 02
KeyBoy tiene razon, le asigno un property donde escribo lo que quiero que haga, pero el problema esta en que el formulario no me pasa el evento porque en el momento de compilacion no estan los objetos implementados ni definidos, por lo tanto, si hago click en el objeto 98 este se tiene que hacer invisible, pero para eso form me debe pasar el evento a ese objeto, el cual este reaccionara con el property definido por mi, dentro del property va un
this->visible=false; o this.visible:=false; |
#6
|
|||
|
|||
No entiendo. Disculpa que escriba en delphi pero me marea C
Tú puedes definir el evento en tu formulario:
Y es éste el evento que asignas en la ejecución. Dado que Sender es el control que genera el evento, equivale al this (Self en delphi) de tu clase. Bye |
#7
|
||||
|
||||
cerca
keyboy estoy viendo el equivalente de
(Sender as TImage) parece que estamos cerca, dentro de un rato doy la solucion (gracias a keyboy) o sigo con las preguntas |
#8
|
|||
|
|||
Quizá me equivoco, pero creo que el equivalente al operador as en C++ Builder es algo que se llama dynamic typecasting.
Bye |
#9
|
|||
|
|||
#10
|
||||
|
||||
Solucionado
Mi codigo de fuente primitivo (porque el programa final es el juego de encerrar al gato, proyecto de la materia gestion de datos -UTN)
juego codigo de fuente: http://rapidshare.com/files/102919304/enc_gato.rar.html captura del programa (al hacer click sobre cualquier imagen esta se hace invisible) el problema estaba en que yo definia los eventos en la nueva clase creada, cuando en realidad tenia ke definier el evento en el formulario (o en el objeto contenedor, esta vez era el formulario) y despues cuando lo creo en forma dinamica asignar al evento de mi objeto instanciado el evento que he creado en el formulario contenedor cosas a tener en cuenta. al crear dinamicamente debo hacer lo siguiente (temp es mi ojeto creado) temp->Parent=Form1; //asignar un objeto contenedor, es necesario para que temp pueda verse temp->OnClick = ImagenClick;//asignacion del evento (gracias keyboy, tu ayuda no solo soluciona los problemas sino suben la moral en el momento de desarrollo, uno no se siente tan solo) y definir en el formulario contenedor el efento ImagenClick (nombrado a discresion) en el archivo cabecera de la forma: Código:
void __fastcall ImagenClick(TObject *Sender); (dentro de __published) Código:
void __fastcall TForm1::ImagenClick(TObject *Sender) { TImage *Aux_Ima = (TImage *)(Sender); Aux_Ima->Visible=false; } al que sender nos envia la ayuda de keyboy me hizo caer en esta pagina que es la fuente y soluciono el problema porque la verdad que no tenia idea para que servia ese tal "sender" FUENTE Última edición por grandmasterdari fecha: 28-03-2008 a las 03:46:28. |
#11
|
|||
|
|||
Otra duda similar
Tengo 65 Labels
y dos botones, uno seleccionar todos y el otro ninguno como accedo en un for a cada label para cambiar el color? lblBarcode01.Color := $00549CCD; // todos lblBarcode01.Color := $00F4F4F4; // Ninguno Vi otros hilos pero tratan con propiedades dinamicas o valores y no con objetos como en este caso. La solución por el momento fue 130 lineas demás hehe, pero bueh... Saludos y gracias! |
#12
|
||||
|
||||
jop
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#13
|
||||
|
||||
Yo me hice un componente TTeclado, que es un teclado completo para una aplicacion que hice hace ya varios años. Lo que hice fue crear un array de TButton y unas const que guardaban la posicion, el tamaño y la posicion de las teclas, en tiempo de ejecucion, en el evento OnCreate el propio teclado generaba los botones de las teclas, les asignaba los eventes OnPress, OnMouseenter, etc. Te puedo pasar el componente completo cuando lo encuentre...
|
#14
|
||||
|
||||
Aclaracion 0 :S me perdi
me equivoque de hilo, sory..
Última edición por grandmasterdari fecha: 30-04-2008 a las 15:38:08. |
#15
|
|||
|
|||
Cita:
|
#16
|
||||
|
||||
uff, que lío. Entre que uno edita y borra el contenido, gente nueva preguntando... ya no sé ni lo que se pregunta.
waly2k1 espero que ese código te sirva de algo, si no, pregunta de nuevo. Raiza ¿puedes explicar más detalladamente lo que necesitas? Porque crear 100 o 300 botones y que hagan exactamente lo mismo no es tan complejo (aunque puede llegar a serlo ). Un ejemplo: Bastaría definirse varios eventos de tipo onmouseDown, onEnter, etc y después asignarlo por código. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#17
|
|||
|
|||
componente
Lo que necesito es que signica cada componente, cual es su empleo en el formulario y para que se utiliza en la programacion a dime si ay una opcion de como darle color al boton
|
#18
|
|||
|
|||
Agradecido...
Lepe a mi me vino perfecto el código posteado y la sencillez del mismo,
funciona todo a la perfección. Muchas gracias como siempre. |
#19
|
||||
|
||||
Cita:
Por favor respeta el tema del hilo lo que tu estás buscando no viene con la temática tratada en este hilo, veo que eres nuevo/a en clubdelphi. Aprovecho este post para hacerte conocer que existe una guia de estilo (normas). Por favor tomate unos minutos para leerla. Con respecto a tu problema, se resuelve de una manera muy simple: dandole F1 (ayuda) a cada componente. Selecciona el componente que deseas estudiar y presiona F1. La ayuda describe cada propiedad y evento que posee. Por lo que preguntas puedo deducir que eres iniciado en Delphi y/o programación. Para ello sugiero que visites la sección FTP y Wiki, allí encontrarás material de ejemplo y de estudio (manuales, tutoriales, etc). No se puede cambiar el color a un TButton. Para ello hay dos alternativas básicas: 1. Simular un TButton mediante un TPanel. 2. Usar un componente de terceros. Saludos, |
#20
|
|||
|
|||
amigo
solo necesitaba informacion para inpartir un contenido que tengo que dar de programacion visual pese que tu podia ayudarme gracias chao
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
generar bd My Sql en tiempo de ejecucion | meosre | MySQL | 7 | 05-01-2008 16:54:30 |
Crear componente Image en tiempo d Ejecucion | Jessica666 | Gráficos | 6 | 30-05-2004 02:58:22 |
Tiempo de ejecucion? | st7 | Varios | 3 | 11-05-2004 23:03:28 |
Creacion de componente en tiempo de ejecución | cone220 | OOP | 1 | 16-09-2003 04:47:16 |
¿Como saber cuabdo un componente esta invisible en tiempo de ejecuciòn? | danytorres | Varios | 1 | 20-05-2003 16:51:21 |
|