Cuando explicamos los componentes visuales, dijimos que existían básicamente dos tipos: los que permitían la interactuación del usuario y los que no. Los primeros, que ya hemos explicado, permiten recibir eventos de teclado por una razón muy importante: son ventanas, aunque no lo parezca a simple vista.
Para el sistema operativo Windows, el concepto de “ventana” es mucho más amplio que para un usuario normal. Hasta ahora, para los simples mortales como nosotros, una ventana era ese rectángulo con una barra azul arriba, que aparece en la pantalla y muestra dentro los elemento de la aplicación con que estamos trabajando: cuadros de texto, campos de edición, árboles jerárquicos, botones, etc. Sin embargo, para el sistema operativo hay dos tipos de ventanas: las que parece (y se comportan) como una ventana de verdad (llamadas en inglés overlapped), y las que parecen (y se comportan) como un componente, llamadas “controles”. Así, para Windows, un botón, un campo de edición, un cuadro combinado y casi cualquier componente es también una ventana de tipo control.
Las ventanas (ya sean de un tipo o de otro) tienen una característica muy importante: están identificadas por un número único que permite que el sistema operativo pueda comunicarse con ellas. Este número recibe el nombre de handle, o en castellano: descriptor, manejador, identificador, etc. y la comunicación, como ya vimos en su día, se consigue a través de los denominados mensajes. Esto tiene una consecuencia lógica: el sistema operativo solo puede comunicarse con una ventana a través de su descriptor de ventana. Otra consecuencia es que, lógicamente, un descriptor de ventana consume recursos. Podría parecer un consumo mínimo, casi despreciable, pero en situaciones de estrés, el sistema puede colapsarse por tener demasiados descriptores creados. En tiempos de los 16 bits (cuando trabajábamos con Windows 3.x), existía una barrera física de 65.535 descriptores como máximo, lo cual no era difícil de alcanzar, teniendo en cuenta que cada componente creado y ventana abierta consume un descriptor. Sin embargo, a partir de Windows 95 se permiten muchos más descriptores, aunque en el mundo de los ordenadores, el infinito no existe. Un descriptor de ventana, además de consumir recursos, hace que el componente funcione de forma más lenta, ya que hay que llamar a funciones del sistema para crear y destruir el descriptor, así como la recepción de los posibles mensajes.
Sabiendo todo esto, ya podemos adivinar por qué hay dos tipos de componentes gráficos: unos son ventanas, es decir: tienen un handle de ventana, y otros no lo son: no tienen descriptor.
Los componentes que son ventanas, heredan de TWinControl, sin embargo, los componentes gráficos que no son ventanas, heredan directamente de uno de los hijos de TControl: TGraphicControl. Como veis, los nombres sugieren bastante bien para qué sirve cada uno de los componentes.