Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

CREACION DE COMPONENTES EN TIEMPO DE EJECUCION

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: CREACION DE COMPONENTES EN TIEMPO DE EJECUCION Responder citando

HOLA AMIGOS,

Les escribo esto esperando que alguien pueda ayudarme, necesito saber como puedo crear un componente en tiempo de ejecucion, es decir no tener que ponerlo en el formulario en tiempo de diseño, sino crearlo mediante codigo.

Gracias.
Volver arriba
Mensaje    Asunto: Responder citando

No te sirve ponerlo y dejarlo invisible? Y cuando quieras lo ponés visible y listo.
_________________
"Todo es posible si Ud. no sabe de qué está hablando"
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

La opción de Andrés está bien, además te permite crear nuevos componentes del mismo tipo, y tener un acceso indexado, a partir de ese.
Por ejemplo, en un programa que estoy diseñando he creado un componente visual (TPersona) que es un círculo con la imagen de una persona, entre otros datos. En el formulario tengo uno, visible=false, con las principales opciones por defecto, verás durante la respuesta que la propiedad Name - Persona1-, es lo de menos, se introduce en el formulario para evitar problemas en la compilación.
Para crear nuevos componentes, por ejemplo X, tengo lo siguiente:
Sj = new TPersona *[x];

Sj está en la definición,creo que se dice así, del programa (en mi caso principal.h), como puntero a puntero TPersona** Sj;
luego tienes que introducir los datos de cada componente:

for(int kk=0;kk<x;kk++)
{ Sj[kk]->Nombre= Miembro[kk].Name; \\...
Sj[kk]->Parent= Fondo->Parent; }


Fondo es otro componente del formulario, un TImage. En realidad en esta sentencia asignamos a nuestro control el mismo contenedor del control Fondo,
ES IMPORTANTE asignar a los controles que crees en tiempo de ejecución un contenedor, yo utilizó fondo porque es un TImage donde dibujo junto los TPersona.
Por supuesto un Sj[kk]->Visible = true; deberás poner si los quieres ver.

Recuerda que toda variable creada con new debe eliminarse con delete si no quieres tener problemas de Access Violation y similares; en este caso en FormClose tengo:


if (Sj!=NULL)
{ int b = Sj[0]->Tag;
for(int i= 0; i<b; i++) delete Sj[i]; \\ primero borra los X TPersona*
delete []Sj;\\segundo, borra el TPersona**
}

Idea Utilizo la propiedad Tag del primer componente para almacenar los X componentes creados en tiempo de ejecución, se supone que uno no sabe cuantos tendrá, sino lo haría durante el diseño.

Espero haber sido claro y didáctico, soy un aficionado y desconozco muchos términos técnicos y otras cosas, algunas de las cuales he colgado en el foro, pasan los días y nadie me contesta Crying or Very sad
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.