Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ClientWidth y ClientHeight Help !!! (https://www.clubdelphi.com/foros/showthread.php?t=71997)

llSnakell 22-01-2011 23:52:50

ClientWidth y ClientHeight Help !!!
 
Ola de nuevo quiero saber para que sirven los ClientWidth y ClientHeight
y en que casos se utilizan !! en que tipos de problemas
y si me pueden dar un ejemplo ?????

thanks !!

Lord Delfos 23-01-2011 04:28:15

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.


La franja horaria es GMT +2. Ahora son las 12:47:08.

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