![]() |
Repetir varios controles en tiempo de ejecución
Quisiera saber si existe una forma para "repetir" varios controles en distintas partes de una ventana.
Me explico: Lo que quiero hacer es una ventana con un TPageControl, que contenga varias pestañas. Dentro de cada pestaña van una serie de controles, en todas los mismos, y con las mismas propiedades. Lo que pregunto es si hay alguna manera de crear los controles en la primera pestaña, con las propiedades que se necesiten, y luego copiar esos mismos controles en las demás pestañas. Me refiero a hacerlo, evidentemente, en tiempo de ejecución. ¿Y que por qué no lo hago en tiempo de diseño? Muy sencillo. El número de pestañas del TPageControl no es fijo, sino que depende de lo que se le especifique en un archivo de configuración. ¿Alguien puede ayudarme con el tema? Gracias. |
Algo rápido que se me ocurre:
Coloca todos los controles de la pestaña en un TFrame y ya durante la ejecución nada más creas un frame por cada pestaña y lo insertas. // Saludos |
Primero te recomendaría utilizar un TTabControl en lugar de un TPageControl, así siempre trabajas con el mismo juego de componentes, evitando utilizar recursos innecesarios.
Si esto no te sirve, porque se te complica mucho la lógica, una opción puede ser armar un TFrame con todo el juego de componentes que tu quieres, y crear en tiempo de ejecución tantas instancias de este TFrame como necesites. Si esto tampoco te convence, puedes hacer lo que tu quieres, crear los componentes que tiene el primer tab, a ellos puedes acceder a través de la propiedad Components, ir creando uno a uno, asignarle las propiedades del objeto anterior por el método Assign, y cambiarle el parent. La teoría de esto diría que funcionaría pero el método assign no esta implementado en la mayoría de los controles de la VCL, por lo que no te recomiendo esta última opción. Saludos! |
Cita:
Nunca he trabajado con TFrames antes. He estado mirando la ayuda, y veo que son como ventanas, pero ¿cómo asocio un TFrame con mis pestañas? |
Cita:
En el frame colocas todas las componentes que requieres. Finalmente insertas en el formulario una componente Frame, de la paleta "Standard". Al hacerlo te aparecerá una lista con los frames (o mejor dicho, clases de frames) que tengas creados, en este caso sólo uno. Para crearlos en código bastará algo así: Código:
with TFrame1.Create(Self) do // Saludos |
En tu caso, que las creas dinámicamente:
Código:
for i := 0 to PageControl1.PageCount-1 do Saludos! |
Roman!!!.. esa manía de responder a coro!! :D
Saludos! |
Cita:
[Fatal Error]Project1.dpr(): Could not compile used unit in 'Unit1.pas' :D |
:eek: Ups.. Error de sintaxis!!, eso me pasa por escribir directamente en el foro :p
Código:
for i := 0 to PageControl1.PageCount-1 do |
Gracias de nuevo.
Pero hay algo que todavía no me ha quedado claro del todo. ¿Cómo accedo luego a los componentes que he metido en el frame? Por ejemplo, si en el frame hay un Edit, habrá luego un edit en cada pestaña. ¿Cómo me refiero a ellos entonces? |
Frame.Edit
// Saludos |
Gracias de nuevo, Román.
A ver, os pongo cómo lo he hecho al final, a ver qué os parece: Código:
Uses Frames; Así funciona, lo que no sé si es la forma correcta de hacerlo, o si hay una forma mejor. Vuestras opiniones y críticas serán bienvenidas ;) Gracias por vuestra paciencia. |
La franja horaria es GMT +2. Ahora son las 23:32:12. |
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