Código en Delphi 6, válido para Delphi for win32 y CodeGear RAD Studio (Delphi win32)
Home
Download
Documentos
Links
Historial
Correo

ShapeForm


ShapeForm es un componente no visual que permite cambiar la 'forma' con que se dibuja una ventana (form), permitiendo que ésta sea poligonal, con la silueta de una imagen, multipoligonal, etc.

Nota :El código de la función utilizada para crear la región de un bitmap es de Felipe Rocha Machado que a su vez es de la traducción del código C de Jean-Edouard Lachand-Robert

Propiedades:

Active : Activa/Desactiva el componente
Corner : Coordenadas X,Y para formar el arco de las esquinas de la ventana cuando la forma (Shape) elegida sea un Rectángulo redondeado.
Color : Colores usados para especificar el color que se utilizará como transparente al crear una región desde un bitmap.
Transparent : Color para los pixels transparentes
Tolerance : Tolerancia para los pixels transparentes (pixel transparente si >=transparente y <=(transparente+tolerance)
DrawPicture : Dibuja automáticamente el bitmap desde el que se ha creado la región o no (sólo lo dibuja en tiempo de ejecución). Sólo se tiene en cuenta cuando Shape es de tipo imagen
FormBorderStyle : Indica el estilo del borde del form cuando el componente está inactivo
FormBorderSize : Indica el tamaño del borde del form cuando el componente está inactivo
Frame : Tipo de borde del form :
Brush : Brocha utilizada para dibujar el borde
Size : Tamaño del dibujo del borde
Framed : Dibujar el borde o no (sólo dibuja el borde en ejecución, no en diseño).
Name: Nombre del control.
Picture : Imagen utilizada para crear la región en caso de ser de tipo imagen el Shape.
Polygons : Polígonos que formarán la 'forma' de la ventana. Sólo se usan en el caso de que la propiedad Shape del componente sea sfPolygon.
CombineMode: Modo de combinación de los distintos polígonos, es decir la operación realizada(cmOR, cmXOR, cmAND, cmDIFF)
LoadType: La carga de polígonos nuevos reemplaza a los existentes (ltReplace) o se añaden al final (ltAppend)
NCPolygon: Polígono 'Non Client'. Si sobre este polígono no se añade ningún control que lo cubra por entero, durante la ejecución del programa se podrá mover la ventana pulsando con el ratón sobre él.
Items : Cada uno de los polígonos.
Corners: Si el tipo de polígono es ptRoundRect, entonces índica los parámetros del arco de las esquinas del polígono.
Name: Nombre del polígono.
Points: Conjunto de puntos del polígono.
PolyfillMode: Espedifica el modo en que se determina que pixels se encuentran en una regiós (form): pfmWinding, pfmAlternate. Ver la ayuda de CreatePolygonRgn en delphi..
PolType: Tipo de polígono:
Tipo Descripción
ptOther Cualquier tipo de polígono
ptOval Elipse
ptRect Rectángulo
ptRoundRect Rectángulo redondeado
Shape : Tipo de la forma que tendrá la ventana :
Tipo Descripción
sfRect Rectángulo
sfRoundedRect Rectángulo redondeado
sfElliptical Elíptico
sfPolygon Multipoligonal
sfImage Imagen bitmap

Tag : Etiqueta.

Métodos:

DrawFrame: Dibuja el marco alrededor de la ventana.

Eventos:

OnShapeChange: Se produce cada vez que cambia el tipo de forma.
OnStatusChange: Se produce cada vez que cambia el estado (Activo/Desactivo) del componente.

Este componente tiene la posibilidad de cargar los polígonos (Polygons) desde un fichero, así como guardarlos en otro. Desde el IDE de delphi si picamos sobre el control con el botón derecho aparecerán dos opciones para hacer esto. El formato de este fichero es XML como el siguiente ejemplo :

<?xml version="1.0" encoding="ISO-8859-1"?>
<Polygons>
<Polygon Name="Polygon_0" Type="Other">
<Corners X="0" Y="0"/>
<Center X="337" Y="427"/ Value="True">
<Point X="320" Y="312"/>
<Point X="477" Y="399"/>
<Point X="416" Y="541"/>
<Point X="249" Y="542"/>
<Point X="197" Y="406"/>
<Point X="273" Y="364"/>
</Polygon>
<Polygon Name="Polygon_1" Type="Oval">
<Corners X="0" Y="0"/>
<Center X="335" Y="468" Value="True"/>
<Point X="289" Y="430"/>
<Point X="381" Y="507"/>
</Polygon>
<Polygon Name="Polygon_2" Type="Other">
<Corners X="0" Y="0"/>
<Center X="171" Y="171" Value="False"/>
<Point X="342" Y="171"/>
<Point X="292" Y="292"/>
<Point X="171" Y="342"/>
<Point X="50" Y="292"/>
<Point X="0" Y="171"/>
<Point X="50" Y="50"/>
<Point X="171" Y="0"/>
<Point X="292" Y="50"/>
</Polygon>
<Polygon Name="Polygon_3" Type="RoundRect">
<Corners X="50" Y="50"/>
<Center X="108" Y="441" Value="False"/>
<Point X="52" Y="376"/>
<Point X="165" Y="506"/>
</Polygon>
</Polygons>

Cada polígono tiene un nombre -Name- un tipo -Type- que puede ser Rect, RoundRect, Other y Oval.

Por otra parte tiene un centro -Center- (que no tiene que ser el centro real) , esquinas -Corners- necesarias para el caso de que el tipo sea RoundRect y tantos puntos -Point- como sean necesarios (Rect, RoundRed y Oval sólo necesitan 2 puntos).

Este componente tiene un editor de polígonos que aparecerá cuando se haga un doble Click sobre el mismo o se elija la opción desde el menú contextual del componente. Descarga manual en pdf.