![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Hola,
Es que depende... depende si lo quieres hacer en tiempo de diseño o en tiempo de ejecución. Creo que con lo de los "Frames" puedes haber dado en el clavo. De hecho, si estás haciéndolo en tiempo de diseño supongo que estarás usando algo así, porque no te imagino situando "cientos de Shapes" en un formulario... cada uno de su padre y de su madre. Si cada ficha contiene unos controles ahí tenemos un componente, llámese "frame" o llámese otro que creemos nosotros. Pero eso es un componente que contiene unos determinados controles. Estoy contando, por otro lado, conque las fichas contienen los mismos controles, porque de otro modo el asunto se complicaría. Pero aunque se complicara. Si existieran dos o tres tipos de fichas, todas serían un componente que tal vez pudiera heredar de una ficha "base". Y luego ver qué queremos hacer y cómo. Quiero decir que se me hace raro que quieras localizar el "Shape123", por ejemplo. Para mí que ahí falla algo... Entiendo que deberías trabajar con las fichas, individualmente. Porque además no entiendo que quieras trabajar con un "Shape123", que sería como si dijéramos que las fichas no son en realidad componentes, y cada "Shape" puede estar en una ficha u otra aleatoriamente. No sé. Tengo la sensación de que me voy por las ramas, de que no estoy fino ni te estoy ayudando en nada... pero, ya está dicho. ![]() |
|
#2
|
|||
|
|||
|
Si lo que quieres es crear los componentes por código, como dice dec, tendrías que llamar al constructor de cada uno:
__________________
Saludos. |
|
#3
|
||||
|
||||
|
Gracias Basti.
Funciona correctamente ! ![]() ... de mi ! En otra parte del programa había hecho algo parecido y no me he percatado de ello para esta problemática que planteo en este hilo.En cualquier caso, al código le falta un detalle para que funcione correctamente :
Conclusión : He probado la funcionalidad de mi programa de esta manera, es decir, accediendo después directamente a RackCard[i].ShapeA (por ejemplo), en vez de utilizar el FindComponent en un Form que como ya comenté antes tiene cerca de 1000 elementos. Cual sorpresa la mía. No hay NINGUNA mejora de rendimiento. Vamos, que lo mismo es acceder al Array directamente que utilizar FindComponent con una lista de 1000 componentes en el form. En un procedimiento de actualización con datos y tal, ambos procesos tardan exactamente 4.6 segundos medidos en mi ordenador. Por lo que concluyo que mi idea de utilizar arrays con acceso directo en vez de FindComponent finalmente no mejora el rendimiento. Así que se queda como está !Gracias a todos por vuestra ayuda.
__________________
Piensa siempre en positivo ! |
|
#4
|
|||
|
|||
|
Me extraña que no haya diferencia entre uno y otro. He visto la implementación de FindComponent:
Es una búsqueda lineal, debería de tardar algún tiempo, mientras que el array es un acceso directo. Es posible que no exista diferencia por tratarse de un array dinámico. Puedes probar a declararlo como
Y luego hacer la prueba dentro de un bucle de unas 100 repeticiones, para ver si realmente existe diferencia de tiempo.
__________________
Saludos. |
|
#5
|
||||
|
||||
|
Probablemente, por no decir casi seguro, pueda haber una diferencia de tiempo y de rendimiento entre las dos opciones que venimos comentando.
Lo que quiero aclarar es que a pesar de utilizar FindComponent con el número de componentes que tengo en mi form, el rendimiento no mejora en el procedimiento que realizo. He probado también declarando el Array como indicas arriba. Trabajando con datos, y realizando las búsquedas que hago, actualizaciones, etcétera, (que está claro que es lo que más tiempo me va a llevar en cuanto a observar el rendimiento), no se aprecian diferencias entre ambas formas de implementación.
__________________
Piensa siempre en positivo ! |
|
#6
|
||||
|
||||
|
Siguiente duda que me surge :
Cuando selecciono cualquier elemento con el ratón, ya sea un Shape o Label del Record (RackCard) que acabo de crear (haciendo por ejemplo Click en cualquiera de ellos), como sé que posición en el array ocupa ?? Es decir, quiero saber cual ficha he seleccionado desde la 0 a la 69. La función IndexOf me devuelve el valor buscado ? Nota: No puedo utilizar los Tag's de cada componente, debido a que ya los tengo asignados con otros valores.
__________________
Piensa siempre en positivo ! |
|
#7
|
||||
|
||||
|
Me acabo de dar cuenta que puedo utilizar la propiedad Name de cada elemento para saber cual he pulsado.
Si se os ocurre otra posibilidad ....
__________________
Piensa siempre en positivo ! |
|
#8
|
|||
|
|||
|
Te iba a responder con lo de los Tag, pero ya veo que no es posible.
IndexOf no te dará el valor de la posición del array. Tendrías que hacer una función que hiciese el recorrido a través del array y compararlo con on el Sender que recibes en el OnClick.
__________________
Saludos. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Referencia a diferentes instancias del mismo Form | gluglu | OOP | 14 | 23-02-2007 17:22:32 |
| Evitar múltiples instancias de un mismo form | Neomanar | OOP | 1 | 09-09-2005 17:10:26 |
| Varias instancias DataModules | rodmayes | OOP | 1 | 05-09-2005 13:37:45 |
| Múltiples instancias de un mismo formulario | Neomanar | Varios | 1 | 22-08-2005 15:20:29 |
| Crear elementos en tiempo de ejecucion | Tecnic2 | OOP | 12 | 15-06-2005 20:12:42 |
|