Tenemos una GUI de varios marcos que crean sus contenidos dinámicamente. Cada cuadro crea paneles, etiquetas, ediciones, cuadros combinados, etc., para usar como campos de entrada. Esto está funcionando muy bien y también estamos planeando dejar que cada marco genere su contenido en hilos separados.Delphi Win32: aceleración de controles creados dinámicamente (propiedad primaria)
Sin embargo, hay un gran problema: ¡es bastante lento! Crear los controles no lleva tiempo, pero establecer la propiedad Parent parece consumir mucho tiempo.
He intentado varias formas de acelerar el proceso pero sin suerte. He intentado con Enabled = False, Visible = False, DisableAlign, LockWindowUpdate, WM_SETREDRAW ... pero nada parece afectar el proceso lento de configuración de Parent de los controles.
Incluso si usamos hilos esto llevará tiempo ya que las funciones de VCL se deben llamar dentro de Sincronizar.
¿Hay alguna otra forma de acelerar la creación y la presentación de controles?
Saludos cordiales, Magnus
Editar: No hay datos componentes conscientes o eventos desencadenados en la GUI. Solo estoy creando los controles y mostrándolos. Utilizando cronómetros identifiqué la asignación de los controles padre (AControl.Parent: = AOwner) como la parte que consume mucho tiempo.
Editar 2: Como se muestra en la respuesta a continuación, el problema de velocidad no es configurar el elemento primario sino la pintura del control. Cuando probé el momento en que el contenedor era visible y la configuración del padre causó la pintura inmediata del control.
Editar 3: Otra parte que consume mucho tiempo de nuestra GUI dinámica es la asignación de elementos a cuadros combinados. ComboBox.Items.Assign (DataItems) donde DataItems no tiene más de tres o seis elementos.
¡Gracias a todos por tomarse el tiempo para ayudarme!
El objetivo de varios hilos sería permitir que el usuario continúe trabajando en una parte de la interfaz de usuario mientras el contenido se carga en otras partes (marcos). Entiendo que puede que no sea más rápido, pero al menos el usuario no tendría que esperar a que termine. –
Gracias, dejaré el hilo por el momento, aunque todavía me parece una buena idea. :-) –