Cómo personalizar la forma de un formulario
Artículo por Club Developers · 31 diciembre 2005
4908 vistas
Este método permite obtener formularios no rectangulares. Para ello tenemos que realizar 2 tareas.
1. Crear la zona a mostrar:
Con ayuda de las siguientes funciones, devemos de crear esta zona.
Estas dos funciones crean una región elÃptica. Las coordenadas pasadas deberán ser deacuerdo a la medida del formulario.
Los procedimientos para generar zonas rectangulares y rectángulos redondeados funcionan del mismo modo:
También podemos generar una región poligonal con la ayuda de la siguente función:
Donde:
lppt es un array que contiene los puntos del poligono
cPoints indica el número de puntos del polÃgono
PolyFillMode es una constante correspondiente al modo de llenado del polÃgono.
2. Definir esta zona a mostrar como zona de nuestro formulario:
Ahora necesitamos decirle a nuestro formulario que use esta región. Para ello tenemos la siguiente función
Donde:
hWnd corresponde al handle de nuestro formulario
hRng la región donde mostrar el formulario
bRedraw para indicar si queremos refrescar nuestro formulario immediatamente o no
Todo lo que esté en el área definida se mostrará, todo lo demás no.
Ahora sólo queda codificar el OnCreate del formulario
1. Crear la zona a mostrar:
Con ayuda de las siguientes funciones, devemos de crear esta zona.
delphi
CreateEllipticRgn(X1, Y1, X2, Y2: integer); CreateEllipticRgnIndirect(Rect: TRect);
Estas dos funciones crean una región elÃptica. Las coordenadas pasadas deberán ser deacuerdo a la medida del formulario.
Los procedimientos para generar zonas rectangulares y rectángulos redondeados funcionan del mismo modo:
delphi
CreateRectRgn(X1, Y1, X2, Y2: integer); CreateRoundrectRgn(X1, Y1, X2, Y2, rayonarrondihor, rayonarrondivert: integer);
También podemos generar una región poligonal con la ayuda de la siguente función:
delphi
CreatePolygonRgn(lppt: Array Of TPoint; cPoints, PolyFillMode: integer);
Donde:
lppt es un array que contiene los puntos del poligono
cPoints indica el número de puntos del polÃgono
PolyFillMode es una constante correspondiente al modo de llenado del polÃgono.
delphi
Var  T: array[0..2] of TPoint;  i: Integer; begin  { rellenamos el array }  For i := 0 to 2 do T[i] := Point(Random(Width), Random(Height));  { creamos la región }  Rgn := CreatePolygonRgn(T, 3, WINDING); end;
2. Definir esta zona a mostrar como zona de nuestro formulario:
Ahora necesitamos decirle a nuestro formulario que use esta región. Para ello tenemos la siguiente función
delphi
SetWindowRgn(hWnd: HNWD, hRng: HRNG, bRedraw: LongBool): Integer
Donde:
hWnd corresponde al handle de nuestro formulario
hRng la región donde mostrar el formulario
bRedraw para indicar si queremos refrescar nuestro formulario immediatamente o no
Todo lo que esté en el área definida se mostrará, todo lo demás no.
Ahora sólo queda codificar el OnCreate del formulario
delphi
Var  Rgn : Hrgn;  ... begin  ...  Rgn := CreateEllipticRgn(1,1,100,50); { una elipse alargada }  SetWindowsRgn(Handle, Rgn, true);  ... end;