Optimizar velocidad de creacion objetos tpanel
Hola a todos,
Tengo desarrollada una clase que me permite crear de forma dinamica una representacion grafica mediante objetos tpanel. A esta clase le paso como parametro un dataset y en funcion de unos datos crea dinamicamente esta representacion. Utilizo el tpanel porque tiene las caracteristicas de disponer ya los eventos onclick y algun otro que utilizo por cada objeto creado. Esta representacion grafica utiliza unos 2000-3000 objectos tpanel de unas dimensiones muy pequeñas (9x9) Y el principal problema lo tengo en la creacion de los objetos pues tarda mucho tiempo. Entorno a unos 20-30 o mas segundos. Lo cual no es nada aceptable cuando un usuario abre dicha pantalla. |
Tal vez la idea está bien para pocos objetos, pero está visto que para un número grande la cosa se desmadra.
Creo que debes ir hacia componentes específicos de dibujo, tipo TSimpleGraph, del que ya he hablado otras veces aquí. Te lo digo por experiencia, ya que lo he utilizado bastante y con muchos objetos. Aquí hace tiempo hablé de él y coloqué algunas imágenes (Imagen 1 y Imagen 2) donde puedes ver la cantidad de objetos que se definen (en el caso de explanadas, pueden llegar a 7000). Este componente ya te permite realizar multitud de operaciones con lo elementos que añades; Ya poseen eventos, y operaciones de zoom, pan, impresión, exportación... |
Disculpar que me quede a medias ayer con la explicación.
Esta clase que comentaba una vez crea todos estos objetos y estan visibles, normalmente ocupan mas espacio que el tamaño del formulario y por eso activo las barras de desplazamiento del mismo. La cuestion es que una vez creado lo gestiona correctamente, es decir que si por ejemplo cambio de formulario y vuelvo al que tiene esta grafica lo repinta en un tiempo un tiempo aceptable (1s). Por lo que el problema solo esta en la creación dinamica de los objetos. Un detalle mas es que no puedo tener creada la grafica de antemanos pues va en funcion de la que seleccione el usuario. La pregunta es, como podria optimizar esto usuando quizas otro componente de la VCL o quizas tendre que crearme yo mi propio tpanel mas optimizado... Como ya comentaba utilice el tpanel porque utilizo un par de eventos de los que soporta (dbclick y el que detecta cuando esta el raton sobre el componente) por lo que con un componente exclusivamente grafico como el tshape creo que no me serviria. Muchas gracias! |
Vaya Neftali te me has adelantado :)
Muchas gracias por la respuesta. Es muy similar lo que prentedo realizar a las imagenes que tu pones. Mirare este componente que comentas parece bastante potente. es freeware verdad? |
Deberías mirar antes que nada si el problema está en crear los paneles o en calcular la gráfica que va dentro del panel.
Haz la prueba de comentar la operación que haces con el DataSet y mira cuanto tarda. |
Cita:
Todos los demás detalles en DelphiArea. |
duilioisola:
No hay ningun tiempo de calculo, es solo en crear los miles de objectos en los que tarda en crearlo. La grafica en si son los tpanel de tamaño muy pequeño. algo parecido a la imagen que puso Neftali. Gracias igualmente. Neftali: Muchas gracias por la respuesta. Tengo que probar a deribar mi clase de la TSimpleGraph. Saludos, |
He hecho una pequeña prueba:
Luego con más tiempo podrás buscar una mejor solución. |
duilioisola:
Muchas gracias por tu aporte, si con esto lo soluciono me iria perfecto ya que no tengo el tiempo para dedicarle a reestructurarlo. Aunque creo recordar que esto ya lo hacia lo de poner en invible el TGroupBox sobre el que creaba los TPanel y una vez creados lo ponia visible. Voy a revisarlo!! Gracias de nuevo! |
He limpiado la prueba que hice y te la envío para que puedas hacer tus pruebas.
Con 2000 paneles tarda unos 3 segundos. Con 5000 paneles tarda unos 8 segundos.
|
La franja horaria es GMT +2. Ahora son las 06:21:17. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi