Ver Mensaje Individual
  #2  
Antiguo 23-01-2011
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Reputación: 17
Lord Delfos Va por buen camino
El ClientWidth y ClientHeight te dan el ancho y el alto del área cliente de un control. Esto es, el alto y ancho del área "interna", la útil para meterle cosas adentro.

Por ejemplo, en un TForm te dan el tamaño SIN los bordes. Mientras que heigh y width te dan el tamaño total de la ventana.

Ejemplo, poné esto en un botón:

Código Delphi [-]
  ShowMessage('ClientWidth: ' + IntToStr(ClientWidth) +'  ClientHeight: '+ IntToStr(ClientHeight) +#13#10 + 'Width: ' +IntToStr(Width) + ' Height: '+IntToStr(Height));

Por ejemplo a mí me da:
Código:
  675 Height
- 637 Client Height
 ---- 
   38 -> Barra de título más borde inferior.

  1305 Width      
- 1289 Client Width
  ----
    16 -> borde derecho e izquierdo.
Es decir, el Height cuenta el alto de la ventana más el alto de la barra de título y el borde inferior. Lo mismo hace el Width.

No todos los controles van a tener diferencias entre las dos cosas. Por ejemplo, una Label ambos valores son iguales... Lógico, la label no tiene bordes de ninguna clase.

Hay multitud de uses para estas dos propiedades client... Uno que se me venga a la mente... no sé, digamos por ejemplo que quiero mostrar un gráfico dinámico de alguna clase en una ventana. ¿De cuánto espacio dispongo? Width y Height no me sirven porque el ancho de los bordes varía de SO a SO. En cambio CW y WH no varían, porque no tienen en cuenta los bordes. Así yo puedo saber qué escala exacta tengo que usar para mi gráfico.

Otro ejemplo: quiero, en tiempo de ejecución, poner un control a la derecha de la ventana, a unos 16 píxeles del final... Es decir quiero hacer algo como:

Código Delphi [-]
Control.Left:= Ventana.Width - Control.Width - 16 - 16 {por el borde};

Pero esto tiene el problema de que el borde me varía y me rompe mi "algoritmo posicionador de controles en runtime". ¿Qué hago? Pues uso ClientWidth en lugar de Width.


Espero te sirva. Saludongos.

Última edición por Lord Delfos fecha: 23-01-2011 a las 04:33:25. Razón: Más errores ortográficos que el Chavo del Ocho.
Responder Con Cita