• Viernes 29 de Marzo de 2024, 14:00

Autor Tema:  Asignar evento en tiempo de ejecución  (Leído 5326 veces)

carmatth

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Asignar evento en tiempo de ejecución
« en: Jueves 10 de Febrero de 2011, 18:21 »
0
Hola a toda la gente de este foro, este es mi primer consulta !
    Y antes que nada quiero aclarar que no soy un experto programador de c++ builder   :huh:
   La consulta es la siguiente :   Necesito crear una aplicación en la que pueda ir agregando componentes del tipo TImage en tiempo de ejecución y a cada uno de estos componentes dotarlos con la capacidad de que respondan a eventos, como por ejemplo al hacer un click izq. (onClick) pueda mostrar una ficha con imformación asociada a es componente ImageN.
   Concretamente, al producirce el evento, donde introduzco el código asociado a este ?  :blink:

   Desde ya gracias por lo que puedan aportar !
   Saludoss a todos  :hola:

avefenix1810

  • Miembro activo
  • **
  • Mensajes: 74
    • Ver Perfil
Re: Asignar evento en tiempo de ejecución
« Respuesta #1 en: Jueves 10 de Febrero de 2011, 18:55 »
0
Cita de: "carmatth"
Hola a toda la gente de este foro, este es mi primer consulta !
    Y antes que nada quiero aclarar que no soy un experto programador de c++ builder   :huh:
   La consulta es la siguiente :   Necesito crear una aplicación en la que pueda ir agregando componentes del tipo TImage en tiempo de ejecución y a cada uno de estos componentes dotarlos con la capacidad de que respondan a eventos, como por ejemplo al hacer un click izq. (onClick) pueda mostrar una ficha con imformación asociada a es componente ImageN.
   Concretamente, al producirce el evento, donde introduzco el código asociado a este ?  :blink:

   Desde ya gracias por lo que puedan aportar !
   Saludoss a todos  :hola:


Hola carmatth, creo que tienes dos preguntas en una. Primero me parece que quieres ir ingresando imágenes en tiempo de ejecución, y segundo quieres que aparezca información de la imagen al hacer click en la imagen.

Algo simple sería poner un botón para cada cosa, primero para acceder a un cuadro de dialogo que te permita buscar la imagen a ingresar y segundo otro botón que te permita abrir un Memo para mostrar la información de la imagen.

Si eres nuevo en esto, te recomiendo que veas el video tutorial que tiene publicado laChayra en youtube, o visitar este sitio: miperfil.mx/cbuilder6/index.php, ahi encontraras ejemplos de como hacer lo que quieres.

Tambien no esta demás mirar el tutorial La Cara oculta de Borland C++ Builder.

 :beer:

softevolutions

  • Miembro activo
  • **
  • Mensajes: 84
  • Nacionalidad: es
    • Ver Perfil
    • http://www.softevolutions.es
Re: Asignar evento en tiempo de ejecución
« Respuesta #2 en: Viernes 11 de Febrero de 2011, 19:10 »
0
Puedes usar estos pasos como guia:

1) Si conoces la ruta donde estan las imagenes, crea un array de componentes TImage o prueba a hacerlo con un bucle e indicando en el nombre el id de la imagen que estás mostrando

for( int i = 1;  i < cuantas_imagenes+1; i++) {
 //creo el componente
 TImage * img * new TImage(this);
 //indico el nombre al componente, concatenando el codigo de imagen
 img->Name = "Imagen_" + String(i);
 //cargo la imagen
 img->Picture->LoadFromFile(ruta_imagen);
  //ten en cuenta que tienes que reubicar las imagenes o puedes tambien alinearlas a la izquierda, derecha o arriba
 //asigno el evento OnClick en tiempo de ejecucion
 img->OnClick = MiEventoOnClick;
 //incluyo el componente a la lista de componentes del TForm en cuestion
 this->InsertControl(img);
}

Por otro lado debes tener creado el evento OnClick, pero uno personalizado

void __fastcall MiEventoOnClick(TObject *sender) {
 //hago lo que quiero al pulsar en la imagen
}

