Beruflich Dokumente
Kultur Dokumente
13
El Canvas
El Canvas (lienzo) representa una superficie en un objeto donde se puede diseñar un
bitmap. El Canvas es siempre una propiedad de alguna cosa y nunca una clase u objeto
por si mismo.
Cuando se desea diseñar o pintar sobre un objeto, se debe diseñar o pintar sobre el
Canvas asociado a él.
Las operaciones de diseño envuelven la manipulación de pixeles individuales para
diseñar puntos o líneas. Por ejemplo, el color de un pixel puede ser alterado con la
siguiente instrucción:
Canvas.Pixels[10,10] := clRed;
Las operaciones de pintura envuelven la manipulación de grandes cantidades de
pixeles. Generalmente, la pintura incluye el diseño.
Font
Especifica la fuente a usar cuando se escribirá texto sobre la imagen. Configure las
propiedades del objeto TFont para especificar el tipo, color, tamaño y estilo de la fuente.
Pen
Especifica el tipo de pincel que el Canvas usara para dibujar rectas y formas. Configure
las propiedades del objeto TPen para especificar el color, estilo, ancho y modo del pincel.
PenPos
Especifica la posición de dibujo actual del pincel.
Pixels
Especifica el color del área de pixeles dentro del actual ClipRect.
Arc
1
Dibuja un arco sobre la imagen a lo largo del perímetro de la elipse limitada por el
rectángulo especificado.
Chord
Dibuja una figura cerrada representada por la intersección de una recta y una elipse.
CopyRect
Copia parte de una imagen desde otro Canvas en el Canvas.
Draw
Copia el objeto grafico especificado por el parámetro Grafico en el Canvas en la
ubicación dada por las coordenadas (X,Y).
Ellipse
Dibuja la elipse definida por un rectángulo limite sobre el Canvas.
FillRect
Rellena el rectángulo especificado sobre el Canvas usando la brocha actual
LineTo
Dibuja una recta sobre el Canvas desde el PenPos al punto especificado por X e Y, y
establece la posición del pincel a (X,Y).
MoveTo
Cambia la posición de dibujo actual al punto (X,Y).
Pie
Dibuja un pie formado por la sección de la elipse limitada por el rectángulo (X1,Y1) y
(X2,Y2) sobre el Canvas.
Polygon
Dibuja una serie de rectas sobre el Canvas conectando los puntos pasados y cerrando la
figura dibujando la recta desde el punto final al punto inicial.
Polyline
Dibuja una serie de rectas sobre El Canvas con el pincel actual, conectando cada uno
de los puntos pasados a él en Points.
2
Rectangle
Dibuja un rectángulo sobre el Canvas con su esquina superior izquierda en el punto
(X1,Y1) y su esquina inferior derecha en el punto (X2,Y2). Use Rectangle para dibujar
una caja usando pincel y rellénelo usando la brocha.
RoundRect
Dibuja un rectángulo con las esquinas redondeadas sobre el Canvas.
StretchDraw
Dibuja un grafico sobre el Canvas de modo que la imagen se ajusta en el rectángulo
especificado. La imagen grafica podría necesitar cambiar su magnitud o el aspecto del
radio para ajustarlo.
TextHeight, TextWidth
Retorna la altura y el ancho respectivamente, de una cadena en la fuente actual.
TextOut
Escribe una cadena sobre el Canvas, empezando en el punto (X,Y), y luego actualiza el
PenPos al final de la cadena.
TextRect
Escribe una cadena al interior de una región; cualquier porción de la cadena que cae
fuera de la región no aparece.
Sintaxis
A continuación listaremos la sintaxis para los métodos más comunes del Objeto Canvas.
Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);
Chord(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);
Ellipse(X1, Y1, X2, Y2: Integer);
FillRect( const Rect: TRect);
LineTo(X,Y: Integer);
MoveTo(X,Y: Integer);
Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);
Polygon(Puntos);
PolyLine(Puntos);
3
Rectangle(X1, Y1, X2, Y2: Integer);
RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer);
TextOut(X,Y: Integer; const Text: WideString);
TextRect(Rect; TRect; X,Y: Integer; const Text: String);
2) Dibujando Poligonales
4
El siguiente método dibujara un rombo en una ficha:
Pasos
1. En el Inspector de Objetos ubique el evento OnPaint en la pagina Events.
2. Haga doble clic dentro del cuadro de la lista desplegable de la derecha.
3. Inserte el siguiente código:
procedure TForm1.FormPaint(Sender: TObject);
begin
with Canvas do
PolyLine([Point(50,50), Point(100, 50), Point(125, 100), Point(75, 100), Point(50, 50)]);
end;
Programa ejecutándose:
3) Estrella Blanca
Este ejemplo pinta una estrella blanca de cinco puntas en un controlador PaintBox.
Pasos
1. En el Diseñador de Formularios inserte un control PaintBox, luego para este
objeto ubique el evento OnPaint en la pagina Events.
2. Haga doble clic dentro del cuadro de la lista desplegable de la derecha.
3. Inserte el siguiente código:
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
with Sender as TPaintBox do
begin
Canvas.Pen.Color := clWhite;
Canvas.Polyline([Point(40, 10), Point(20, 60), Point(70, 30),
Point(10, 30), Point(60, 60), Point(40, 10)]);
end;
end;
5
Programa ejecutándose:
4) Arco
Las siguientes líneas de código dibujan el cuarto superior de una arco limitado por la
ventana actual:
Pasos
1. En el Inspector de Objetos ubique el evento OnPaint en la pagina Events.
2. Haga doble clic dentro del cuadro de la lista desplegable de la derecha.
3. Inserte el siguiente código:
procedure TForm1.FormPaint(Sender: TObject);
var
R: TRect;
begin
R := GetClientRect;
{Obtiene los limites de la ventana actual}
Canvas.Arc(R.Left, R.Top, R.Right, R.Bottom, R.Right, R.Top, R.Left, R.Top);
end;
Programa ejecutándose:
6
5) Elipse
El siguiente ejemplo pinta una elipse con relleno cuadriculado dentro el componente
Image1 sobre la ficha cuando el usuario hace clic en el botón.
Pasos
1. En el formulario inserte un control Image1 y un control Button1, luego para este
ultimo objeto ubique el evento OnClick en la pagina Events del Inspector de
Objetos.
2. Haga doble clic dentro del cuadro de la lista desplegable de la derecha.
3. Inserte el siguiente código:
procedure TForm1.Button1Click(Sender: TObject);
begin
with Image1 do
begin
Canvas.Brush.Color := clRed;
Canvas.Brush.Style := bsDiagCross;
Canvas.Ellipse(0, 0, Image1.Width, Image1.Height);
end;
end;
Programa ejecutándose:
7
var
X, Y, DX, DY: Integer;
2. Seleccione la ficha. En el Inspector de Objetos ubique el evento OnActivate en la
pagina Events.
3. Inserte el siguiente código:
procedure TForm1.FormActivate(Sender: TObject);
begin
WindowState := wsMaximized;
Timer1.Interval := 50;
Randomize;
end;
Programa ejecutándose:
8
7) Elipses, Círculos y Arcos
Pasos
1. En el Inspector de Objetos inserte un control situado en la pagina System.
2. Seleccione el objeto Timer. En el Inspector de Objetos ubique el evento OnTimer,
en la pagina Events haga doble clic y complete las siguientes instrucciones:
procedure TForm1.RelojTimer(Sender: TObject);
Var
X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer;
begin
With Canvas Do
Begin
// Tomar aleatoriamente los colores
// y estilos del borde y el relleno
Pen.Color := RGB(Random(256), Random(256), Random(256));
Pen.Width := Random(10);
Brush.Color := RGB(Random(256), Random(256), Random(256));
Brush.Style := TBrushStyle(Random(8));
end;
El método Arc traza un arco de elipse cuyos parámetros son: 4 enteros con las
coordenadas del rectángulo imaginario que delimita la elipse, 2 enteros para determinar
el final de una línea que tendrá su origen en el centro de la elipse el que constituirá el
9
inicio del arco y 2 enteros mas para el cruce entre la recta y la elipse para determinar el
final del arco.
El método Chord dibuja el arco con sus extremos unidos por una línea recta, rellenando
el interior con la brocha actual.
El método Pie dibujara 2 líneas desde el centro de las elipses hasta sus extremos,
generando una superficie similar a la de un sector de un grafico.
Programa ejecutándose:
8) Parábola
Diseñe una aplicación que permita traslaciones a una parábola usando los controles
UpDown.
Pasos:
1. En el Inspector de Objetos inserte los siguientes controles: · Edit, 3 etiquetas, 3
Updpwn y 1 control Button.
2. Aspecto de la interfaz de usuario:
10
Control Propiedad Valor
UpDown1 Associate Edit1
Increment 50
Min 0
Max 350
Plosition 200
UpDown2 Associate Edit2
Increment 50
Min 0
Max 350
Plosition 250
UpDown3 Associate Edit3
Increment 4
Min 1
Max 64
Plosition 36
12
9) Visualizar Gráficos
Este ejemplo nos permitirá ver el contenido de cualquier archivo de mapa de bits.
Pasos:
1. En la Paleta de Componentes inserte 1 control Image situado en la pagina
Additional, 1 control PopupMenu situado en la pagina Standard, 1 control
OpenDialog situado en la pagina Dialogs.
2. El aspecto inicial de la ficha debe ser similar a la figura:
13
3. Seleccione el control Image y establezca la propiedad Align a Client para que
ocupe toda el área disponible de la ficha.
4. Haga doble clic en el objeto PopupMenu y en el editor ingrese las siguientes
opciones de menú:
5. De este modo, al pulsar el botón derecho sobre la ficha, se mostrara este menú
contextual.
6. Describamos cada una de las opciones.
Ajuste de la Imagen:
Ajusta el tamaño de la ventana a la imagen.
Ajuste a la Ventana:
Ajusta el tamaño en la ventana
Centrado
Centra la imagen en la ventana
Recuperar Archivo
Abre un archivo grafico.
14
// Si está activa
If Ajustealaimagen1.Checked Then
Begin
// Ajustar el tamaño de la ventana
// al de la imagen a mostrar
ClientWidth := Imagen.Picture.Width;
ClientHeight := Imagen.Picture.Height;
End;
end;
Para permitir que el control TImage pueda recuperar las imágenes en formato JEPG
añada a la clausula Uses el modulo Jepg.
15
11. Revisemos el código para el evento OnResize:
13. Ejecute la aplicación y pulse el botón derecho sobre la superficie del formulario, en
el menú emergente elija el comando Recuperar Archivo. A continuación emerge el
Dialogo Cargar Archivo Grafico.
16
14. Seleccione un archivo y presione el botón Abrir.
Experimente con todas las opciones del menú, deformando la imagen a medida que
redimensiona la ventana o bien ajustando ésta al tamaño de la imagen.
Observe que cuando está activa la opción de ajustar el tamaño a la imagen no es posible
modificar el tamaño a la ventana.
Programa ejecutándose:
17