Espero que te ayude
:: Lo que puedes hacer sólo lo limita tu propia imaginación ::
Soft Evolutions Technology - http://www.softevolutions.es

carmatth

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Asignar evento en tiempo de ejecución
« Respuesta #3 en: Viernes 11 de Febrero de 2011, 22:44 »
0
Hola softevolutions !!!!
   Gracias por tu aporte, ... he buscado y buscado pero por el momento no he encontrado lo que tu acabas de postear !  :rolleyes:
   Amigo, antes de hacerte alguna pregunta más, voy a probar hacer un pequeño programa y poner en práctica lo que me has facilitado, así conceptualizo la idea.
   Muchas gracias  softevolutions !!!
   Nos escribimos.. saludos !  :good:

carmatth

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Asignar evento en tiempo de ejecución
« Respuesta #4 en: Domingo 13 de Febrero de 2011, 00:47 »
0
Hola Gente !!!
  Les paso lo que he probado hasta ahora y cuales son los comentarios que tengo al respecto.
  Si yo compilo este codigo el error devuelto por builder es :

[C++ Error] Unit1.cpp[30]: E2316 '__fastcall TForm1::SenalClick(TObject *)' is not a member of 'TForm1'
[C++ Error] Unit1.cpp[52]: E2451 Undefined symbol 'SenalClick'

Y como notarán he comentado la linea  "this->InsertControl(Boton);" porque cuando luego de clickear el boton que ejecuta el código de abajo
sin ningún problema aparente, ( aparece en Panel1 el boton !!), y finalizo el programa aciendo click en un boton "Salir" ( Close();) salta un error que dice algo así como que no se destruyó bla bla y algún otro problema de memoria ! y todo se interrumpe.
  Espero comentarios .... me voy a poner un casco je je je je  :clown:
  bye



//---------------------------------------------------------------------------
//   Funcion de evento creada por mi !!!!

void __fastcall TForm1::SenalClick(TObject *sender)
  {
   ShowMessage("Prueba exitosa");
  }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

 //Crear Control
 TButton *Boton = new TButton(this);
 //Posicionarlo al componente en Panel1
 Boton->Left=Panel1->Width/2;
 Boton->Top=Panel1->Height/2;
 //Dimensiones
 Boton->Height=89;
 Boton->Width=89;
 Boton->Name="Bot";

 //Va a estar dentro del Panel 1
 Boton->Parent=Panel1;
  //incluyo el componente a la lista de componentes del TForm en cuestion
// this->InsertControl(Boton);
  Boton->OnClick = SenalClick;

  Button1->Enabled=false;


}
//---------------------------------------------------------------------------

softevolutions

  • Miembro activo
  • **
  • Mensajes: 84
  • Nacionalidad: es
    • Ver Perfil
    • http://www.softevolutions.es
Re: Asignar evento en tiempo de ejecución
« Respuesta #5 en: Martes 15 de Febrero de 2011, 13:20 »
0
Incluye la funcion SenalClick en el .h

Esta funcion incluye el componente Boton a la lista de componentes del TForm
this->InsertControl(Boton);

Es lo mismo que haces con la linea Boton->Parent=Panel1; que quedaría Panel1->InsertControl(Boton);

Antes de cerrar el TForm con Close();, debes liberar la memoria que ocupa el componente Boton.
:: Lo que puedes hacer sólo lo limita tu propia imaginación ::
Soft Evolutions Technology - http://www.softevolutions.es

carmatth

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Asignar evento en tiempo de ejecución
« Respuesta #6 en: Domingo 6 de Marzo de 2011, 00:31 »
0
Hola amigos ! .... antes que nada quería disculparme por la evidente demora en mi respuesta, pero les cuento que no se cual fue la razón pero hace un par de semanas me cansé de que me rebotara los mensajes que intentaba responder en este hilo.
    Quería decirles que encontré la forma de crear, definir eventos y destruir de manera puntual los componentes que voy creando en tiempo de ejecución.
    Les envío un saludo muy grande y muchas gracias por ayudarme.
    Como ahora no estoy en mi casa voy a colgar un ejemplo de lo que hice para cerrar como corresponde este hilo.
    Graciassssss.